From 86afa9588b4cab6f39b5c334e17275ab9c478524 Mon Sep 17 00:00:00 2001 From: Julio Date: Thu, 12 Jul 2018 12:30:57 +0200 Subject: [PATCH] Minor - add js lib "bootstrap-year-calendar" see BT#14608 --- .../bootstrap-year-calendar/.bower.json | 14 + .../assets/bootstrap-year-calendar/LICENSE | 202 +++ .../assets/bootstrap-year-calendar/README.md | 27 + .../css/bootstrap-year-calendar.css | 253 ++++ .../css/bootstrap-year-calendar.min.css | 7 + .../js/bootstrap-year-calendar.js | 1110 +++++++++++++++++ .../languages/bootstrap-year-calendar.de.js | 19 + .../languages/bootstrap-year-calendar.es.js | 19 + .../languages/bootstrap-year-calendar.fr.js | 19 + .../languages/bootstrap-year-calendar.it.js | 19 + .../languages/bootstrap-year-calendar.ja.js | 19 + .../languages/bootstrap-year-calendar.nl.js | 19 + .../languages/bootstrap-year-calendar.pt.js | 20 + .../languages/bootstrap-year-calendar.ru.js | 19 + .../languages/bootstrap-year-calendar.tr.js | 20 + bower.json | 4 +- 16 files changed, 1788 insertions(+), 2 deletions(-) create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/.bower.json create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/LICENSE create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/README.md create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.css create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.min.css create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/bootstrap-year-calendar.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.de.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.es.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.fr.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.it.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ja.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.nl.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.pt.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ru.js create mode 100644 app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.tr.js diff --git a/app/Resources/public/assets/bootstrap-year-calendar/.bower.json b/app/Resources/public/assets/bootstrap-year-calendar/.bower.json new file mode 100644 index 0000000000..fe26a3aa8e --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/.bower.json @@ -0,0 +1,14 @@ +{ + "name": "bootstrap-year-calendar", + "homepage": "https://github.com/Paul-DS/bootstrap-year-calendar", + "version": "1.1.0", + "_release": "1.1.0", + "_resolution": { + "type": "version", + "tag": "v1.1.0", + "commit": "48ef9450d47c63fce8b0d7628bc313ad279a66e0" + }, + "_source": "https://github.com/Paul-DS/bootstrap-year-calendar.git", + "_target": "1.1.*", + "_originalSource": "bootstrap-year-calendar" +} \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/LICENSE b/app/Resources/public/assets/bootstrap-year-calendar/LICENSE new file mode 100644 index 0000000000..8f71f43fee --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/LICENSE @@ -0,0 +1,202 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/app/Resources/public/assets/bootstrap-year-calendar/README.md b/app/Resources/public/assets/bootstrap-year-calendar/README.md new file mode 100644 index 0000000000..edd577dad9 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/README.md @@ -0,0 +1,27 @@ +# bootstrap-year-calendar +A fully customizable year calendar widget, for boostrap ! +You can find all details on the [official website](http://www.bootstrap-year-calendar.com/). + + +![alt tag](http://www.bootstrap-year-calendar.com/img/calendar.png) + +## Requirements + +This plugin requires the following libraries : +- Bootstrap v3.0.0 or later +- jQuery v1.8.0 or later + +## Usage + +You can create a calendar using the following javascript code : +``` +$('.calendar').calendar() +``` +or +``` +$('.calendar').calendar(options) +``` +or with the `data-provide` html attribute +``` +
+``` diff --git a/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.css b/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.css new file mode 100644 index 0000000000..ae2317bd77 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.css @@ -0,0 +1,253 @@ +/* ========================================================= + * Bootstrap year calendar v1.1.0 + * Repo: https://github.com/Paul-DS/bootstrap-year-calendar + * ========================================================= + * Created by Paul David-Sivelle + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +/* Main */ +.calendar { + padding: 4px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + overflow: auto; + direction: ltr; + + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.calendar.calendar-rtl { + direction: rtl; +} +.calendar.calendar-rtl table tr td span { + float: right; +} + +.calendar table { + margin: auto; +} + +.calendar table td, +.calendar table th { + text-align: center; + width: 20px; + height: 20px; + border: none; + padding: 4px 5px; + font-size:12px; +} + +/* Header */ +.calendar .calendar-header +{ + width:100%; + margin-bottom:20px; +} + +.calendar .calendar-header table +{ + width:100%; +} + +.calendar .calendar-header table th +{ + font-size:22px; + padding:5px 10px; +} + +.calendar .calendar-header table th:hover { + background: #eeeeee; + cursor: pointer; +} + +.calendar .calendar-header table th.disabled, +.calendar .calendar-header table th.disabled:hover { + background: none; + cursor: default; + color:white; +} + +.calendar .calendar-header table th.prev, +.calendar .calendar-header table th.next +{ + width:20px; +} + +.calendar .year-title { + font-weight:bold; + text-align:center; + height:20px; + width:auto; +} + +.calendar .year-neighbor +{ + color:#aaaaaa; +} + +.calendar .year-neighbor2 +{ + color:#dddddd; +} + +/* Months */ +.calendar .months-container { + width:100%; + display:none; +} + +.calendar .month-container { + min-width:180px; + text-align:center; + height:200px; + padding:0; +} + +.calendar table.month th.month-title +{ + font-size:16px; + padding-bottom: 5px; +} + +.calendar table.month th.day-header +{ + font-size:14px; +} + + +.calendar table.month tr td, +.calendar table.month tr th +{ + padding:0; +} + +.calendar table.month td.week-number { + cursor: default; + font-weight:bold; + border-right:1px solid #eee; + padding:5px; +} + +.calendar .round-left { + -webkit-border-radius: 8px 0 0 8px; + -moz-border-radius: 8px 0 0 8px; + border-radius: 8px 0 0 8px; +} + +.calendar .round-right { + webkit-border-radius: 0 8px 8px 0 ; + -moz-border-radius: 0 8px 8px 0; + border-radius: 0 8px 8px 0; +} + +.calendar table.month tr td .day-content { + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + padding: 5px 6px; +} + +.table-striped .calendar table.month tr td, +.table-striped .calendar table.month tr th { + background-color: transparent; +} + +.calendar table.month td.day .day-content:hover { + background: rgba(0, 0, 0, 0.2); + cursor: pointer; +} +.calendar table.month tr td.old, +.calendar table.month tr td.new, +.calendar table.month tr td.old:hover, +.calendar table.month tr td.new:hover { + background: none; + cursor: default; +} +.calendar table.month tr td.disabled, +.calendar table.month tr td.disabled:hover { + color: #dddddd; +} + +.calendar table.month td.day.disabled .day-content:hover { + background: none; + cursor: default; +} + +.calendar table.month tr td.range .day-content { + background: rgba(0, 0, 0, 0.2); + -webkit-border-radius: 0; + -moz-border-radius: 0; + border-radius: 0; +} + +.calendar table.month tr td.range.range-start .day-content { + border-top-left-radius:4px; + border-bottom-left-radius:4px; +} + +.calendar table.month tr td.range.range-end .day-content { + border-top-right-radius:4px; + border-bottom-right-radius:4px; +} + +.calendar-context-menu, +.calendar-context-menu .submenu { + border: 1px solid #ddd; + background-color: white; + box-shadow: 2px 2px 5px rgba(0, 0, 0, .2); + -webkit-box-shadow: 2px 2px 5px rgba(0, 0, 0, .2); + position:absolute; + display:none; +} + +.calendar-context-menu .item { + padding:5px 10px; + cursor:pointer; + display:table; + width:100%; +} + +.calendar-context-menu .item:hover { + background:#eee; +} + +.calendar-context-menu .item .content { + display:table-cell; +} + +.calendar-context-menu .item span { + display:table-cell; + padding-left:10px; + text-align:right; +} + +.calendar-context-menu .item span:last-child { + display:none; +} + +.calendar-context-menu .submenu { + left: 100%; + margin-top: -6px; +} + +.calendar-context-menu .item:hover > .submenu { + display:block; +} diff --git a/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.min.css b/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.min.css new file mode 100644 index 0000000000..7c056c3425 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/css/bootstrap-year-calendar.min.css @@ -0,0 +1,7 @@ +/* + * Bootstrap year calendar v1.1.0 + * Created by Paul David-Sivelle + * Licensed under the Apache License, Version 2.0 + */ + + .calendar{padding:4px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;overflow:auto;direction:ltr;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.calendar.calendar-rtl{direction:rtl}.calendar.calendar-rtl table tr td span{float:right}.calendar table{margin:auto}.calendar table td,.calendar table th{text-align:center;width:20px;height:20px;border:none;padding:4px 5px;font-size:12px}.calendar .calendar-header{width:100%;margin-bottom:20px}.calendar .calendar-header table{width:100%}.calendar .calendar-header table th{font-size:22px;padding:5px 10px}.calendar .calendar-header table th:hover{background:#eee;cursor:pointer}.calendar .calendar-header table th.disabled,.calendar .calendar-header table th.disabled:hover{background:0 0;cursor:default;color:#fff}.calendar .calendar-header table th.next,.calendar .calendar-header table th.prev{width:20px}.calendar .year-title{font-weight:700;text-align:center;height:20px;width:auto}.calendar .year-neighbor{color:#aaa}.calendar .year-neighbor2,.calendar table.month tr td.disabled,.calendar table.month tr td.disabled:hover{color:#ddd}.calendar .months-container{width:100%;display:none}.calendar .month-container{min-width:180px;text-align:center;height:200px;padding:0}.calendar table.month th.month-title{font-size:16px;padding-bottom:5px}.calendar table.month th.day-header{font-size:14px}.calendar table.month tr td,.calendar table.month tr th{padding:0}.calendar table.month td.week-number{cursor:default;font-weight:700;border-right:1px solid #eee;padding:5px}.calendar .round-left{-webkit-border-radius:8px 0 0 8px;-moz-border-radius:8px 0 0 8px;border-radius:8px 0 0 8px}.calendar .round-right{webkit-border-radius:0 8px 8px 0;-moz-border-radius:0 8px 8px 0;border-radius:0 8px 8px 0}.calendar table.month tr td .day-content{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;padding:5px 6px}.table-striped .calendar table.month tr td,.table-striped .calendar table.month tr th{background-color:transparent}.calendar table.month td.day .day-content:hover{background:rgba(0,0,0,.2);cursor:pointer}.calendar table.month td.day.disabled .day-content:hover,.calendar table.month tr td.new,.calendar table.month tr td.new:hover,.calendar table.month tr td.old,.calendar table.month tr td.old:hover{background:0 0;cursor:default}.calendar table.month tr td.range .day-content{background:rgba(0,0,0,.2);-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.calendar table.month tr td.range.range-start .day-content{border-top-left-radius:4px;border-bottom-left-radius:4px}.calendar table.month tr td.range.range-end .day-content{border-top-right-radius:4px;border-bottom-right-radius:4px}.calendar-context-menu,.calendar-context-menu .submenu{border:1px solid #ddd;background-color:#fff;box-shadow:2px 2px 5px rgba(0,0,0,.2);-webkit-box-shadow:2px 2px 5px rgba(0,0,0,.2);position:absolute;display:none}.calendar-context-menu .item{padding:5px 10px;cursor:pointer;display:table;width:100%}.calendar-context-menu .item:hover{background:#eee}.calendar-context-menu .item .content{display:table-cell}.calendar-context-menu .item span{display:table-cell;padding-left:10px;text-align:right}.calendar-context-menu .item span:last-child{display:none}.calendar-context-menu .submenu{left:100%;margin-top:-6px}.calendar-context-menu .item:hover>.submenu{display:block} diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/bootstrap-year-calendar.js b/app/Resources/public/assets/bootstrap-year-calendar/js/bootstrap-year-calendar.js new file mode 100644 index 0000000000..c63bd223e8 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/bootstrap-year-calendar.js @@ -0,0 +1,1110 @@ +/* ========================================================= + * Bootstrap year calendar v1.1.0 + * Repo: https://github.com/Paul-DS/bootstrap-year-calendar + * ========================================================= + * Created by Paul David-Sivelle + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================= */ + +(function($) { + var Calendar = function(element, options) { + this.element = element; + this.element.addClass('calendar'); + + this._initializeEvents(options); + this._initializeOptions(options); + this.setYear(this.options.startYear); + }; + + Calendar.prototype = { + constructor: Calendar, + _initializeOptions: function(opt) { + if(opt == null) { + opt = []; + } + + this.options = { + startYear: !isNaN(parseInt(opt.startYear)) ? parseInt(opt.startYear) : new Date().getFullYear(), + minDate: opt.minDate instanceof Date ? opt.minDate : null, + maxDate: opt.maxDate instanceof Date ? opt.maxDate : null, + language: (opt.language != null && dates[opt.language] != null) ? opt.language : 'en', + allowOverlap: opt.allowOverlap != null ? opt.allowOverlap : true, + displayWeekNumber: opt.displayWeekNumber != null ? opt.displayWeekNumber : false, + displayDisabledDataSource: opt.displayDisabledDataSource != null ? opt.displayDisabledDataSource : false, + displayHeader: opt.displayHeader != null ? opt.displayHeader : true, + alwaysHalfDay: opt.alwaysHalfDay != null ? opt.alwaysHalfDay : false, + enableRangeSelection: opt.enableRangeSelection != null ? opt.enableRangeSelection : false, + disabledDays: opt.disabledDays instanceof Array ? opt.disabledDays : [], + disabledWeekDays: opt.disabledWeekDays instanceof Array ? opt.disabledWeekDays : [], + hiddenWeekDays: opt.hiddenWeekDays instanceof Array ? opt.hiddenWeekDays : [], + roundRangeLimits: opt.roundRangeLimits != null ? opt.roundRangeLimits : false, + dataSource: opt.dataSource instanceof Array ? opt.dataSource : [], + style: opt.style == 'background' || opt.style == 'border' || opt.style == 'custom' ? opt.style : 'border', + enableContextMenu: opt.enableContextMenu != null ? opt.enableContextMenu : false, + contextMenuItems: opt.contextMenuItems instanceof Array ? opt.contextMenuItems : [], + customDayRenderer : $.isFunction(opt.customDayRenderer) ? opt.customDayRenderer : null, + customDataSourceRenderer : $.isFunction(opt.customDataSourceRenderer) ? opt.customDataSourceRenderer : null, + weekStart: !isNaN(parseInt(opt.weekStart)) ? parseInt(opt.weekStart) : null + }; + + this._initializeDatasourceColors(); + }, + _initializeEvents: function(opt) { + if(opt == null) { + opt = []; + } + + if(opt.yearChanged) { this.element.bind('yearChanged', opt.yearChanged); } + if(opt.renderEnd) { this.element.bind('renderEnd', opt.renderEnd); } + if(opt.clickDay) { this.element.bind('clickDay', opt.clickDay); } + if(opt.dayContextMenu) { this.element.bind('dayContextMenu', opt.dayContextMenu); } + if(opt.selectRange) { this.element.bind('selectRange', opt.selectRange); } + if(opt.mouseOnDay) { this.element.bind('mouseOnDay', opt.mouseOnDay); } + if(opt.mouseOutDay) { this.element.bind('mouseOutDay', opt.mouseOutDay); } + }, + _initializeDatasourceColors: function() { + for(var i = 0; i < this.options.dataSource.length; i++) { + if(this.options.dataSource[i].color == null) { + this.options.dataSource[i].color = colors[i % colors.length]; + } + } + }, + render: function() { + this.element.empty(); + + if(this.options.displayHeader) { + this._renderHeader(); + } + + this._renderBody(); + this._renderDataSource(); + + this._applyEvents(); + this.element.find('.months-container').fadeIn(500); + + this._triggerEvent('renderEnd', { currentYear: this.options.startYear }); + }, + _renderHeader: function() { + var header = $(document.createElement('div')); + header.addClass('calendar-header panel panel-default'); + + var headerTable = $(document.createElement('table')); + + var prevDiv = $(document.createElement('th')); + prevDiv.addClass('prev'); + + if(this.options.minDate != null && this.options.minDate > new Date(this.options.startYear - 1, 11, 31)) { + prevDiv.addClass('disabled'); + } + + var prevIcon = $(document.createElement('span')); + prevIcon.addClass('glyphicon glyphicon-chevron-left'); + + prevDiv.append(prevIcon); + + headerTable.append(prevDiv); + + var prev2YearDiv = $(document.createElement('th')); + prev2YearDiv.addClass('year-title year-neighbor2 hidden-sm hidden-xs'); + prev2YearDiv.text(this.options.startYear - 2); + + if(this.options.minDate != null && this.options.minDate > new Date(this.options.startYear - 2, 11, 31)) { + prev2YearDiv.addClass('disabled'); + } + + headerTable.append(prev2YearDiv); + + var prevYearDiv = $(document.createElement('th')); + prevYearDiv.addClass('year-title year-neighbor hidden-xs'); + prevYearDiv.text(this.options.startYear - 1); + + if(this.options.minDate != null && this.options.minDate > new Date(this.options.startYear - 1, 11, 31)) { + prevYearDiv.addClass('disabled'); + } + + headerTable.append(prevYearDiv); + + var yearDiv = $(document.createElement('th')); + yearDiv.addClass('year-title'); + yearDiv.text(this.options.startYear); + + headerTable.append(yearDiv); + + var nextYearDiv = $(document.createElement('th')); + nextYearDiv.addClass('year-title year-neighbor hidden-xs'); + nextYearDiv.text(this.options.startYear + 1); + + if(this.options.maxDate != null && this.options.maxDate < new Date(this.options.startYear + 1, 0, 1)) { + nextYearDiv.addClass('disabled'); + } + + headerTable.append(nextYearDiv); + + var next2YearDiv = $(document.createElement('th')); + next2YearDiv.addClass('year-title year-neighbor2 hidden-sm hidden-xs'); + next2YearDiv.text(this.options.startYear + 2); + + if(this.options.maxDate != null && this.options.maxDate < new Date(this.options.startYear + 2, 0, 1)) { + next2YearDiv.addClass('disabled'); + } + + headerTable.append(next2YearDiv); + + var nextDiv = $(document.createElement('th')); + nextDiv.addClass('next'); + + if(this.options.maxDate != null && this.options.maxDate < new Date(this.options.startYear + 1, 0, 1)) { + nextDiv.addClass('disabled'); + } + + var nextIcon = $(document.createElement('span')); + nextIcon.addClass('glyphicon glyphicon-chevron-right'); + + nextDiv.append(nextIcon); + + headerTable.append(nextDiv); + + header.append(headerTable); + + this.element.append(header); + }, + _renderBody: function() { + var monthsDiv = $(document.createElement('div')); + monthsDiv.addClass('months-container'); + + for(var m = 0; m < 12; m++) { + /* Container */ + var monthDiv = $(document.createElement('div')); + monthDiv.addClass('month-container'); + monthDiv.data('month-id', m); + + var firstDate = new Date(this.options.startYear, m, 1); + + var table = $(document.createElement('table')); + table.addClass('month'); + + /* Month header */ + var thead = $(document.createElement('thead')); + + var titleRow = $(document.createElement('tr')); + + var titleCell = $(document.createElement('th')); + titleCell.addClass('month-title'); + titleCell.attr('colspan', this.options.displayWeekNumber ? 8 : 7); + titleCell.text(dates[this.options.language].months[m]); + + titleRow.append(titleCell); + thead.append(titleRow); + + var headerRow = $(document.createElement('tr')); + + if(this.options.displayWeekNumber) { + var weekNumberCell = $(document.createElement('th')); + weekNumberCell.addClass('week-number'); + weekNumberCell.text(dates[this.options.language].weekShort); + headerRow.append(weekNumberCell); + } + + var weekStart = this.options.weekStart ? this.options.weekStart : dates[this.options.language].weekStart; + var d = weekStart; + do + { + var headerCell = $(document.createElement('th')); + headerCell.addClass('day-header'); + headerCell.text(dates[this.options.language].daysMin[d]); + + if(this._isHidden(d)) { + headerCell.addClass('hidden'); + } + + headerRow.append(headerCell); + + d++; + if(d >= 7) + d = 0; + } + while(d != weekStart) + + thead.append(headerRow); + table.append(thead); + + /* Days */ + var currentDate = new Date(firstDate.getTime()); + var lastDate = new Date(this.options.startYear, m + 1, 0); + + while(currentDate.getDay() != weekStart) + { + currentDate.setDate(currentDate.getDate() - 1); + } + + while(currentDate <= lastDate) + { + var row = $(document.createElement('tr')); + + if(this.options.displayWeekNumber) { + var weekNumberCell = $(document.createElement('td')); + weekNumberCell.addClass('week-number'); + weekNumberCell.text(this.getWeekNumber(currentDate)); + row.append(weekNumberCell); + } + + do + { + var cell = $(document.createElement('td')); + cell.addClass('day'); + + if(this._isHidden(currentDate.getDay())) { + cell.addClass('hidden'); + } + + if(currentDate < firstDate) { + cell.addClass('old'); + } + else if(currentDate > lastDate) { + cell.addClass('new'); + } + else { + if(this._isDisabled(currentDate)) { + cell.addClass('disabled'); + } + + var cellContent = $(document.createElement('div')); + cellContent.addClass('day-content'); + cellContent.text(currentDate.getDate()); + cell.append(cellContent); + + if(this.options.customDayRenderer) { + this.options.customDayRenderer(cellContent, currentDate); + } + } + + row.append(cell); + + currentDate.setDate(currentDate.getDate() + 1); + } + while(currentDate.getDay() != weekStart) + + table.append(row); + } + + monthDiv.append(table); + + monthsDiv.append(monthDiv); + } + + this.element.append(monthsDiv); + }, + _renderDataSource: function() { + var _this = this; + if(this.options.dataSource != null && this.options.dataSource.length > 0) { + this.element.find('.month-container').each(function() { + var month = $(this).data('month-id'); + + var firstDate = new Date(_this.options.startYear, month, 1); + var lastDate = new Date(_this.options.startYear, month + 1, 1); + + if((_this.options.minDate == null || lastDate > _this.options.minDate) && (_this.options.maxDate == null || firstDate <= _this.options.maxDate)) + { + var monthData = []; + + for(var i = 0; i < _this.options.dataSource.length; i++) { + if(!(_this.options.dataSource[i].startDate >= lastDate) || (_this.options.dataSource[i].endDate < firstDate)) { + monthData.push(_this.options.dataSource[i]); + } + } + + if(monthData.length > 0) { + $(this).find('.day-content').each(function() { + var currentDate = new Date(_this.options.startYear, month, $(this).text()); + var nextDate = new Date(_this.options.startYear, month, currentDate.getDate() + 1); + + var dayData = []; + + if((_this.options.minDate == null || currentDate >= _this.options.minDate) && (_this.options.maxDate == null || currentDate <= _this.options.maxDate)) + { + for(var i = 0; i < monthData.length; i++) { + if(monthData[i].startDate < nextDate && monthData[i].endDate >= currentDate) { + dayData.push(monthData[i]); + } + } + + if(dayData.length > 0 && (_this.options.displayDisabledDataSource || !_this._isDisabled(currentDate))) + { + _this._renderDataSourceDay($(this), currentDate, dayData); + } + } + }); + } + } + }); + } + }, + _renderDataSourceDay: function(elt, currentDate, events) { + switch(this.options.style) + { + case 'border': + var weight = 0; + + if(events.length == 1) { + weight = 4; + } + else if(events.length <= 3) { + weight = 2; + } + else { + elt.parent().css('box-shadow', 'inset 0 -4px 0 0 black'); + } + + if(weight > 0) + { + var boxShadow = ''; + + for (var i = 0; i < events.length; i++) + { + if(boxShadow != '') { + boxShadow += ","; + } + + boxShadow += 'inset 0 -' + (parseInt(i) + 1) * weight + 'px 0 0 ' + events[i].color; + } + + elt.parent().css('box-shadow', boxShadow); + } + break; + + case 'background': + elt.parent().css('background-color', events[events.length - 1].color); + + var currentTime = currentDate.getTime(); + + if(events[events.length - 1].startDate.getTime() == currentTime) + { + elt.parent().addClass('day-start'); + + if(events[events.length - 1].startHalfDay || this.options.alwaysHalfDay) { + elt.parent().addClass('day-half'); + + // Find color for other half + var otherColor = 'transparent'; + for(var i = events.length - 2; i >= 0; i--) { + if(events[i].startDate.getTime() != currentTime || (!events[i].startHalfDay && !this.options.alwaysHalfDay)) { + otherColor = events[i].color; + break; + } + } + + elt.parent().css('background', 'linear-gradient(-45deg, ' + events[events.length - 1].color + ', ' + events[events.length - 1].color + ' 49%, ' + otherColor + ' 51%, ' + otherColor + ')'); + } + else if(this.options.roundRangeLimits) { + elt.parent().addClass('round-left'); + } + } + else if(events[events.length - 1].endDate.getTime() == currentTime) + { + elt.parent().addClass('day-end'); + + if(events[events.length - 1].endHalfDay || this.options.alwaysHalfDay) { + elt.parent().addClass('day-half'); + + // Find color for other half + var otherColor = 'transparent'; + for(var i = events.length - 2; i >= 0; i--) { + if(events[i].endDate.getTime() != currentTime || (!events[i].endHalfDay && !this.options.alwaysHalfDay)) { + otherColor = events[i].color; + break; + } + } + + elt.parent().css('background', 'linear-gradient(135deg, ' + events[events.length - 1].color + ', ' + events[events.length - 1].color + ' 49%, ' + otherColor + ' 51%, ' + otherColor + ')'); + } + else if(this.options.roundRangeLimits) { + elt.parent().addClass('round-right'); + } + } + break; + + case 'custom': + if(this.options.customDataSourceRenderer) { + this.options.customDataSourceRenderer.call(this, elt, currentDate, events); + } + break; + } + }, + _applyEvents: function () { + var _this = this; + + /* Header buttons */ + this.element.find('.year-neighbor, .year-neighbor2').click(function() { + if(!$(this).hasClass('disabled')) { + _this.setYear(parseInt($(this).text())); + } + }); + + this.element.find('.calendar-header .prev').click(function() { + if(!$(this).hasClass('disabled')) { + _this.element.find('.months-container').animate({'margin-left':'100%'},100, function() { + _this.element.find('.months-container').css('visibility', 'hidden'); + _this.element.find('.months-container').css('margin-left', '0'); + + setTimeout(function() { + _this.setYear(_this.options.startYear - 1); + }, 50); + }); + } + }); + + this.element.find('.calendar-header .next').click(function() { + if(!$(this).hasClass('disabled')) { + _this.element.find('.months-container').animate({'margin-left':'-100%'},100, function() { + _this.element.find('.months-container').css('visibility', 'hidden'); + _this.element.find('.months-container').css('margin-left', '0'); + + setTimeout(function() { + _this.setYear(_this.options.startYear + 1); + }, 50); + }); + } + }); + + var cells = this.element.find('.day:not(.old, .new, .disabled)'); + + /* Click on date */ + cells.click(function(e) { + e.stopPropagation(); + var date = _this._getDate($(this)); + _this._triggerEvent('clickDay', { + element: $(this), + which: e.which, + date: date, + events: _this.getEvents(date) + }); + }); + + /* Click right on date */ + + cells.bind('contextmenu', function(e) { + if(_this.options.enableContextMenu) + { + e.preventDefault(); + if(_this.options.contextMenuItems.length > 0) + { + _this._openContextMenu($(this)); + } + } + + var date = _this._getDate($(this)); + _this._triggerEvent('dayContextMenu', { + element: $(this), + date: date, + events: _this.getEvents(date) + }); + }); + + /* Range selection */ + if(this.options.enableRangeSelection) { + cells.mousedown(function (e) { + if(e.which == 1) { + var currentDate = _this._getDate($(this)); + + if(_this.options.allowOverlap || _this.getEvents(currentDate).length == 0) + { + _this._mouseDown = true; + _this._rangeStart = _this._rangeEnd = currentDate; + _this._refreshRange(); + } + } + }); + + cells.mouseenter(function (e) { + if (_this._mouseDown) { + var currentDate = _this._getDate($(this)); + + if(!_this.options.allowOverlap) + { + var newDate = new Date(_this._rangeStart.getTime()); + + if(newDate < currentDate) { + var nextDate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate() + 1); + while(newDate < currentDate) { + if(_this.getEvents(nextDate).length > 0) + { + break; + } + + newDate.setDate(newDate.getDate() + 1); + nextDate.setDate(nextDate.getDate() + 1); + } + } + else { + var nextDate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate() - 1); + while(newDate > currentDate) { + if(_this.getEvents(nextDate).length > 0) + { + break; + } + + newDate.setDate(newDate.getDate() - 1); + nextDate.setDate(nextDate.getDate() - 1); + } + } + + currentDate = newDate; + } + + var oldValue = _this._rangeEnd; + _this._rangeEnd = currentDate; + + if (oldValue.getTime() != _this._rangeEnd.getTime()) { + _this._refreshRange(); + } + } + }); + + $(window).mouseup(function (e) { + if (_this._mouseDown) { + _this._mouseDown = false; + _this._refreshRange(); + + var minDate = _this._rangeStart < _this._rangeEnd ? _this._rangeStart : _this._rangeEnd; + var maxDate = _this._rangeEnd > _this._rangeStart ? _this._rangeEnd : _this._rangeStart; + + _this._triggerEvent('selectRange', { + startDate: minDate, + endDate: maxDate, + events: _this.getEventsOnRange(minDate, new Date(maxDate.getFullYear(), maxDate.getMonth(), maxDate.getDate() + 1)) + }); + } + }); + } + + /* Hover date */ + cells.mouseenter(function(e) { + if(!_this._mouseDown) + { + var date = _this._getDate($(this)); + _this._triggerEvent('mouseOnDay', { + element: $(this), + date: date, + events: _this.getEvents(date) + }); + } + }); + + cells.mouseleave(function(e) { + var date = _this._getDate($(this)); + _this._triggerEvent('mouseOutDay', { + element: $(this), + date: date, + events: _this.getEvents(date) + }); + }); + + /* Responsive management */ + + setInterval(function() { + var calendarSize = $(_this.element).width(); + var monthSize = $(_this.element).find('.month').first().width() + 10; + var monthContainerClass = 'month-container'; + + if(monthSize * 6 < calendarSize) { + monthContainerClass += ' col-xs-2'; + } + else if(monthSize * 4 < calendarSize) { + monthContainerClass += ' col-xs-3'; + } + else if(monthSize * 3 < calendarSize) { + monthContainerClass += ' col-xs-4'; + } + else if(monthSize * 2 < calendarSize) { + monthContainerClass += ' col-xs-6'; + } + else { + monthContainerClass += ' col-xs-12'; + } + + $(_this.element).find('.month-container').attr('class', monthContainerClass); + }, 300); + }, + _refreshRange: function () { + var _this = this; + + this.element.find('td.day.range').removeClass('range') + this.element.find('td.day.range-start').removeClass('range-start'); + this.element.find('td.day.range-end').removeClass('range-end'); + + if (this._mouseDown) { + var beforeRange = true; + var afterRange = false; + var minDate = _this._rangeStart < _this._rangeEnd ? _this._rangeStart : _this._rangeEnd; + var maxDate = _this._rangeEnd > _this._rangeStart ? _this._rangeEnd : _this._rangeStart; + + this.element.find('.month-container').each(function () { + var monthId = $(this).data('month-id'); + if (minDate.getMonth() <= monthId && maxDate.getMonth() >= monthId) { + $(this).find('td.day:not(.old, .new)').each(function () { + var date = _this._getDate($(this)); + if (date >= minDate && date <= maxDate) { + $(this).addClass('range'); + + if (date.getTime() == minDate.getTime()) { + $(this).addClass('range-start'); + } + + if (date.getTime() == maxDate.getTime()) { + $(this).addClass('range-end'); + } + } + }); + } + }); + } + }, + _openContextMenu: function(elt) { + var contextMenu = $('.calendar-context-menu'); + + if(contextMenu.length > 0) { + contextMenu.hide(); + contextMenu.empty(); + } + else { + contextMenu = $(document.createElement('div')); + contextMenu.addClass('calendar-context-menu'); + $('body').append(contextMenu); + } + + var date = this._getDate(elt); + var events = this.getEvents(date); + + for(var i = 0; i < events.length; i++) { + var eventItem = $(document.createElement('div')); + eventItem.addClass('item'); + eventItem.css('border-left', '4px solid ' + events[i].color); + + var eventItemContent = $(document.createElement('div')); + eventItemContent.addClass('content'); + eventItemContent.text(events[i].name); + + eventItem.append(eventItemContent); + + var icon = $(document.createElement('span')); + icon.addClass('glyphicon glyphicon-chevron-right'); + + eventItem.append(icon); + + this._renderContextMenuItems(eventItem, this.options.contextMenuItems, events[i]); + + contextMenu.append(eventItem); + } + + if(contextMenu.children().length > 0) + { + contextMenu.css('left', elt.offset().left + 25 + 'px'); + contextMenu.css('top', elt.offset().top + 25 + 'px'); + contextMenu.show(); + + $(window).one('mouseup', function() { + contextMenu.hide(); + }); + } + }, + _renderContextMenuItems: function(parent, items, evt) { + var subMenu = $(document.createElement('div')); + subMenu.addClass('submenu'); + + for(var i = 0; i < items.length; i++) { + if(!items[i].visible || items[i].visible(evt)) { + var menuItem = $(document.createElement('div')); + menuItem.addClass('item'); + + var menuItemContent = $(document.createElement('div')); + menuItemContent.addClass('content'); + menuItemContent.text(items[i].text); + + menuItem.append(menuItemContent); + + if(items[i].click) { + (function(index) { + menuItem.click(function() { + items[index].click(evt); + }); + })(i); + } + + var icon = $(document.createElement('span')); + icon.addClass('glyphicon glyphicon-chevron-right'); + + menuItem.append(icon); + + if(items[i].items && items[i].items.length > 0) { + this._renderContextMenuItems(menuItem, items[i].items, evt); + } + + subMenu.append(menuItem); + } + } + + if(subMenu.children().length > 0) + { + parent.append(subMenu); + } + }, + _getColor: function(colorString) { + var div = $('
'); + div.css('color', colorString); + + }, + _getDate: function(elt) { + var day = elt.children('.day-content').text(); + var month = elt.closest('.month-container').data('month-id'); + var year = this.options.startYear; + + return new Date(year, month, day); + }, + _triggerEvent: function(eventName, parameters) { + var event = $.Event(eventName); + + for(var i in parameters) { + event[i] = parameters[i]; + } + + this.element.trigger(event); + + return event; + }, + _isDisabled: function(date) { + if((this.options.minDate != null && date < this.options.minDate) || (this.options.maxDate != null && date > this.options.maxDate)) + { + return true; + } + + if(this.options.disabledWeekDays.length > 0) { + for(var d = 0; d < this.options.disabledWeekDays.length; d++){ + if(date.getDay() == this.options.disabledWeekDays[d]) { + return true; + } + } + } + + if(this.options.disabledDays.length > 0) { + for(var d = 0; d < this.options.disabledDays.length; d++){ + if(date.getTime() == this.options.disabledDays[d].getTime()) { + return true; + } + } + } + + return false; + }, + _isHidden: function(day) { + if(this.options.hiddenWeekDays.length > 0) { + for(var d = 0; d < this.options.hiddenWeekDays.length; d++) { + if(day == this.options.hiddenWeekDays[d]) { + return true; + } + } + } + + return false; + }, + getWeekNumber: function(date) { + var tempDate = new Date(date.getTime()); + tempDate.setHours(0, 0, 0, 0); + tempDate.setDate(tempDate.getDate() + 3 - (tempDate.getDay() + 6) % 7); + var week1 = new Date(tempDate.getFullYear(), 0, 4); + return 1 + Math.round(((tempDate.getTime() - week1.getTime()) / 86400000 - 3 + (week1.getDay() + 6) % 7) / 7); + }, + getEvents: function(date) { + return this.getEventsOnRange(date, new Date(date.getFullYear(), date.getMonth(), date.getDate() + 1)); + }, + getEventsOnRange: function(startDate, endDate) { + var events = []; + + if(this.options.dataSource && startDate && endDate) { + for(var i = 0; i < this.options.dataSource.length; i++) { + if(this.options.dataSource[i].startDate < endDate && this.options.dataSource[i].endDate >= startDate) { + events.push(this.options.dataSource[i]); + } + } + } + + return events; + }, + getYear: function() { + return this.options.startYear; + }, + setYear: function(year) { + var parsedYear = parseInt(year); + if(!isNaN(parsedYear)) { + this.options.startYear = parsedYear; + + this.element.empty(); + + if(this.options.displayHeader) { + this._renderHeader(); + } + + var eventResult = this._triggerEvent('yearChanged', { currentYear: this.options.startYear, preventRendering: false }); + + if(!eventResult.preventRendering) { + this.render(); + } + } + }, + getMinDate: function() { + return this.options.minDate; + }, + setMinDate: function(date, preventRendering) { + if(date instanceof Date) { + this.options.minDate = date; + + if(!preventRendering) { + this.render(); + } + } + }, + getMaxDate: function() { + return this.options.maxDate; + }, + setMaxDate: function(date, preventRendering) { + if(date instanceof Date) { + this.options.maxDate = date; + + if(!preventRendering) { + this.render(); + } + } + }, + getStyle: function() { + return this.options.style; + }, + setStyle: function(style, preventRendering) { + this.options.style = style == 'background' || style == 'border' || style == 'custom' ? style : 'border'; + + if(!preventRendering) { + this.render(); + } + }, + getAllowOverlap: function() { + return this.options.allowOverlap; + }, + setAllowOverlap: function(allowOverlap) { + this.options.allowOverlap = allowOverlap; + }, + getDisplayWeekNumber: function() { + return this.options.displayWeekNumber; + }, + setDisplayWeekNumber: function(displayWeekNumber, preventRendering) { + this.options.displayWeekNumber = displayWeekNumber; + + if(!preventRendering) { + this.render(); + } + }, + getDisplayHeader: function() { + return this.options.displayHeader; + }, + setDisplayHeader: function(displayHeader, preventRendering) { + this.options.displayHeader = displayHeader; + + if(!preventRendering) { + this.render(); + } + }, + getDisplayDisabledDataSource: function() { + return this.options.displayDisabledDataSource; + }, + setDisplayDisabledDataSource: function(displayDisabledDataSource, preventRendering) { + this.options.displayDisabledDataSource = displayDisabledDataSource; + + if(!preventRendering) { + this.render(); + } + }, + getAlwaysHalfDay: function() { + return this.options.alwaysHalfDay; + }, + setAlwaysHalfDay: function(alwaysHalfDay, preventRendering) { + this.options.alwaysHalfDay = alwaysHalfDay; + + if(!preventRendering) { + this.render(); + } + }, + getEnableRangeSelection: function() { + return this.options.enableRangeSelection; + }, + setEnableRangeSelection: function(enableRangeSelection, preventRendering) { + this.options.enableRangeSelection = enableRangeSelection; + + if(!preventRendering) { + this.render(); + } + }, + getDisabledDays: function() { + return this.options.disabledDays; + }, + setDisabledDays: function(disabledDays, preventRendering) { + this.options.disabledDays = disabledDays instanceof Array ? disabledDays : []; + + if(!preventRendering) { + this.render(); + } + }, + getDisabledWeekDays: function() { + return this.options.disabledWeekDays; + }, + setDisabledWeekDays: function(disabledWeekDays, preventRendering) { + this.options.disabledWeekDays = disabledWeekDays instanceof Array ? disabledWeekDays : []; + + if(!preventRendering) { + this.render(); + } + }, + getHiddenWeekDays: function() { + return this.options.hiddenWeekDays; + }, + setHiddenWeekDays: function(hiddenWeekDays, preventRendering) { + this.options.hiddenWeekDays = hiddenWeekDays instanceof Array ? hiddenWeekDays : []; + + if(!preventRendering) { + this.render(); + } + }, + getRoundRangeLimits: function() { + return this.options.roundRangeLimits; + }, + setRoundRangeLimits: function(roundRangeLimits, preventRendering) { + this.options.roundRangeLimits = roundRangeLimits; + + if(!preventRendering) { + this.render(); + } + }, + getEnableContextMenu: function() { + return this.options.enableContextMenu; + }, + setEnableContextMenu: function(enableContextMenu, preventRendering) { + this.options.enableContextMenu = enableContextMenu; + + if(!preventRendering) { + this.render(); + } + }, + getContextMenuItems: function() { + return this.options.contextMenuItems; + }, + setContextMenuItems: function(contextMenuItems, preventRendering) { + this.options.contextMenuItems = contextMenuItems instanceof Array ? contextMenuItems : []; + + if(!preventRendering) { + this.render(); + } + }, + getCustomDayRenderer: function() { + return this.options.customDayRenderer; + }, + setCustomDayRenderer: function(customDayRenderer, preventRendering) { + this.options.customDayRenderer = $.isFunction(customDayRenderer) ? customDayRenderer : null; + + if(!preventRendering) { + this.render(); + } + }, + getCustomDataSourceRenderer: function() { + return this.options.customDataSourceRenderer; + }, + setCustomDataSourceRenderer: function(customDataSourceRenderer, preventRendering) { + this.options.customDataSourceRenderer = $.isFunction(customDataSourceRenderer) ? customDataSourceRenderer : null; + + if(!preventRendering) { + this.render(); + } + }, + getLanguage: function() { + return this.options.language; + }, + setLanguage: function(language, preventRendering) { + if(language != null && dates[language] != null) { + this.options.language = language; + + if(!preventRendering) { + this.render(); + } + } + }, + getDataSource: function() { + return this.options.dataSource; + }, + setDataSource: function(dataSource, preventRendering) { + this.options.dataSource = dataSource instanceof Array ? dataSource : []; + this._initializeDatasourceColors(); + + if(!preventRendering) { + this.render(); + } + }, + getWeekStart: function() { + return this.options.weekStart ? this.options.weekStart : dates[this.options.language].weekStart; + }, + setWeekStart: function(weekStart, preventRendering) { + this.options.weekStart = !isNaN(parseInt(weekStart)) ? parseInt(weekStart) : null; + + if(!preventRendering) { + this.render(); + } + }, + addEvent: function(evt, preventRendering) { + this.options.dataSource.push(evt); + + if(!preventRendering) { + this.render(); + } + } + } + + $.fn.calendar = function (options) { + var calendar = new Calendar($(this) ,options); + $(this).data('calendar', calendar); + return calendar; + } + + /* Events binding management */ + $.fn.yearChanged = function(fct) { $(this).bind('yearChanged', fct); } + $.fn.renderEnd = function(fct) { $(this).bind('renderEnd', fct); } + $.fn.clickDay = function(fct) { $(this).bind('clickDay', fct); } + $.fn.dayContextMenu = function(fct) { $(this).bind('dayContextMenu', fct); } + $.fn.selectRange = function(fct) { $(this).bind('selectRange', fct); } + $.fn.mouseOnDay = function(fct) { $(this).bind('mouseOnDay', fct); } + $.fn.mouseOutDay = function(fct) { $(this).bind('mouseOutDay', fct); } + + var dates = $.fn.calendar.dates = { + en: { + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], + weekShort: 'W', + weekStart:0 + } + }; + + var colors = $.fn.calendar.colors = ['#2C8FC9', '#9CB703', '#F5BB00', '#FF4A32', '#B56CE2', '#45A597']; + + $(function(){ + $('[data-provide="calendar"]').each(function() { + $(this).calendar(); + }); + }); +}(window.jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.de.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.de.js new file mode 100644 index 0000000000..0c951d72c9 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.de.js @@ -0,0 +1,19 @@ +/** + * German translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * German translation for bootstrap-datepicker + * Sam Zurcher + */ + +;(function($){ + $.fn.calendar.dates['de'] = { + days: ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"], + daysShort: ["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"], + daysMin: ["So", "Mo", "Di", "Mi", "Do", "Fr", "Sa"], + months: ["Januar", "Februar", "Mrz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"], + monthsShort: ["Jan", "Feb", "Mr", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"], + weekShort: 'W', + weekStart: 1 + }; +}(jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.es.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.es.js new file mode 100644 index 0000000000..d578d36411 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.es.js @@ -0,0 +1,19 @@ +/** + * Spanish translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Spanish translation for bootstrap-datepicker + * Bruno Bonamin + */ + +;(function($){ + $.fn.calendar.dates['es'] = { + days: ["Domingo", "Lunes", "Martes", "Mircoles", "Jueves", "Viernes", "Sbado"], + daysShort: ["Dom", "Lun", "Mar", "Mi", "Jue", "Vie", "Sb"], + daysMin: ["Do", "Lu", "Ma", "Mi", "Ju", "Vi", "Sa"], + months: ["Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"], + monthsShort: ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"], + weekShort: 'S', + weekStart: 1 + }; +}(jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.fr.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.fr.js new file mode 100644 index 0000000000..52d27f4a0c --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.fr.js @@ -0,0 +1,19 @@ +/** + * French translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * French translation for bootstrap-datepicker + * Nico Mollet + */ + +;(function($){ + $.fn.calendar.dates['fr'] = { + days: ["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"], + daysShort: ["Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"], + daysMin: ["D", "L", "Ma", "Me", "J", "V", "S", "D"], + months: ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"], + monthsShort: ["Jan", "Fév", "Mar", "Avr", "Mai", "Jui", "Jul", "Aou", "Sep", "Oct", "Nov", "Déc"], + weekShort:'S', + weekStart: 1 + }; +}(jQuery)); diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.it.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.it.js new file mode 100644 index 0000000000..00ce229d5d --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.it.js @@ -0,0 +1,19 @@ +/** + * Italian translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Italian translation for bootstrap-datepicker + * Enrico Rubboli + */ + +;(function($){ + $.fn.calendar.dates['it'] = { + days: ["Domenica", "Luned", "Marted", "Mercoled", "Gioved", "Venerd", "Sabato"], + daysShort: ["Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab"], + daysMin: ["Do", "Lu", "Ma", "Me", "Gi", "Ve", "Sa"], + months: ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"], + monthsShort: ["Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"], + weekShort: 'S', + weekStart: 1, + }; +}(jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ja.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ja.js new file mode 100644 index 0000000000..c9f90c8b4d --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ja.js @@ -0,0 +1,19 @@ +/** + * Japanese translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Japanese translation for bootstrap-datepicker + * Norio Suzuki + */ + +;(function($){ + $.fn.calendar.dates['ja'] = { + days: ["日曜", "月曜", "火曜", "水曜", "木曜", "金曜", "土曜"], + daysShort: ["日", "月", "火", "水", "木", "金", "土"], + daysMin: ["日", "月", "火", "水", "木", "金", "土"], + months: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + monthsShort: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], + weekShort: '週', + weekStart:0 + }; +}(jQuery)); diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.nl.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.nl.js new file mode 100644 index 0000000000..e9a90bab49 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.nl.js @@ -0,0 +1,19 @@ +/** + * Dutch translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Dutch translation for bootstrap-datepicker + * Reinier Goltstein + */ + +;(function($){ + $.fn.calendar.dates['nl'] = { + days: ["zondag", "maandag", "dinsdag", "woensdag", "donderdag", "vrijdag", "zaterdag"], + daysShort: ["zo", "ma", "di", "wo", "do", "vr", "za"], + daysMin: ["zo", "ma", "di", "wo", "do", "vr", "za"], + months: ["januari", "februari", "maart", "april", "mei", "juni", "juli", "augustus", "september", "oktober", "november", "december"], + monthsShort: ["jan", "feb", "mrt", "apr", "mei", "jun", "jul", "aug", "sep", "okt", "nov", "dec"], + weekShort: 'w', + weekStart: 1 + }; +}(jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.pt.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.pt.js new file mode 100644 index 0000000000..108903df78 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.pt.js @@ -0,0 +1,20 @@ +/** + * Portuguese translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Portuguese translation for bootstrap-datepicker + * Original code: Cauan Cabral + * Tiago Melo + */ + +;(function($){ + $.fn.calendar.dates['pt'] = { + days: ["Domingo", "Segunda", "Tera", "Quarta", "Quinta", "Sexta", "Sbado"], + daysShort: ["Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb"], + daysMin: ["Do", "Se", "Te", "Qu", "Qu", "Se", "Sa"], + months: ["Janeiro", "Fevereiro", "Maro", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"], + monthsShort: ["Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"], + weekShort: 'S', + weekStart:0 + }; +}(jQuery)); \ No newline at end of file diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ru.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ru.js new file mode 100644 index 0000000000..01eb290cc3 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.ru.js @@ -0,0 +1,19 @@ +/** + * Russian translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Russian translation for bootstrap-datepicker + * Victor Taranenko + */ + +;(function($){ + $.fn.calendar.dates['ru'] = { + days: ["Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"], + daysShort: ["Вск", "Пнд", "Втр", "Срд", "Чтв", "Птн", "Суб"], + daysMin: ["Вс", "Пн", "Вт", "Ср", "Чт", "Пт", "Сб"], + months: ["Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь"], + monthsShort: ["Янв", "Фев", "Мар", "Апр", "Май", "Июн", "Июл", "Авг", "Сен", "Окт", "Ноя", "Дек"], + weekShort: 'н', + weekStart: 1 + }; +}(jQuery)); diff --git a/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.tr.js b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.tr.js new file mode 100644 index 0000000000..bca7e9d478 --- /dev/null +++ b/app/Resources/public/assets/bootstrap-year-calendar/js/languages/bootstrap-year-calendar.tr.js @@ -0,0 +1,20 @@ +/** + * Turkish translation for bootstrap-year-calendar + * Paul DAVID-SIVELLE + * Based on + * Turkish translation for bootstrap-datepicker + * Serkan Algur + */ + +;(function($){ + $.fn.calendar.dates['tr'] = { + days: ["Pazar", "Pazartesi", "Salı", "Çarşamba", "Perşembe", "Cuma", "Cumartesi"], + daysShort: ["Pz", "Pzt", "Sal", "Çrş", "Prş", "Cu", "Cts"], + daysMin: ["Pz", "Pzt", "Sa", "Çr", "Pr", "Cu", "Ct"], + months: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"], + monthsShort: ["Oca", "Şub", "Mar", "Nis", "May", "Haz", "Tem", "Ağu", "Eyl", "Eki", "Kas", "Ara"], + weekShort: 'H', + weekStart: 1 + }; +}(jQuery)); + diff --git a/bower.json b/bower.json index a43bad2216..24eba9b797 100644 --- a/bower.json +++ b/bower.json @@ -35,8 +35,8 @@ "flag-icon-css": "*", "jquery.easy-pie-chart": "^2.1.6", "jqueryui-touch-punch": "*", - "multiselect-two-sides": "*" - + "multiselect-two-sides": "2.5.*", + "bootstrap-year-calendar": "1.1.*" }, "resolutions": { "jquery": "2.1.4"