summaryrefslogtreecommitdiff
path: root/plugins/Calendar/Assets/calendar.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Calendar/Assets/calendar.js')
-rw-r--r--plugins/Calendar/Assets/calendar.js81
1 files changed, 81 insertions, 0 deletions
diff --git a/plugins/Calendar/Assets/calendar.js b/plugins/Calendar/Assets/calendar.js
new file mode 100644
index 00000000..7c26c095
--- /dev/null
+++ b/plugins/Calendar/Assets/calendar.js
@@ -0,0 +1,81 @@
+KB.component('calendar', function (containerElement, options) {
+ var modeMapping = {
+ month: 'month',
+ week: 'agendaWeek',
+ day: 'agendaDay'
+ };
+
+ this.render = function () {
+ var calendar = $(containerElement);
+ var mode = 'month';
+ if (window.location.hash) { // Check if hash contains mode
+ var hashMode = window.location.hash.substr(1);
+ mode = modeMapping[hashMode] || mode;
+ }
+
+ calendar.fullCalendar({
+ locale: $("body").data("js-lang"),
+ editable: true,
+ eventLimit: true,
+ defaultView: mode,
+ header: {
+ left: 'prev,next today',
+ center: 'title',
+ right: 'month,agendaWeek,agendaDay'
+ },
+ eventDrop: function(event) {
+ $.ajax({
+ cache: false,
+ url: options.saveUrl,
+ contentType: "application/json",
+ type: "POST",
+ processData: false,
+ data: JSON.stringify({
+ "task_id": event.id,
+ "date_due": event.start.format()
+ })
+ });
+ },
+ viewRender: function(view) {
+ // Map view.name back and update location.hash
+ for (var id in modeMapping) {
+ if (modeMapping[id] === view.name) { // Found
+ window.location.hash = id;
+ break;
+ }
+ }
+ var url = options.checkUrl;
+ var params = {
+ "start": calendar.fullCalendar('getView').start.format(),
+ "end": calendar.fullCalendar('getView').end.format()
+ };
+
+ for (var key in params) {
+ url += "&" + key + "=" + params[key];
+ }
+
+ $.getJSON(url, function(events) {
+ calendar.fullCalendar('removeEvents');
+ calendar.fullCalendar('addEventSource', events);
+ calendar.fullCalendar('rerenderEvents');
+ });
+ }
+ });
+ };
+});
+
+KB.on('dom.ready', function () {
+ function goToLink (selector) {
+ if (! KB.modal.isOpen()) {
+ var element = KB.find(selector);
+
+ if (element !== null) {
+ window.location = element.attr('href');
+ }
+ }
+ }
+
+ KB.onKey('v+c', function () {
+ goToLink('a.view-calendar');
+ });
+});