@ -0,0 +1,278 @@ | |||
GNU GENERAL PUBLIC LICENSE | |||
Version 2, June 1991 | |||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. | |||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |||
Everyone is permitted to copy and distribute verbatim copies | |||
of this license document, but changing it is not allowed. | |||
Preamble | |||
The licenses for most software are designed to take away your | |||
freedom to share and change it. By contrast, the GNU General Public | |||
License is intended to guarantee your freedom to share and change free | |||
software--to make sure the software is free for all its users. This | |||
General Public License applies to most of the Free Software | |||
Foundation's software and to any other program whose authors commit to | |||
using it. (Some other Free Software Foundation software is covered by | |||
the GNU Lesser General Public License instead.) You can apply it to | |||
your programs, too. | |||
When we speak of free software, we are referring to freedom, not | |||
price. Our General Public Licenses are designed to make sure that you | |||
have the freedom to distribute copies of free software (and charge for | |||
this service if you wish), that you receive source code or can get it | |||
if you want it, that you can change the software or use pieces of it | |||
in new free programs; and that you know you can do these things. | |||
To protect your rights, we need to make restrictions that forbid | |||
anyone to deny you these rights or to ask you to surrender the rights. | |||
These restrictions translate to certain responsibilities for you if you | |||
distribute copies of the software, or if you modify it. | |||
For example, if you distribute copies of such a program, whether | |||
gratis or for a fee, you must give the recipients all the rights that | |||
you have. You must make sure that they, too, receive or can get the | |||
source code. And you must show them these terms so they know their | |||
rights. | |||
We protect your rights with two steps: (1) copyright the software, and | |||
(2) offer you this license which gives you legal permission to copy, | |||
distribute and/or modify the software. | |||
Also, for each author's protection and ours, we want to make certain | |||
that everyone understands that there is no warranty for this free | |||
software. If the software is modified by someone else and passed on, we | |||
want its recipients to know that what they have is not the original, so | |||
that any problems introduced by others will not reflect on the original | |||
authors' reputations. | |||
Finally, any free program is threatened constantly by software | |||
patents. We wish to avoid the danger that redistributors of a free | |||
program will individually obtain patent licenses, in effect making the | |||
program proprietary. To prevent this, we have made it clear that any | |||
patent must be licensed for everyone's free use or not licensed at all. | |||
The precise terms and conditions for copying, distribution and | |||
modification follow. | |||
GNU GENERAL PUBLIC LICENSE | |||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |||
0. This License applies to any program or other work which contains | |||
a notice placed by the copyright holder saying it may be distributed | |||
under the terms of this General Public License. The "Program", below, | |||
refers to any such program or work, and a "work based on the Program" | |||
means either the Program or any derivative work under copyright law: | |||
that is to say, a work containing the Program or a portion of it, | |||
either verbatim or with modifications and/or translated into another | |||
language. (Hereinafter, translation is included without limitation in | |||
the term "modification".) Each licensee is addressed as "you". | |||
Activities other than copying, distribution and modification are not | |||
covered by this License; they are outside its scope. The act of | |||
running the Program is not restricted, and the output from the Program | |||
is covered only if its contents constitute a work based on the | |||
Program (independent of having been made by running the Program). | |||
Whether that is true depends on what the Program does. | |||
1. You may copy and distribute verbatim copies of the Program's | |||
source code as you receive it, in any medium, provided that you | |||
conspicuously and appropriately publish on each copy an appropriate | |||
copyright notice and disclaimer of warranty; keep intact all the | |||
notices that refer to this License and to the absence of any warranty; | |||
and give any other recipients of the Program a copy of this License | |||
along with the Program. | |||
You may charge a fee for the physical act of transferring a copy, and | |||
you may at your option offer warranty protection in exchange for a fee. | |||
2. You may modify your copy or copies of the Program or any portion | |||
of it, thus forming a work based on the Program, and copy and | |||
distribute such modifications or work under the terms of Section 1 | |||
above, provided that you also meet all of these conditions: | |||
a) You must cause the modified files to carry prominent notices | |||
stating that you changed the files and the date of any change. | |||
b) You must cause any work that you distribute or publish, that in | |||
whole or in part contains or is derived from the Program or any | |||
part thereof, to be licensed as a whole at no charge to all third | |||
parties under the terms of this License. | |||
c) If the modified program normally reads commands interactively | |||
when run, you must cause it, when started running for such | |||
interactive use in the most ordinary way, to print or display an | |||
announcement including an appropriate copyright notice and a | |||
notice that there is no warranty (or else, saying that you provide | |||
a warranty) and that users may redistribute the program under | |||
these conditions, and telling the user how to view a copy of this | |||
License. (Exception: if the Program itself is interactive but | |||
does not normally print such an announcement, your work based on | |||
the Program is not required to print an announcement.) | |||
These requirements apply to the modified work as a whole. If | |||
identifiable sections of that work are not derived from the Program, | |||
and can be reasonably considered independent and separate works in | |||
themselves, then this License, and its terms, do not apply to those | |||
sections when you distribute them as separate works. But when you | |||
distribute the same sections as part of a whole which is a work based | |||
on the Program, the distribution of the whole must be on the terms of | |||
this License, whose permissions for other licensees extend to the | |||
entire whole, and thus to each and every part regardless of who wrote it. | |||
Thus, it is not the intent of this section to claim rights or contest | |||
your rights to work written entirely by you; rather, the intent is to | |||
exercise the right to control the distribution of derivative or | |||
collective works based on the Program. | |||
In addition, mere aggregation of another work not based on the Program | |||
with the Program (or with a work based on the Program) on a volume of | |||
a storage or distribution medium does not bring the other work under | |||
the scope of this License. | |||
3. You may copy and distribute the Program (or a work based on it, | |||
under Section 2) in object code or executable form under the terms of | |||
Sections 1 and 2 above provided that you also do one of the following: | |||
a) Accompany it with the complete corresponding machine-readable | |||
source code, which must be distributed under the terms of Sections | |||
1 and 2 above on a medium customarily used for software interchange; or, | |||
b) Accompany it with a written offer, valid for at least three | |||
years, to give any third party, for a charge no more than your | |||
cost of physically performing source distribution, a complete | |||
machine-readable copy of the corresponding source code, to be | |||
distributed under the terms of Sections 1 and 2 above on a medium | |||
customarily used for software interchange; or, | |||
c) Accompany it with the information you received as to the offer | |||
to distribute corresponding source code. (This alternative is | |||
allowed only for noncommercial distribution and only if you | |||
received the program in object code or executable form with such | |||
an offer, in accord with Subsection b above.) | |||
The source code for a work means the preferred form of the work for | |||
making modifications to it. For an executable work, complete source | |||
code means all the source code for all modules it contains, plus any | |||
associated interface definition files, plus the scripts used to | |||
control compilation and installation of the executable. However, as a | |||
special exception, the source code distributed need not include | |||
anything that is normally distributed (in either source or binary | |||
form) with the major components (compiler, kernel, and so on) of the | |||
operating system on which the executable runs, unless that component | |||
itself accompanies the executable. | |||
If distribution of executable or object code is made by offering | |||
access to copy from a designated place, then offering equivalent | |||
access to copy the source code from the same place counts as | |||
distribution of the source code, even though third parties are not | |||
compelled to copy the source along with the object code. | |||
4. You may not copy, modify, sublicense, or distribute the Program | |||
except as expressly provided under this License. Any attempt | |||
otherwise to copy, modify, sublicense or distribute the Program is | |||
void, and will automatically terminate your rights under this License. | |||
However, parties who have received copies, or rights, from you under | |||
this License will not have their licenses terminated so long as such | |||
parties remain in full compliance. | |||
5. You are not required to accept this License, since you have not | |||
signed it. However, nothing else grants you permission to modify or | |||
distribute the Program or its derivative works. These actions are | |||
prohibited by law if you do not accept this License. Therefore, by | |||
modifying or distributing the Program (or any work based on the | |||
Program), you indicate your acceptance of this License to do so, and | |||
all its terms and conditions for copying, distributing or modifying | |||
the Program or works based on it. | |||
6. Each time you redistribute the Program (or any work based on the | |||
Program), the recipient automatically receives a license from the | |||
original licensor to copy, distribute or modify the Program subject to | |||
these terms and conditions. You may not impose any further | |||
restrictions on the recipients' exercise of the rights granted herein. | |||
You are not responsible for enforcing compliance by third parties to | |||
this License. | |||
7. If, as a consequence of a court judgment or allegation of patent | |||
infringement or for any other reason (not limited to patent issues), | |||
conditions are imposed on you (whether by court order, agreement or | |||
otherwise) that contradict the conditions of this License, they do not | |||
excuse you from the conditions of this License. If you cannot | |||
distribute so as to satisfy simultaneously your obligations under this | |||
License and any other pertinent obligations, then as a consequence you | |||
may not distribute the Program at all. For example, if a patent | |||
license would not permit royalty-free redistribution of the Program by | |||
all those who receive copies directly or indirectly through you, then | |||
the only way you could satisfy both it and this License would be to | |||
refrain entirely from distribution of the Program. | |||
If any portion of this section is held invalid or unenforceable under | |||
any particular circumstance, the balance of the section is intended to | |||
apply and the section as a whole is intended to apply in other | |||
circumstances. | |||
It is not the purpose of this section to induce you to infringe any | |||
patents or other property right claims or to contest validity of any | |||
such claims; this section has the sole purpose of protecting the | |||
integrity of the free software distribution system, which is | |||
implemented by public license practices. Many people have made | |||
generous contributions to the wide range of software distributed | |||
through that system in reliance on consistent application of that | |||
system; it is up to the author/donor to decide if he or she is willing | |||
to distribute software through any other system and a licensee cannot | |||
impose that choice. | |||
This section is intended to make thoroughly clear what is believed to | |||
be a consequence of the rest of this License. | |||
8. If the distribution and/or use of the Program is restricted in | |||
certain countries either by patents or by copyrighted interfaces, the | |||
original copyright holder who places the Program under this License | |||
may add an explicit geographical distribution limitation excluding | |||
those countries, so that distribution is permitted only in or among | |||
countries not thus excluded. In such case, this License incorporates | |||
the limitation as if written in the body of this License. | |||
9. The Free Software Foundation may publish revised and/or new versions | |||
of the General Public License from time to time. Such new versions will | |||
be similar in spirit to the present version, but may differ in detail to | |||
address new problems or concerns. | |||
Each version is given a distinguishing version number. If the Program | |||
specifies a version number of this License which applies to it and "any | |||
later version", you have the option of following the terms and conditions | |||
either of that version or of any later version published by the Free | |||
Software Foundation. If the Program does not specify a version number of | |||
this License, you may choose any version ever published by the Free Software | |||
Foundation. | |||
10. If you wish to incorporate parts of the Program into other free | |||
programs whose distribution conditions are different, write to the author | |||
to ask for permission. For software which is copyrighted by the Free | |||
Software Foundation, write to the Free Software Foundation; we sometimes | |||
make exceptions for this. Our decision will be guided by the two goals | |||
of preserving the free status of all derivatives of our free software and | |||
of promoting the sharing and reuse of software generally. | |||
NO WARRANTY | |||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY | |||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN | |||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES | |||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED | |||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS | |||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE | |||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, | |||
REPAIR OR CORRECTION. | |||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | |||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR | |||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, | |||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING | |||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED | |||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY | |||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER | |||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE | |||
POSSIBILITY OF SUCH DAMAGES. |
@ -0,0 +1,20 @@ | |||
Copyright (c) 2009 Adam Shaw | |||
Permission is hereby granted, free of charge, to any person obtaining | |||
a copy of this software and associated documentation files (the | |||
"Software"), to deal in the Software without restriction, including | |||
without limitation the rights to use, copy, modify, merge, publish, | |||
distribute, sublicense, and/or sell copies of the Software, and to | |||
permit persons to whom the Software is furnished to do so, subject to | |||
the following conditions: | |||
The above copyright notice and this permission notice shall be | |||
included in all copies or substantial portions of the Software. | |||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
@ -0,0 +1,318 @@ | |||
version 1.5.3 (2/6/12) | |||
- fixed dragging issue with jQuery UI 1.8.16 (issue 1168) | |||
- bundled with jQuery 1.7.1 and jQuery UI 1.8.17 | |||
version 1.5.2 (8/21/11) | |||
- correctly process UTC "Z" ISO8601 date strings (issue 750) | |||
version 1.5.1 (4/9/11) | |||
- more flexible ISO8601 date parsing (issue 814) | |||
- more flexible parsing of UNIX timestamps (issue 826) | |||
- FullCalendar now buildable from source on a Mac (issue 795) | |||
- FullCalendar QA'd in FF4 (issue 883) | |||
- upgraded to jQuery 1.5.2 (which supports IE9) and jQuery UI 1.8.11 | |||
version 1.5 (3/19/11) | |||
- slicker default styling for buttons | |||
- reworked a lot of the calendar's HTML and accompanying CSS | |||
(solves issues 327 and 395) | |||
- more printer-friendly (fullcalendar-print.css) | |||
- fullcalendar now inherits styles from jquery-ui themes differently. | |||
styles for buttons are distinct from styles for calendar cells. | |||
(solves issue 299) | |||
- can now color events through FullCalendar options and Event-Object properties (issue 117) | |||
THIS IS NOW THE PREFERRED METHOD OF COLORING EVENTS (as opposed to using className and CSS) | |||
- FullCalendar options: | |||
- eventColor (changes both background and border) | |||
- eventBackgroundColor | |||
- eventBorderColor | |||
- eventTextColor | |||
- Event-Object options: | |||
- color (changes both background and border) | |||
- backgroundColor | |||
- borderColor | |||
- textColor | |||
- can now specify an event source as an *object* with a `url` property (json feed) or | |||
an `events` property (function or array) with additional properties that will | |||
be applied to the entire event source: | |||
- color (changes both background and border) | |||
- backgroudColor | |||
- borderColor | |||
- textColor | |||
- className | |||
- editable | |||
- allDayDefault | |||
- ignoreTimezone | |||
- startParam (for a feed) | |||
- endParam (for a feed) | |||
- ANY OF THE JQUERY $.ajax OPTIONS | |||
allows for easily changing from GET to POST and sending additional parameters (issue 386) | |||
allows for easily attaching ajax handlers such as `error` (issue 754) | |||
allows for turning caching on (issue 355) | |||
- Google Calendar feeds are now specified differently: | |||
- specify a simple string of your feed's URL | |||
- specify an *object* with a `url` property of your feed's URL. | |||
you can include any of the new Event-Source options in this object. | |||
- the old `$.fullCalendar.gcalFeed` method still works | |||
- no more IE7 SSL popup (issue 504) | |||
- remove `cacheParam` - use json event source `cache` option instead | |||
- latest jquery/jquery-ui | |||
version 1.4.11 (2/22/11) | |||
- fixed rerenderEvents bug (issue 790) | |||
- fixed bug with faulty dragging of events from all-day slot in agenda views | |||
- bundled with jquery 1.5 and jquery-ui 1.8.9 | |||
version 1.4.10 (1/2/11) | |||
- fixed bug with resizing event to different week in 5-day month view (issue 740) | |||
- fixed bug with events not sticking after a removeEvents call (issue 757) | |||
- fixed bug with underlying parseTime method, and other uses of parseInt (issue 688) | |||
version 1.4.9 (11/16/10) | |||
- new algorithm for vertically stacking events (issue 111) | |||
- resizing an event to a different week (issue 306) | |||
- bug: some events not rendered with consecutive calls to addEventSource (issue 679) | |||
version 1.4.8 (10/16/10) | |||
- ignoreTimezone option (set to `false` to process UTC offsets in ISO8601 dates) | |||
- bugfixes | |||
- event refetching not being called under certain conditions (issues 417, 554) | |||
- event refetching being called multiple times under certain conditions (issues 586, 616) | |||
- selection cannot be triggered by right mouse button (issue 558) | |||
- agenda view left axis sized incorrectly (issue 465) | |||
- IE js error when calendar is too narrow (issue 517) | |||
- agenda view looks strange when no scrollbars (issue 235) | |||
- improved parsing of ISO8601 dates with UTC offsets | |||
- $.fullCalendar.version | |||
- an internal refactor of the code, for easier future development and modularity | |||
version 1.4.7 (7/5/10) | |||
- "dropping" external objects onto the calendar | |||
- droppable (boolean, to turn on/off) | |||
- dropAccept (to filter which events the calendar will accept) | |||
- drop (trigger) | |||
- selectable options can now be specified with a View Option Hash | |||
- bugfixes | |||
- dragged & reverted events having wrong time text (issue 406) | |||
- bug rendering events that have an endtime with seconds, but no hours/minutes (issue 477) | |||
- gotoDate date overflow bug (issue 429) | |||
- wrong date reported when clicking on edge of last column in agenda views (412) | |||
- support newlines in event titles | |||
- select/unselect callbacks now passes native js event | |||
version 1.4.6 (5/31/10) | |||
- "selecting" days or timeslots | |||
- options: selectable, selectHelper, unselectAuto, unselectCancel | |||
- callbacks: select, unselect | |||
- methods: select, unselect | |||
- when dragging an event, the highlighting reflects the duration of the event | |||
- code compressing by Google Closure Compiler | |||
- bundled with jQuery 1.4.2 and jQuery UI 1.8.1 | |||
version 1.4.5 (2/21/10) | |||
- lazyFetching option, which can force the calendar to fetch events on every view/date change | |||
- scroll state of agenda views are preserved when switching back to view | |||
- bugfixes | |||
- calling methods on an uninitialized fullcalendar throws error | |||
- IE6/7 bug where an entire view becomes invisible (issue 320) | |||
- error when rendering a hidden calendar (in jquery ui tabs for example) in IE (issue 340) | |||
- interconnected bugs related to calendar resizing and scrollbars | |||
- when switching views or clicking prev/next, calendar would "blink" (issue 333) | |||
- liquid-width calendar's events shifted (depending on initial height of browser) (issue 341) | |||
- more robust underlying algorithm for calendar resizing | |||
version 1.4.4 (2/3/10) | |||
- optimized event rendering in all views (events render in 1/10 the time) | |||
- gotoDate() does not force the calendar to unnecessarily rerender | |||
- render() method now correctly readjusts height | |||
version 1.4.3 (12/22/09) | |||
- added destroy method | |||
- Google Calendar event pages respect currentTimezone | |||
- caching now handled by jQuery's ajax | |||
- protection from setting aspectRatio to zero | |||
- bugfixes | |||
- parseISO8601 and DST caused certain events to display day before | |||
- button positioning problem in IE6 | |||
- ajax event source removed after recently being added, events still displayed | |||
- event not displayed when end is an empty string | |||
- dynamically setting calendar height when no events have been fetched, throws error | |||
version 1.4.2 (12/02/09) | |||
- eventAfterRender trigger | |||
- getDate & getView methods | |||
- height & contentHeight options (explicitly sets the pixel height) | |||
- minTime & maxTime options (restricts shown hours in agenda view) | |||
- getters [for all options] and setters [for height, contentHeight, and aspectRatio ONLY! stay tuned..] | |||
- render method now readjusts calendar's size | |||
- bugfixes | |||
- lightbox scripts that use iframes (like fancybox) | |||
- day-of-week classNames were off when firstDay=1 | |||
- guaranteed space on right side of agenda events (even when stacked) | |||
- accepts ISO8601 dates with a space (instead of 'T') | |||
version 1.4.1 (10/31/09) | |||
- can exclude weekends with new 'weekends' option | |||
- gcal feed 'currentTimezone' option | |||
- bugfixes | |||
- year/month/date option sometimes wouldn't set correctly (depending on current date) | |||
- daylight savings issue caused agenda views to start at 1am (for BST users) | |||
- cleanup of gcal.js code | |||
version 1.4 (10/19/09) | |||
- agendaWeek and agendaDay views | |||
- added some options for agenda views: | |||
- allDaySlot | |||
- allDayText | |||
- firstHour | |||
- slotMinutes | |||
- defaultEventMinutes | |||
- axisFormat | |||
- modified some existing options/triggers to work with agenda views: | |||
- dragOpacity and timeFormat can now accept a "View Hash" (a new concept) | |||
- dayClick now has an allDay parameter | |||
- eventDrop now has an an allDay parameter | |||
(this will affect those who use revertFunc, adjust parameter list) | |||
- added 'prevYear' and 'nextYear' for buttons in header | |||
- minor change for theme users, ui-state-hover not applied to active/inactive buttons | |||
- added event-color-changing example in docs | |||
- better defaults for right-to-left themed button icons | |||
version 1.3.2 (10/13/09) | |||
- Bugfixes (please upgrade from 1.3.1!) | |||
- squashed potential infinite loop when addMonths and addDays | |||
is called with an invalid date | |||
- $.fullCalendar.parseDate() now correctly parses IETF format | |||
- when switching views, the 'today' button sticks inactive, fixed | |||
- gotoDate now can accept a single Date argument | |||
- documentation for changes in 1.3.1 and 1.3.2 now on website | |||
version 1.3.1 (9/30/09) | |||
- Important Bugfixes (please upgrade from 1.3!) | |||
- When current date was late in the month, for long months, and prev/next buttons | |||
were clicked in month-view, some months would be skipped/repeated | |||
- In certain time zones, daylight savings time would cause certain days | |||
to be misnumbered in month-view | |||
- Subtle change in way week interval is chosen when switching from month to basicWeek/basicDay view | |||
- Added 'allDayDefault' option | |||
- Added 'changeView' and 'render' methods | |||
version 1.3 (9/21/09) | |||
- different 'views': month/basicWeek/basicDay | |||
- more flexible 'header' system for buttons | |||
- themable by jQuery UI themes | |||
- resizable events (require jQuery UI resizable plugin) | |||
- rescoped & rewritten CSS, enhanced default look | |||
- cleaner css & rendering techniques for right-to-left | |||
- reworked options & API to support multiple views / be consistent with jQuery UI | |||
- refactoring of entire codebase | |||
- broken into different JS & CSS files, assembled w/ build scripts | |||
- new test suite for new features, uses firebug-lite | |||
- refactored docs | |||
- Options | |||
+ date | |||
+ defaultView | |||
+ aspectRatio | |||
+ disableResizing | |||
+ monthNames (use instead of $.fullCalendar.monthNames) | |||
+ monthNamesShort (use instead of $.fullCalendar.monthAbbrevs) | |||
+ dayNames (use instead of $.fullCalendar.dayNames) | |||
+ dayNamesShort (use instead of $.fullCalendar.dayAbbrevs) | |||
+ theme | |||
+ buttonText | |||
+ buttonIcons | |||
x draggable -> editable/disableDragging | |||
x fixedWeeks -> weekMode | |||
x abbrevDayHeadings -> columnFormat | |||
x buttons/title -> header | |||
x eventDragOpacity -> dragOpacity | |||
x eventRevertDuration -> dragRevertDuration | |||
x weekStart -> firstDay | |||
x rightToLeft -> isRTL | |||
x showTime (use 'allDay' CalEvent property instead) | |||
- Triggered Actions | |||
+ eventResizeStart | |||
+ eventResizeStop | |||
+ eventResize | |||
x monthDisplay -> viewDisplay | |||
x resize -> windowResize | |||
'eventDrop' params changed, can revert if ajax cuts out | |||
- CalEvent Properties | |||
x showTime -> allDay | |||
x draggable -> editable | |||
'end' is now INCLUSIVE when allDay=true | |||
'url' now produces a real <a> tag, more native clicking/tab behavior | |||
- Methods: | |||
+ renderEvent | |||
x prevMonth -> prev | |||
x nextMonth -> next | |||
x prevYear/nextYear -> moveDate | |||
x refresh -> rerenderEvents/refetchEvents | |||
x removeEvent -> removeEvents | |||
x getEventsByID -> clientEvents | |||
- Utilities: | |||
'formatDate' format string completely changed (inspired by jQuery UI datepicker + datejs) | |||
'formatDates' added to support date-ranges | |||
- Google Calendar Options: | |||
x draggable -> editable | |||
- Bugfixes | |||
- gcal extension fetched 25 results max, now fetches all | |||
version 1.2.1 (6/29/09) | |||
- bugfixes | |||
- allows and corrects invalid end dates for events | |||
- doesn't throw an error in IE while rendering when display:none | |||
- fixed 'loading' callback when used w/ multiple addEventSource calls | |||
- gcal className can now be an array | |||
version 1.2 (5/31/09) | |||
- expanded API | |||
- 'className' CalEvent attribute | |||
- 'source' CalEvent attribute | |||
- dynamically get/add/remove/update events of current month | |||
- locale improvements: change month/day name text | |||
- better date formatting ($.fullCalendar.formatDate) | |||
- multiple 'event sources' allowed | |||
- dynamically add/remove event sources | |||
- options for prevYear and nextYear buttons | |||
- docs have been reworked (include addition of Google Calendar docs) | |||
- changed behavior of parseDate for number strings | |||
(now interpets as unix timestamp, not MS times) | |||
- bugfixes | |||
- rightToLeft month start bug | |||
- off-by-one errors with month formatting commands | |||
- events from previous months sticking when clicking prev/next quickly | |||
- Google Calendar API changed to work w/ multiple event sources | |||
- can also provide 'className' and 'draggable' options | |||
- date utilties moved from $ to $.fullCalendar | |||
- more documentation in source code | |||
- minified version of fullcalendar.js | |||
- test suit (available from svn) | |||
- top buttons now use <button> w/ an inner <span> for better css cusomization | |||
- thus CSS has changed. IF UPGRADING FROM PREVIOUS VERSIONS, | |||
UPGRADE YOUR FULLCALENDAR.CSS FILE!!! | |||
version 1.1 (5/10/09) | |||
- Added the following options: | |||
- weekStart | |||
- rightToLeft | |||
- titleFormat | |||
- timeFormat | |||
- cacheParam | |||
- resize | |||
- Fixed rendering bugs | |||
- Opera 9.25 (events placement & window resizing) | |||
- IE6 (window resizing) | |||
- Optimized window resizing for ALL browsers | |||
- Events on same day now sorted by start time (but first by timespan) | |||
- Correct z-index when dragging | |||
- Dragging contained in overflow DIV for IE6 | |||
- Modified fullcalendar.css | |||
- for right-to-left support | |||
- for variable start-of-week | |||
- for IE6 resizing bug | |||
- for THEAD and TBODY (in 1.0, just used TBODY, restructured in 1.1) | |||
- IF UPGRADING FROM FULLCALENDAR 1.0, YOU MUST UPGRADE FULLCALENDAR.CSS | |||
!!!!!!!!!!! | |||
@ -0,0 +1,618 @@ | |||
/* | |||
* FullCalendar v1.5.3 Stylesheet | |||
* | |||
* Copyright (c) 2011 Adam Shaw | |||
* Dual licensed under the MIT and GPL licenses, located in | |||
* MIT-LICENSE.txt and GPL-LICENSE.txt respectively. | |||
* | |||
* Date: Mon Feb 6 22:40:40 2012 -0800 | |||
* | |||
*/ | |||
.fc { | |||
direction: ltr; | |||
text-align: left; | |||
} | |||
.fc table { | |||
border-collapse: collapse; | |||
border-spacing: 0; | |||
} | |||
html .fc, | |||
.fc table { | |||
font-size: 1em; | |||
} | |||
.fc td, | |||
.fc th { | |||
padding: 0; | |||
vertical-align: top; | |||
} | |||
/* Header | |||
------------------------------------------------------------------------*/ | |||
.fc-header td { | |||
white-space: nowrap; | |||
} | |||
.fc-header-left { | |||
width: 25%; | |||
text-align: left; | |||
} | |||
.fc-header-center { | |||
text-align: center; | |||
} | |||
.fc-header-right { | |||
width: 25%; | |||
text-align: right; | |||
} | |||
.fc-header-title { | |||
display: inline-block; | |||
vertical-align: top; | |||
} | |||
.fc-header-title h2 { | |||
margin-top: 0; | |||
white-space: nowrap; | |||
} | |||
.fc .fc-header-space { | |||
padding-left: 10px; | |||
} | |||
.fc-header .fc-button { | |||
margin-bottom: 1em; | |||
vertical-align: top; | |||
} | |||
/* buttons edges butting together */ | |||
.fc-header .fc-button { | |||
margin-right: -1px; | |||
} | |||
.fc-header .fc-corner-right { | |||
margin-right: 1px; /* back to normal */ | |||
} | |||
.fc-header .ui-corner-right { | |||
margin-right: 0; /* back to normal */ | |||
} | |||
/* button layering (for border precedence) */ | |||
.fc-header .fc-state-hover, | |||
.fc-header .ui-state-hover { | |||
z-index: 2; | |||
} | |||
.fc-header .fc-state-down { | |||
z-index: 3; | |||
} | |||
.fc-header .fc-state-active, | |||
.fc-header .ui-state-active { | |||
z-index: 4; | |||
} | |||
/* Content | |||
------------------------------------------------------------------------*/ | |||
.fc-content { | |||
clear: both; | |||
} | |||
.fc-view { | |||
width: 100%; /* needed for view switching (when view is absolute) */ | |||
overflow: hidden; | |||
} | |||
/* Cell Styles | |||
------------------------------------------------------------------------*/ | |||
.fc-widget-header, /* <th>, usually */ | |||
.fc-widget-content { /* <td>, usually */ | |||
border: 1px solid #ccc; | |||
} | |||
.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */ | |||
background: #ffc; | |||
} | |||
.fc-cell-overlay { /* semi-transparent rectangle while dragging */ | |||
background: #9cf; | |||
opacity: .2; | |||
filter: alpha(opacity=20); /* for IE */ | |||
} | |||
/* Buttons | |||
------------------------------------------------------------------------*/ | |||
.fc-button { | |||
position: relative; | |||
display: inline-block; | |||
cursor: pointer; | |||
} | |||
.fc-state-default { /* non-theme */ | |||
border-style: solid; | |||
border-width: 1px 0; | |||
} | |||
.fc-button-inner { | |||
position: relative; | |||
float: left; | |||
overflow: hidden; | |||
} | |||
.fc-state-default .fc-button-inner { /* non-theme */ | |||
border-style: solid; | |||
border-width: 0 1px; | |||
} | |||
.fc-button-content { | |||
position: relative; | |||
float: left; | |||
height: 1.9em; | |||
line-height: 1.9em; | |||
padding: 0 .6em; | |||
white-space: nowrap; | |||
} | |||
/* icon (for jquery ui) */ | |||
.fc-button-content .fc-icon-wrap { | |||
position: relative; | |||
float: left; | |||
top: 50%; | |||
} | |||
.fc-button-content .ui-icon { | |||
position: relative; | |||
float: left; | |||
margin-top: -50%; | |||
*margin-top: 0; | |||
*top: -50%; | |||
} | |||
/* gloss effect */ | |||
.fc-state-default .fc-button-effect { | |||
position: absolute; | |||
top: 50%; | |||
left: 0; | |||
} | |||
.fc-state-default .fc-button-effect span { | |||
position: absolute; | |||
top: -100px; | |||
left: 0; | |||
width: 500px; | |||
height: 100px; | |||
border-width: 100px 0 0 1px; | |||
border-style: solid; | |||
border-color: #fff; | |||
background: #444; | |||
opacity: .09; | |||
filter: alpha(opacity=9); | |||
} | |||
/* button states (determines colors) */ | |||
.fc-state-default, | |||
.fc-state-default .fc-button-inner { | |||
border-style: solid; | |||
border-color: #ccc #bbb #aaa; | |||
background: #F3F3F3; | |||
color: #000; | |||
} | |||
.fc-state-hover, | |||
.fc-state-hover .fc-button-inner { | |||
border-color: #999; | |||
} | |||
.fc-state-down, | |||
.fc-state-down .fc-button-inner { | |||
border-color: #555; | |||
background: #777; | |||
} | |||
.fc-state-active, | |||
.fc-state-active .fc-button-inner { | |||
border-color: #555; | |||
background: #777; | |||
color: #fff; | |||
} | |||
.fc-state-disabled, | |||
.fc-state-disabled .fc-button-inner { | |||
color: #999; | |||
border-color: #ddd; | |||
} | |||
.fc-state-disabled { | |||
cursor: default; | |||
} | |||
.fc-state-disabled .fc-button-effect { | |||
display: none; | |||
} | |||
/* Global Event Styles | |||
------------------------------------------------------------------------*/ | |||
.fc-event { | |||
border-style: solid; | |||
border-width: 0; | |||
font-size: .85em; | |||
cursor: default; | |||
} | |||
a.fc-event, | |||
.fc-event-draggable { | |||
cursor: pointer; | |||
} | |||
a.fc-event { | |||
text-decoration: none; | |||
} | |||
.fc-rtl .fc-event { | |||
text-align: right; | |||
} | |||
.fc-event-skin { | |||
border-color: #36c; /* default BORDER color */ | |||
background-color: #36c; /* default BACKGROUND color */ | |||
color: #fff; /* default TEXT color */ | |||
} | |||
.fc-event-inner { | |||
position: relative; | |||
width: 100%; | |||
height: 100%; | |||
border-style: solid; | |||
border-width: 0; | |||
overflow: hidden; | |||
} | |||
.fc-event-time, | |||
.fc-event-title { | |||
padding: 0 1px; | |||
} | |||
.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/ | |||
display: block; | |||
position: absolute; | |||
z-index: 99999; | |||
overflow: hidden; /* hacky spaces (IE6/7) */ | |||
font-size: 300%; /* */ | |||
line-height: 50%; /* */ | |||
} | |||
/* Horizontal Events | |||
------------------------------------------------------------------------*/ | |||
.fc-event-hori { | |||
border-width: 1px 0; | |||
margin-bottom: 1px; | |||
} | |||
/* resizable */ | |||
.fc-event-hori .ui-resizable-e { | |||
top: 0 !important; /* importants override pre jquery ui 1.7 styles */ | |||
right: -3px !important; | |||
width: 7px !important; | |||
height: 100% !important; | |||
cursor: e-resize; | |||
} | |||
.fc-event-hori .ui-resizable-w { | |||
top: 0 !important; | |||
left: -3px !important; | |||
width: 7px !important; | |||
height: 100% !important; | |||
cursor: w-resize; | |||
} | |||
.fc-event-hori .ui-resizable-handle { | |||
_padding-bottom: 14px; /* IE6 had 0 height */ | |||
} | |||
/* Fake Rounded Corners (for buttons and events) | |||
------------------------------------------------------------*/ | |||
.fc-corner-left { | |||
margin-left: 1px; | |||
} | |||
.fc-corner-left .fc-button-inner, | |||
.fc-corner-left .fc-event-inner { | |||
margin-left: -1px; | |||
} | |||
.fc-corner-right { | |||
margin-right: 1px; | |||
} | |||
.fc-corner-right .fc-button-inner, | |||
.fc-corner-right .fc-event-inner { | |||
margin-right: -1px; | |||
} | |||
.fc-corner-top { | |||
margin-top: 1px; | |||
} | |||
.fc-corner-top .fc-event-inner { | |||
margin-top: -1px; | |||
} | |||
.fc-corner-bottom { | |||
margin-bottom: 1px; | |||
} | |||
.fc-corner-bottom .fc-event-inner { | |||
margin-bottom: -1px; | |||
} | |||
/* Fake Rounded Corners SPECIFICALLY FOR EVENTS | |||
-----------------------------------------------------------------*/ | |||
.fc-corner-left .fc-event-inner { | |||
border-left-width: 1px; | |||
} | |||
.fc-corner-right .fc-event-inner { | |||
border-right-width: 1px; | |||
} | |||
.fc-corner-top .fc-event-inner { | |||
border-top-width: 1px; | |||
} | |||
.fc-corner-bottom .fc-event-inner { | |||
border-bottom-width: 1px; | |||
} | |||
/* Reusable Separate-border Table | |||
------------------------------------------------------------*/ | |||
table.fc-border-separate { | |||
border-collapse: separate; | |||
} | |||
.fc-border-separate th, | |||
.fc-border-separate td { | |||
border-width: 1px 0 0 1px; | |||
} | |||
.fc-border-separate th.fc-last, | |||
.fc-border-separate td.fc-last { | |||
border-right-width: 1px; | |||
} | |||
.fc-border-separate tr.fc-last th, | |||
.fc-border-separate tr.fc-last td { | |||
border-bottom-width: 1px; | |||
} | |||
.fc-border-separate tbody tr.fc-first td, | |||
.fc-border-separate tbody tr.fc-first th { | |||
border-top-width: 0; | |||
} | |||
/* Month View, Basic Week View, Basic Day View | |||
------------------------------------------------------------------------*/ | |||
.fc-grid th { | |||
text-align: center; | |||
} | |||
.fc-grid .fc-day-number { | |||
float: right; | |||
padding: 0 2px; | |||
} | |||
.fc-grid .fc-other-month .fc-day-number { | |||
opacity: 0.3; | |||
filter: alpha(opacity=30); /* for IE */ | |||
/* opacity with small font can sometimes look too faded | |||
might want to set the 'color' property instead | |||
making day-numbers bold also fixes the problem */ | |||
} | |||
.fc-grid .fc-day-content { | |||
clear: both; | |||
padding: 2px 2px 1px; /* distance between events and day edges */ | |||
} | |||
/* event styles */ | |||
.fc-grid .fc-event-time { | |||
font-weight: bold; | |||
} | |||
/* right-to-left */ | |||
.fc-rtl .fc-grid .fc-day-number { | |||
float: left; | |||
} | |||
.fc-rtl .fc-grid .fc-event-time { | |||
float: right; | |||
} | |||
/* Agenda Week View, Agenda Day View | |||
------------------------------------------------------------------------*/ | |||
.fc-agenda table { | |||
border-collapse: separate; | |||
} | |||
.fc-agenda-days th { | |||
text-align: center; | |||
} | |||
.fc-agenda .fc-agenda-axis { | |||
width: 50px; | |||
padding: 0 4px; | |||
vertical-align: middle; | |||
text-align: right; | |||
white-space: nowrap; | |||
font-weight: normal; | |||
} | |||
.fc-agenda .fc-day-content { | |||
padding: 2px 2px 1px; | |||
} | |||
/* make axis border take precedence */ | |||
.fc-agenda-days .fc-agenda-axis { | |||
border-right-width: 1px; | |||
} | |||
.fc-agenda-days .fc-col0 { | |||
border-left-width: 0; | |||
} | |||
/* all-day area */ | |||
.fc-agenda-allday th { | |||
border-width: 0 1px; | |||
} | |||
.fc-agenda-allday .fc-day-content { | |||
min-height: 34px; /* TODO: doesnt work well in quirksmode */ | |||
_height: 34px; | |||
} | |||
/* divider (between all-day and slots) */ | |||
.fc-agenda-divider-inner { | |||
height: 2px; | |||
overflow: hidden; | |||
} | |||
.fc-widget-header .fc-agenda-divider-inner { | |||
background: #eee; | |||
} | |||
/* slot rows */ | |||
.fc-agenda-slots th { | |||
border-width: 1px 1px 0; | |||
} | |||
.fc-agenda-slots td { | |||
border-width: 1px 0 0; | |||
background: none; | |||
} | |||
.fc-agenda-slots td div { | |||
height: 20px; | |||
} | |||
.fc-agenda-slots tr.fc-slot0 th, | |||
.fc-agenda-slots tr.fc-slot0 td { | |||
border-top-width: 0; | |||
} | |||
.fc-agenda-slots tr.fc-minor th, | |||
.fc-agenda-slots tr.fc-minor td { | |||
border-top-style: dotted; | |||
} | |||
.fc-agenda-slots tr.fc-minor th.ui-widget-header { | |||
*border-top-style: solid; /* doesn't work with background in IE6/7 */ | |||
} | |||
/* Vertical Events | |||
------------------------------------------------------------------------*/ | |||
.fc-event-vert { | |||
border-width: 0 1px; | |||
} | |||
.fc-event-vert .fc-event-head, | |||
.fc-event-vert .fc-event-content { | |||
position: relative; | |||
z-index: 2; | |||
width: 100%; | |||
overflow: hidden; | |||
} | |||
.fc-event-vert .fc-event-time { | |||
white-space: nowrap; | |||
font-size: 10px; | |||
} | |||
.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */ | |||
position: absolute; | |||
z-index: 1; | |||
top: 0; | |||
left: 0; | |||
width: 100%; | |||
height: 100%; | |||
background: #fff; | |||
opacity: .3; | |||
filter: alpha(opacity=30); | |||
} | |||
.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */ | |||
.fc-select-helper .fc-event-bg { | |||
display: none\9; /* for IE6/7/8. nested opacity filters while dragging don't work */ | |||
} | |||
/* resizable */ | |||
.fc-event-vert .ui-resizable-s { | |||
bottom: 0 !important; /* importants override pre jquery ui 1.7 styles */ | |||
width: 100% !important; | |||
height: 8px !important; | |||
overflow: hidden !important; | |||
line-height: 8px !important; | |||
font-size: 11px !important; | |||
font-family: monospace; | |||
text-align: center; | |||
cursor: s-resize; | |||
} | |||
.fc-agenda .ui-resizable-resizing { /* TODO: better selector */ | |||
_overflow: hidden; | |||
} | |||
@ -0,0 +1,114 @@ | |||
/* | |||
FullCalendar v1.5.3 | |||
http://arshaw.com/fullcalendar/ | |||
Use fullcalendar.css for basic styling. | |||
For event drag & drop, requires jQuery UI draggable. | |||
For event resizing, requires jQuery UI resizable. | |||
Copyright (c) 2011 Adam Shaw | |||
Dual licensed under the MIT and GPL licenses, located in | |||
MIT-LICENSE.txt and GPL-LICENSE.txt respectively. | |||
Date: Mon Feb 6 22:40:40 2012 -0800 | |||
*/ | |||
(function(m,ma){function wb(a){m.extend(true,Ya,a)}function Yb(a,b,e){function d(k){if(E){u();q();na();S(k)}else f()}function f(){B=b.theme?"ui":"fc";a.addClass("fc");b.isRTL&&a.addClass("fc-rtl");b.theme&&a.addClass("ui-widget");E=m("<div class='fc-content' style='position:relative'/>").prependTo(a);C=new Zb(X,b);(P=C.render())&&a.prepend(P);y(b.defaultView);m(window).resize(oa);t()||g()}function g(){setTimeout(function(){!n.start&&t()&&S()},0)}function l(){m(window).unbind("resize",oa);C.destroy(); | |||
E.remove();a.removeClass("fc fc-rtl ui-widget")}function j(){return i.offsetWidth!==0}function t(){return m("body")[0].offsetWidth!==0}function y(k){if(!n||k!=n.name){F++;pa();var D=n,Z;if(D){(D.beforeHide||xb)();Za(E,E.height());D.element.hide()}else Za(E,1);E.css("overflow","hidden");if(n=Y[k])n.element.show();else n=Y[k]=new Ja[k](Z=s=m("<div class='fc-view fc-view-"+k+"' style='position:absolute'/>").appendTo(E),X);D&&C.deactivateButton(D.name);C.activateButton(k);S();E.css("overflow","");D&& | |||
Za(E,1);Z||(n.afterShow||xb)();F--}}function S(k){if(j()){F++;pa();o===ma&&u();var D=false;if(!n.start||k||r<n.start||r>=n.end){n.render(r,k||0);fa(true);D=true}else if(n.sizeDirty){n.clearEvents();fa();D=true}else if(n.eventsDirty){n.clearEvents();D=true}n.sizeDirty=false;n.eventsDirty=false;ga(D);W=a.outerWidth();C.updateTitle(n.title);k=new Date;k>=n.start&&k<n.end?C.disableButton("today"):C.enableButton("today");F--;n.trigger("viewDisplay",i)}}function Q(){q();if(j()){u();fa();pa();n.clearEvents(); | |||
n.renderEvents(J);n.sizeDirty=false}}function q(){m.each(Y,function(k,D){D.sizeDirty=true})}function u(){o=b.contentHeight?b.contentHeight:b.height?b.height-(P?P.height():0)-Sa(E):Math.round(E.width()/Math.max(b.aspectRatio,0.5))}function fa(k){F++;n.setHeight(o,k);if(s){s.css("position","relative");s=null}n.setWidth(E.width(),k);F--}function oa(){if(!F)if(n.start){var k=++v;setTimeout(function(){if(k==v&&!F&&j())if(W!=(W=a.outerWidth())){F++;Q();n.trigger("windowResize",i);F--}},200)}else g()}function ga(k){if(!b.lazyFetching|| | |||
ya(n.visStart,n.visEnd))ra();else k&&da()}function ra(){K(n.visStart,n.visEnd)}function sa(k){J=k;da()}function ha(k){da(k)}function da(k){na();if(j()){n.clearEvents();n.renderEvents(J,k);n.eventsDirty=false}}function na(){m.each(Y,function(k,D){D.eventsDirty=true})}function ua(k,D,Z){n.select(k,D,Z===ma?true:Z)}function pa(){n&&n.unselect()}function U(){S(-1)}function ca(){S(1)}function ka(){gb(r,-1);S()}function qa(){gb(r,1);S()}function G(){r=new Date;S()}function p(k,D,Z){if(k instanceof Date)r= | |||
N(k);else yb(r,k,D,Z);S()}function L(k,D,Z){k!==ma&&gb(r,k);D!==ma&&hb(r,D);Z!==ma&&ba(r,Z);S()}function c(){return N(r)}function z(){return n}function H(k,D){if(D===ma)return b[k];if(k=="height"||k=="contentHeight"||k=="aspectRatio"){b[k]=D;Q()}}function T(k,D){if(b[k])return b[k].apply(D||i,Array.prototype.slice.call(arguments,2))}var X=this;X.options=b;X.render=d;X.destroy=l;X.refetchEvents=ra;X.reportEvents=sa;X.reportEventChange=ha;X.rerenderEvents=da;X.changeView=y;X.select=ua;X.unselect=pa; | |||
X.prev=U;X.next=ca;X.prevYear=ka;X.nextYear=qa;X.today=G;X.gotoDate=p;X.incrementDate=L;X.formatDate=function(k,D){return Oa(k,D,b)};X.formatDates=function(k,D,Z){return ib(k,D,Z,b)};X.getDate=c;X.getView=z;X.option=H;X.trigger=T;$b.call(X,b,e);var ya=X.isFetchNeeded,K=X.fetchEvents,i=a[0],C,P,E,B,n,Y={},W,o,s,v=0,F=0,r=new Date,J=[],M;yb(r,b.year,b.month,b.date);b.droppable&&m(document).bind("dragstart",function(k,D){var Z=k.target,ja=m(Z);if(!ja.parents(".fc").length){var ia=b.dropAccept;if(m.isFunction(ia)? | |||
ia.call(Z,ja):ja.is(ia)){M=Z;n.dragStart(M,k,D)}}}).bind("dragstop",function(k,D){if(M){n.dragStop(M,k,D);M=null}})}function Zb(a,b){function e(){q=b.theme?"ui":"fc";if(b.header)return Q=m("<table class='fc-header' style='width:100%'/>").append(m("<tr/>").append(f("left")).append(f("center")).append(f("right")))}function d(){Q.remove()}function f(u){var fa=m("<td class='fc-header-"+u+"'/>");(u=b.header[u])&&m.each(u.split(" "),function(oa){oa>0&&fa.append("<span class='fc-header-space'/>");var ga; | |||
m.each(this.split(","),function(ra,sa){if(sa=="title"){fa.append("<span class='fc-header-title'><h2> </h2></span>");ga&&ga.addClass(q+"-corner-right");ga=null}else{var ha;if(a[sa])ha=a[sa];else if(Ja[sa])ha=function(){na.removeClass(q+"-state-hover");a.changeView(sa)};if(ha){ra=b.theme?jb(b.buttonIcons,sa):null;var da=jb(b.buttonText,sa),na=m("<span class='fc-button fc-button-"+sa+" "+q+"-state-default'><span class='fc-button-inner'><span class='fc-button-content'>"+(ra?"<span class='fc-icon-wrap'><span class='ui-icon ui-icon-"+ | |||
ra+"'/></span>":da)+"</span><span class='fc-button-effect'><span></span></span></span></span>");if(na){na.click(function(){na.hasClass(q+"-state-disabled")||ha()}).mousedown(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-down")}).mouseup(function(){na.removeClass(q+"-state-down")}).hover(function(){na.not("."+q+"-state-active").not("."+q+"-state-disabled").addClass(q+"-state-hover")},function(){na.removeClass(q+"-state-hover").removeClass(q+"-state-down")}).appendTo(fa); | |||
ga||na.addClass(q+"-corner-left");ga=na}}}});ga&&ga.addClass(q+"-corner-right")});return fa}function g(u){Q.find("h2").html(u)}function l(u){Q.find("span.fc-button-"+u).addClass(q+"-state-active")}function j(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-active")}function t(u){Q.find("span.fc-button-"+u).addClass(q+"-state-disabled")}function y(u){Q.find("span.fc-button-"+u).removeClass(q+"-state-disabled")}var S=this;S.render=e;S.destroy=d;S.updateTitle=g;S.activateButton=l;S.deactivateButton= | |||
j;S.disableButton=t;S.enableButton=y;var Q=m([]),q}function $b(a,b){function e(c,z){return!ca||c<ca||z>ka}function d(c,z){ca=c;ka=z;L=[];c=++qa;G=z=U.length;for(var H=0;H<z;H++)f(U[H],c)}function f(c,z){g(c,function(H){if(z==qa){if(H){for(var T=0;T<H.length;T++){H[T].source=c;oa(H[T])}L=L.concat(H)}G--;G||ua(L)}})}function g(c,z){var H,T=Aa.sourceFetchers,X;for(H=0;H<T.length;H++){X=T[H](c,ca,ka,z);if(X===true)return;else if(typeof X=="object"){g(X,z);return}}if(H=c.events)if(m.isFunction(H)){u(); | |||
H(N(ca),N(ka),function(C){z(C);fa()})}else m.isArray(H)?z(H):z();else if(c.url){var ya=c.success,K=c.error,i=c.complete;H=m.extend({},c.data||{});T=Ta(c.startParam,a.startParam);X=Ta(c.endParam,a.endParam);if(T)H[T]=Math.round(+ca/1E3);if(X)H[X]=Math.round(+ka/1E3);u();m.ajax(m.extend({},ac,c,{data:H,success:function(C){C=C||[];var P=$a(ya,this,arguments);if(m.isArray(P))C=P;z(C)},error:function(){$a(K,this,arguments);z()},complete:function(){$a(i,this,arguments);fa()}}))}else z()}function l(c){if(c= | |||
j(c)){G++;f(c,qa)}}function j(c){if(m.isFunction(c)||m.isArray(c))c={events:c};else if(typeof c=="string")c={url:c};if(typeof c=="object"){ga(c);U.push(c);return c}}function t(c){U=m.grep(U,function(z){return!ra(z,c)});L=m.grep(L,function(z){return!ra(z.source,c)});ua(L)}function y(c){var z,H=L.length,T,X=na().defaultEventEnd,ya=c.start-c._start,K=c.end?c.end-(c._end||X(c)):0;for(z=0;z<H;z++){T=L[z];if(T._id==c._id&&T!=c){T.start=new Date(+T.start+ya);T.end=c.end?T.end?new Date(+T.end+K):new Date(+X(T)+ | |||
K):null;T.title=c.title;T.url=c.url;T.allDay=c.allDay;T.className=c.className;T.editable=c.editable;T.color=c.color;T.backgroudColor=c.backgroudColor;T.borderColor=c.borderColor;T.textColor=c.textColor;oa(T)}}oa(c);ua(L)}function S(c,z){oa(c);if(!c.source){if(z){pa.events.push(c);c.source=pa}L.push(c)}ua(L)}function Q(c){if(c){if(!m.isFunction(c)){var z=c+"";c=function(T){return T._id==z}}L=m.grep(L,c,true);for(H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=m.grep(U[H].events,c,true)}else{L= | |||
[];for(var H=0;H<U.length;H++)if(m.isArray(U[H].events))U[H].events=[]}ua(L)}function q(c){if(m.isFunction(c))return m.grep(L,c);else if(c){c+="";return m.grep(L,function(z){return z._id==c})}return L}function u(){p++||da("loading",null,true)}function fa(){--p||da("loading",null,false)}function oa(c){var z=c.source||{},H=Ta(z.ignoreTimezone,a.ignoreTimezone);c._id=c._id||(c.id===ma?"_fc"+bc++:c.id+"");if(c.date){if(!c.start)c.start=c.date;delete c.date}c._start=N(c.start=kb(c.start,H));c.end=kb(c.end, | |||
H);if(c.end&&c.end<=c.start)c.end=null;c._end=c.end?N(c.end):null;if(c.allDay===ma)c.allDay=Ta(z.allDayDefault,a.allDayDefault);if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[]}function ga(c){if(c.className){if(typeof c.className=="string")c.className=c.className.split(/\s+/)}else c.className=[];for(var z=Aa.sourceNormalizers,H=0;H<z.length;H++)z[H](c)}function ra(c,z){return c&&z&&sa(c)==sa(z)}function sa(c){return(typeof c=="object"?c.events|| | |||
c.url:"")||c}var ha=this;ha.isFetchNeeded=e;ha.fetchEvents=d;ha.addEventSource=l;ha.removeEventSource=t;ha.updateEvent=y;ha.renderEvent=S;ha.removeEvents=Q;ha.clientEvents=q;ha.normalizeEvent=oa;var da=ha.trigger,na=ha.getView,ua=ha.reportEvents,pa={events:[]},U=[pa],ca,ka,qa=0,G=0,p=0,L=[];for(ha=0;ha<b.length;ha++)j(b[ha])}function gb(a,b,e){a.setFullYear(a.getFullYear()+b);e||Ka(a);return a}function hb(a,b,e){if(+a){b=a.getMonth()+b;var d=N(a);d.setDate(1);d.setMonth(b);a.setMonth(b);for(e||Ka(a);a.getMonth()!= | |||
d.getMonth();)a.setDate(a.getDate()+(a<d?1:-1))}return a}function ba(a,b,e){if(+a){b=a.getDate()+b;var d=N(a);d.setHours(9);d.setDate(b);a.setDate(b);e||Ka(a);lb(a,d)}return a}function lb(a,b){if(+a)for(;a.getDate()!=b.getDate();)a.setTime(+a+(a<b?1:-1)*cc)}function xa(a,b){a.setMinutes(a.getMinutes()+b);return a}function Ka(a){a.setHours(0);a.setMinutes(0);a.setSeconds(0);a.setMilliseconds(0);return a}function N(a,b){if(b)return Ka(new Date(+a));return new Date(+a)}function zb(){var a=0,b;do b=new Date(1970, | |||
a++,1);while(b.getHours());return b}function Fa(a,b,e){for(b=b||1;!a.getDay()||e&&a.getDay()==1||!e&&a.getDay()==6;)ba(a,b);return a}function Ca(a,b){return Math.round((N(a,true)-N(b,true))/Ab)}function yb(a,b,e,d){if(b!==ma&&b!=a.getFullYear()){a.setDate(1);a.setMonth(0);a.setFullYear(b)}if(e!==ma&&e!=a.getMonth()){a.setDate(1);a.setMonth(e)}d!==ma&&a.setDate(d)}function kb(a,b){if(typeof a=="object")return a;if(typeof a=="number")return new Date(a*1E3);if(typeof a=="string"){if(a.match(/^\d+(\.\d+)?$/))return new Date(parseFloat(a)* | |||
1E3);if(b===ma)b=true;return Bb(a,b)||(a?new Date(a):null)}return null}function Bb(a,b){a=a.match(/^([0-9]{4})(-([0-9]{2})(-([0-9]{2})([T ]([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?(Z|(([-+])([0-9]{2})(:?([0-9]{2}))?))?)?)?)?$/);if(!a)return null;var e=new Date(a[1],0,1);if(b||!a[13]){b=new Date(a[1],0,1,9,0);if(a[3]){e.setMonth(a[3]-1);b.setMonth(a[3]-1)}if(a[5]){e.setDate(a[5]);b.setDate(a[5])}lb(e,b);a[7]&&e.setHours(a[7]);a[8]&&e.setMinutes(a[8]);a[10]&&e.setSeconds(a[10]);a[12]&&e.setMilliseconds(Number("0."+ | |||
a[12])*1E3);lb(e,b)}else{e.setUTCFullYear(a[1],a[3]?a[3]-1:0,a[5]||1);e.setUTCHours(a[7]||0,a[8]||0,a[10]||0,a[12]?Number("0."+a[12])*1E3:0);if(a[14]){b=Number(a[16])*60+(a[18]?Number(a[18]):0);b*=a[15]=="-"?1:-1;e=new Date(+e+b*60*1E3)}}return e}function mb(a){if(typeof a=="number")return a*60;if(typeof a=="object")return a.getHours()*60+a.getMinutes();if(a=a.match(/(\d+)(?::(\d+))?\s*(\w+)?/)){var b=parseInt(a[1],10);if(a[3]){b%=12;if(a[3].toLowerCase().charAt(0)=="p")b+=12}return b*60+(a[2]?parseInt(a[2], | |||
10):0)}}function Oa(a,b,e){return ib(a,null,b,e)}function ib(a,b,e,d){d=d||Ya;var f=a,g=b,l,j=e.length,t,y,S,Q="";for(l=0;l<j;l++){t=e.charAt(l);if(t=="'")for(y=l+1;y<j;y++){if(e.charAt(y)=="'"){if(f){Q+=y==l+1?"'":e.substring(l+1,y);l=y}break}}else if(t=="(")for(y=l+1;y<j;y++){if(e.charAt(y)==")"){l=Oa(f,e.substring(l+1,y),d);if(parseInt(l.replace(/\D/,""),10))Q+=l;l=y;break}}else if(t=="[")for(y=l+1;y<j;y++){if(e.charAt(y)=="]"){t=e.substring(l+1,y);l=Oa(f,t,d);if(l!=Oa(g,t,d))Q+=l;l=y;break}}else if(t== | |||
"{"){f=b;g=a}else if(t=="}"){f=a;g=b}else{for(y=j;y>l;y--)if(S=dc[e.substring(l,y)]){if(f)Q+=S(f,d);l=y-1;break}if(y==l)if(f)Q+=t}}return Q}function Ua(a){return a.end?ec(a.end,a.allDay):ba(N(a.start),1)}function ec(a,b){a=N(a);return b||a.getHours()||a.getMinutes()?ba(a,1):Ka(a)}function fc(a,b){return(b.msLength-a.msLength)*100+(a.event.start-b.event.start)}function Cb(a,b){return a.end>b.start&&a.start<b.end}function nb(a,b,e,d){var f=[],g,l=a.length,j,t,y,S,Q;for(g=0;g<l;g++){j=a[g];t=j.start; | |||
y=b[g];if(y>e&&t<d){if(t<e){t=N(e);S=false}else{t=t;S=true}if(y>d){y=N(d);Q=false}else{y=y;Q=true}f.push({event:j,start:t,end:y,isStart:S,isEnd:Q,msLength:y-t})}}return f.sort(fc)}function ob(a){var b=[],e,d=a.length,f,g,l,j;for(e=0;e<d;e++){f=a[e];for(g=0;;){l=false;if(b[g])for(j=0;j<b[g].length;j++)if(Cb(b[g][j],f)){l=true;break}if(l)g++;else break}if(b[g])b[g].push(f);else b[g]=[f]}return b}function Db(a,b,e){a.unbind("mouseover").mouseover(function(d){for(var f=d.target,g;f!=this;){g=f;f=f.parentNode}if((f= | |||
g._fci)!==ma){g._fci=ma;g=b[f];e(g.event,g.element,g);m(d.target).trigger(d)}d.stopPropagation()})}function Va(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.width(Math.max(0,b-pb(f,e)))}}function Eb(a,b,e){for(var d=0,f;d<a.length;d++){f=m(a[d]);f.height(Math.max(0,b-Sa(f,e)))}}function pb(a,b){return gc(a)+hc(a)+(b?ic(a):0)}function gc(a){return(parseFloat(m.curCSS(a[0],"paddingLeft",true))||0)+(parseFloat(m.curCSS(a[0],"paddingRight",true))||0)}function ic(a){return(parseFloat(m.curCSS(a[0], | |||
"marginLeft",true))||0)+(parseFloat(m.curCSS(a[0],"marginRight",true))||0)}function hc(a){return(parseFloat(m.curCSS(a[0],"borderLeftWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderRightWidth",true))||0)}function Sa(a,b){return jc(a)+kc(a)+(b?Fb(a):0)}function jc(a){return(parseFloat(m.curCSS(a[0],"paddingTop",true))||0)+(parseFloat(m.curCSS(a[0],"paddingBottom",true))||0)}function Fb(a){return(parseFloat(m.curCSS(a[0],"marginTop",true))||0)+(parseFloat(m.curCSS(a[0],"marginBottom",true))||0)} | |||
function kc(a){return(parseFloat(m.curCSS(a[0],"borderTopWidth",true))||0)+(parseFloat(m.curCSS(a[0],"borderBottomWidth",true))||0)}function Za(a,b){b=typeof b=="number"?b+"px":b;a.each(function(e,d){d.style.cssText+=";min-height:"+b+";_height:"+b})}function xb(){}function Gb(a,b){return a-b}function Hb(a){return Math.max.apply(Math,a)}function Pa(a){return(a<10?"0":"")+a}function jb(a,b){if(a[b]!==ma)return a[b];b=b.split(/(?=[A-Z])/);for(var e=b.length-1,d;e>=0;e--){d=a[b[e].toLowerCase()];if(d!== | |||
ma)return d}return a[""]}function Qa(a){return a.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,""").replace(/\n/g,"<br />")}function Ib(a){return a.id+"/"+a.className+"/"+a.style.cssText.replace(/(^|;)\s*(top|left|width|height)\s*:[^;]*/ig,"")}function qb(a){a.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})}function ab(a){a.children().removeClass("fc-first fc-last").filter(":first-child").addClass("fc-first").end().filter(":last-child").addClass("fc-last")} | |||
function rb(a,b){a.each(function(e,d){d.className=d.className.replace(/^fc-\w*/,"fc-"+lc[b.getDay()])})}function Jb(a,b){var e=a.source||{},d=a.color,f=e.color,g=b("eventColor"),l=a.backgroundColor||d||e.backgroundColor||f||b("eventBackgroundColor")||g;d=a.borderColor||d||e.borderColor||f||b("eventBorderColor")||g;a=a.textColor||e.textColor||b("eventTextColor");b=[];l&&b.push("background-color:"+l);d&&b.push("border-color:"+d);a&&b.push("color:"+a);return b.join(";")}function $a(a,b,e){if(m.isFunction(a))a= | |||
[a];if(a){var d,f;for(d=0;d<a.length;d++)f=a[d].apply(b,e)||f;return f}}function Ta(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==ma)return arguments[a]}function mc(a,b){function e(j,t){if(t){hb(j,t);j.setDate(1)}j=N(j,true);j.setDate(1);t=hb(N(j),1);var y=N(j),S=N(t),Q=f("firstDay"),q=f("weekends")?0:1;if(q){Fa(y);Fa(S,-1,true)}ba(y,-((y.getDay()-Math.max(Q,q)+7)%7));ba(S,(7-S.getDay()+Math.max(Q,q))%7);Q=Math.round((S-y)/(Ab*7));if(f("weekMode")=="fixed"){ba(S,(6-Q)*7);Q=6}d.title=l(j, | |||
f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(6,Q,q?5:7,true)}var d=this;d.render=e;sb.call(d,a,b,"month");var f=d.opt,g=d.renderBasic,l=b.formatDate}function nc(a,b){function e(j,t){t&&ba(j,t*7);j=ba(N(j),-((j.getDay()-f("firstDay")+7)%7));t=ba(N(j),7);var y=N(j),S=N(t),Q=f("weekends");if(!Q){Fa(y);Fa(S,-1,true)}d.title=l(y,ba(N(S),-1),f("titleFormat"));d.start=j;d.end=t;d.visStart=y;d.visEnd=S;g(1,1,Q?7:5,false)}var d=this;d.render=e;sb.call(d,a,b,"basicWeek");var f=d.opt,g=d.renderBasic, | |||
l=b.formatDates}function oc(a,b){function e(j,t){if(t){ba(j,t);f("weekends")||Fa(j,t<0?-1:1)}d.title=l(j,f("titleFormat"));d.start=d.visStart=N(j,true);d.end=d.visEnd=ba(N(d.start),1);g(1,1,1,false)}var d=this;d.render=e;sb.call(d,a,b,"basicDay");var f=d.opt,g=d.renderBasic,l=b.formatDate}function sb(a,b,e){function d(w,I,R,V){v=I;F=R;f();(I=!C)?g(w,V):z();l(I)}function f(){if(k=L("isRTL")){D=-1;Z=F-1}else{D=1;Z=0}ja=L("firstDay");ia=L("weekends")?0:1;la=L("theme")?"ui":"fc";$=L("columnFormat")}function g(w, | |||
I){var R,V=la+"-widget-header",ea=la+"-widget-content",aa;R="<table class='fc-border-separate' style='width:100%' cellspacing='0'><thead><tr>";for(aa=0;aa<F;aa++)R+="<th class='fc- "+V+"'/>";R+="</tr></thead><tbody>";for(aa=0;aa<w;aa++){R+="<tr class='fc-week"+aa+"'>";for(V=0;V<F;V++)R+="<td class='fc- "+ea+" fc-day"+(aa*F+V)+"'><div>"+(I?"<div class='fc-day-number'/>":"")+"<div class='fc-day-content'><div style='position:relative'> </div></div></div></td>";R+="</tr>"}R+="</tbody></table>";w= | |||
m(R).appendTo(a);K=w.find("thead");i=K.find("th");C=w.find("tbody");P=C.find("tr");E=C.find("td");B=E.filter(":first-child");n=P.eq(0).find("div.fc-day-content div");ab(K.add(K.find("tr")));ab(P);P.eq(0).addClass("fc-first");y(E);Y=m("<div style='position:absolute;z-index:8;top:0;left:0'/>").appendTo(a)}function l(w){var I=w||v==1,R=p.start.getMonth(),V=Ka(new Date),ea,aa,va;I&&i.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);ea.html(ya(aa,$));rb(ea,aa)});E.each(function(wa,Ga){ea=m(Ga);aa=ca(wa);aa.getMonth()== | |||
R?ea.removeClass("fc-other-month"):ea.addClass("fc-other-month");+aa==+V?ea.addClass(la+"-state-highlight fc-today"):ea.removeClass(la+"-state-highlight fc-today");ea.find("div.fc-day-number").text(aa.getDate());I&&rb(ea,aa)});P.each(function(wa,Ga){va=m(Ga);if(wa<v){va.show();wa==v-1?va.addClass("fc-last"):va.removeClass("fc-last")}else va.hide()})}function j(w){o=w;w=o-K.height();var I,R,V;if(L("weekMode")=="variable")I=R=Math.floor(w/(v==1?2:6));else{I=Math.floor(w/v);R=w-I*(v-1)}B.each(function(ea, | |||
aa){if(ea<v){V=m(aa);Za(V.find("> div"),(ea==v-1?R:I)-Sa(V))}})}function t(w){W=w;M.clear();s=Math.floor(W/F);Va(i.slice(0,-1),s)}function y(w){w.click(S).mousedown(X)}function S(w){if(!L("selectable")){var I=parseInt(this.className.match(/fc\-day(\d+)/)[1]);I=ca(I);c("dayClick",this,I,true,w)}}function Q(w,I,R){R&&r.build();R=N(p.visStart);for(var V=ba(N(R),F),ea=0;ea<v;ea++){var aa=new Date(Math.max(R,w)),va=new Date(Math.min(V,I));if(aa<va){var wa;if(k){wa=Ca(va,R)*D+Z+1;aa=Ca(aa,R)*D+Z+1}else{wa= | |||
Ca(aa,R);aa=Ca(va,R)}y(q(ea,wa,ea,aa-1))}ba(R,7);ba(V,7)}}function q(w,I,R,V){w=r.rect(w,I,R,V,a);return H(w,a)}function u(w){return N(w)}function fa(w,I){Q(w,ba(N(I),1),true)}function oa(){T()}function ga(w,I,R){var V=ua(w);c("dayClick",E[V.row*F+V.col],w,I,R)}function ra(w,I){J.start(function(R){T();R&&q(R.row,R.col,R.row,R.col)},I)}function sa(w,I,R){var V=J.stop();T();if(V){V=pa(V);c("drop",w,V,true,I,R)}}function ha(w){return N(w.start)}function da(w){return M.left(w)}function na(w){return M.right(w)} | |||
function ua(w){return{row:Math.floor(Ca(w,p.visStart)/7),col:ka(w.getDay())}}function pa(w){return U(w.row,w.col)}function U(w,I){return ba(N(p.visStart),w*7+I*D+Z)}function ca(w){return U(Math.floor(w/F),w%F)}function ka(w){return(w-Math.max(ja,ia)+F)%F*D+Z}function qa(w){return P.eq(w)}function G(){return{left:0,right:W}}var p=this;p.renderBasic=d;p.setHeight=j;p.setWidth=t;p.renderDayOverlay=Q;p.defaultSelectionEnd=u;p.renderSelection=fa;p.clearSelection=oa;p.reportDayClick=ga;p.dragStart=ra;p.dragStop= | |||
sa;p.defaultEventEnd=ha;p.getHoverListener=function(){return J};p.colContentLeft=da;p.colContentRight=na;p.dayOfWeekCol=ka;p.dateCell=ua;p.cellDate=pa;p.cellIsAllDay=function(){return true};p.allDayRow=qa;p.allDayBounds=G;p.getRowCnt=function(){return v};p.getColCnt=function(){return F};p.getColWidth=function(){return s};p.getDaySegmentContainer=function(){return Y};Kb.call(p,a,b,e);Lb.call(p);Mb.call(p);pc.call(p);var L=p.opt,c=p.trigger,z=p.clearEvents,H=p.renderOverlay,T=p.clearOverlays,X=p.daySelectionMousedown, | |||
ya=b. |