[SPIP] v3.2.1-->v3.2.3
[lhc/web/www.git] / www / plugins-dist / organiseur / lib / fullcalendar / gcal.js
index ab8e88f..bddcd1f 100644 (file)
 /*!
- * FullCalendar v3.5.1 Google Calendar Plugin
+ * FullCalendar v3.9.0
  * Docs & License: https://fullcalendar.io/
- * (c) 2017 Adam Shaw
+ * (c) 2018 Adam Shaw
  */
-
-(function(factory) {
-       if (typeof define === 'function' && define.amd) {
-               define([ 'jquery' ], factory);
-       }
-       else if (typeof exports === 'object') { // Node/CommonJS
-               module.exports = factory(require('jquery'));
-       }
-       else {
-               factory(jQuery);
-       }
-})(function($) {
-
-
-var FC = $.fullCalendar;
-var Promise = FC.Promise;
-var EventSource = FC.EventSource;
-var JsonFeedEventSource = FC.JsonFeedEventSource;
-var EventSourceParser = FC.EventSourceParser;
-var applyAll = FC.applyAll;
-
-;;
-
-var GcalEventSource = EventSource.extend({
-
-       // TODO: eventually remove "googleCalendar" prefix (API-breaking)
-       googleCalendarApiKey: null,
-       googleCalendarId: null,
-       googleCalendarError: null, // optional function
-       ajaxSettings: null,
-
-
-       fetch: function(start, end, timezone) {
-               var _this = this;
-               var url = this.buildUrl();
-               var requestParams = this.buildRequestParams(start, end, timezone);
-               var ajaxSettings = this.ajaxSettings;
-               var onSuccess = ajaxSettings.success;
-
-               if (!requestParams) { // could have failed
-                       return Promise.reject();
-               }
-
-               return Promise.construct(function(onResolve, onReject) {
-                       $.ajax($.extend(
-                               {}, // destination
-                               JsonFeedEventSource.AJAX_DEFAULTS,
-                               ajaxSettings,
-                               {
-                                       url: url,
-                                       data: requestParams,
-                                       success: function(responseData) {
-                                               var rawEventDefs;
-                                               var successRes;
-
-                                               if (responseData.error) {
-                                                       _this.reportError('Google Calendar API: ' + responseData.error.message, responseData.error.errors);
-                                                       onReject();
-                                               }
-                                               else if (responseData.items) {
-                                                       rawEventDefs = _this.gcalItemsToRawEventDefs(
-                                                               responseData.items,
-                                                               requestParams.timeZone
-                                                       );
-
-                                                       successRes = applyAll(
-                                                               onSuccess,
-                                                               this, // forward `this`
-                                                               // call the success handler(s) and allow it to return a new events array
-                                                               [ rawEventDefs ].concat(Array.prototype.slice.call(arguments, 1))
-                                                       );
-
-                                                       if ($.isArray(successRes)) {
-                                                               rawEventDefs = successRes;
-                                                       }
-
-                                                       onResolve(_this.parseEventDefs(rawEventDefs));
-                                               }
-                                       }
-                               }
-                       ));
-               });
-       },
-
-
-       gcalItemsToRawEventDefs: function(items, gcalTimezone) {
-               var _this = this;
-
-               return items.map(function(item) {
-                       return _this.gcalItemToRawEventDef(item, gcalTimezone);
-               });
-       },
-
-
-       gcalItemToRawEventDef: function(item, gcalTimezone) {
-               var url = item.htmlLink || null;
-
-               // make the URLs for each event show times in the correct timezone
-               if (url && gcalTimezone) {
-                       url = injectQsComponent(url, 'ctz=' + gcalTimezone);
-               }
-
-               return {
-                       id: item.id,
-                       title: item.summary,
-                       start: item.start.dateTime || item.start.date, // try timed. will fall back to all-day
-                       end: item.end.dateTime || item.end.date, // same
-                       url: url,
-                       location: item.location,
-                       description: item.description
-               };
-       },
-
-
-       buildUrl: function() {
-               return GcalEventSource.API_BASE + '/' +
-                       encodeURIComponent(this.googleCalendarId) +
-                       '/events?callback=?'; // jsonp
-       },
-
-
-       buildRequestParams: function(start, end, timezone) {
-               var apiKey = this.googleCalendarApiKey || this.calendar.opt('googleCalendarApiKey');
-               var params;
-
-               if (!apiKey) {
-                       this.reportError("Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/");
-                       return null;
-               }
-
-               // The API expects an ISO8601 datetime with a time and timezone part.
-               // Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each
-               // side, guaranteeing we will receive all events in the desired range, albeit a superset.
-               // .utc() will set a zone and give it a 00:00:00 time.
-               if (!start.hasZone()) {
-                       start = start.clone().utc().add(-1, 'day');
-               }
-               if (!end.hasZone()) {
-                       end = end.clone().utc().add(1, 'day');
-               }
-
-               params = $.extend(
-                       this.ajaxSettings.data || {},
-                       {
-                               key: apiKey,
-                               timeMin: start.format(),
-                               timeMax: end.format(),
-                               singleEvents: true,
-                               maxResults: 9999
-                       }
-               );
-
-               if (timezone && timezone !== 'local') {
-                       // when sending timezone names to Google, only accepts underscores, not spaces
-                       params.timeZone = timezone.replace(' ', '_');
-               }
-
-               return params;
-       },
-
-
-       reportError: function(message, apiErrorObjs) {
-               var calendar = this.calendar;
-               var calendarOnError = calendar.opt('googleCalendarError');
-               var errorObjs = apiErrorObjs || [ { message: message } ]; // to be passed into error handlers
-
-               if (this.googleCalendarError) {
-                       this.googleCalendarError.apply(calendar, errorObjs);
-               }
-
-               if (calendarOnError) {
-                       calendarOnError.apply(calendar, errorObjs);
-               }
-
-               // print error to debug console
-               FC.warn.apply(null, [ message ].concat(apiErrorObjs || []));
-       },
-
-
-       getPrimitive: function() {
-               return this.googleCalendarId;
-       },
-
-
-       applyManualRawProps: function(rawProps) {
-               var superSuccess = EventSource.prototype.applyManualRawProps.apply(this, arguments);
-               var googleCalendarId = rawProps.googleCalendarId;
-
-               if (googleCalendarId == null && rawProps.url) {
-                       googleCalendarId = parseGoogleCalendarId(rawProps.url);
-               }
-
-               if (googleCalendarId != null) {
-                       this.googleCalendarId = googleCalendarId;
-
-                       return superSuccess;
-               }
-
-               return false;
-       },
-
-
-       applyOtherRawProps: function(rawProps) {
-               this.ajaxSettings = rawProps;
-       }
-
-});
-
-
-GcalEventSource.API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';
-
-
-GcalEventSource.allowRawProps({
-       // manually process...
-       url: false,
-       googleCalendarId: false,
-
-       // automatically transfer...
-       googleCalendarApiKey: true,
-       googleCalendarError: true
-});
-
-
-GcalEventSource.parse = function(rawInput, calendar) {
-       var rawProps;
-
-       if (typeof rawInput === 'object') { // long form. might fail in applyManualRawProps
-               rawProps = rawInput;
-       }
-       else if (typeof rawInput === 'string') { // short form
-               rawProps = { url: rawInput }; // url will be parsed with parseGoogleCalendarId
-       }
-
-       if (rawProps) {
-               return EventSource.parse.call(this, rawProps, calendar);
-       }
-
-       return false;
-};
-
-
-function parseGoogleCalendarId(url) {
-       var match;
-
-       // detect if the ID was specified as a single string.
-       // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.
-       if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {
-               return url;
-       }
-       // try to scrape it out of a V1 or V3 API feed URL
-       else if (
-               (match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||
-               (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))
-       ) {
-               return decodeURIComponent(match[1]);
-       }
-}
-
-
-// Injects a string like "arg=value" into the querystring of a URL
-function injectQsComponent(url, component) {
-       // inject it after the querystring but before the fragment
-       return url.replace(/(\?.*?)?(#|$)/, function(whole, qs, hash) {
-               return (qs ? qs + '&' : '?') + component + hash;
-       });
-}
-
-
-// expose
-
-EventSourceParser.registerClass(GcalEventSource);
-
-FC.GcalEventSource = GcalEventSource;
-
-;;
-
-});
+(function webpackUniversalModuleDefinition(root, factory) {
+       if(typeof exports === 'object' && typeof module === 'object')
+               module.exports = factory(require("fullcalendar"), require("jquery"));
+       else if(typeof define === 'function' && define.amd)
+               define(["fullcalendar", "jquery"], factory);
+       else if(typeof exports === 'object')
+               factory(require("fullcalendar"), require("jquery"));
+       else
+               factory(root["FullCalendar"], root["jQuery"]);
+})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_3__) {
+return /******/ (function(modules) { // webpackBootstrap
+/******/       // The module cache
+/******/       var installedModules = {};
+/******/
+/******/       // The require function
+/******/       function __webpack_require__(moduleId) {
+/******/
+/******/               // Check if module is in cache
+/******/               if(installedModules[moduleId]) {
+/******/                       return installedModules[moduleId].exports;
+/******/               }
+/******/               // Create a new module (and put it into the cache)
+/******/               var module = installedModules[moduleId] = {
+/******/                       i: moduleId,
+/******/                       l: false,
+/******/                       exports: {}
+/******/               };
+/******/
+/******/               // Execute the module function
+/******/               modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/               // Flag the module as loaded
+/******/               module.l = true;
+/******/
+/******/               // Return the exports of the module
+/******/               return module.exports;
+/******/       }
+/******/
+/******/
+/******/       // expose the modules object (__webpack_modules__)
+/******/       __webpack_require__.m = modules;
+/******/
+/******/       // expose the module cache
+/******/       __webpack_require__.c = installedModules;
+/******/
+/******/       // define getter function for harmony exports
+/******/       __webpack_require__.d = function(exports, name, getter) {
+/******/               if(!__webpack_require__.o(exports, name)) {
+/******/                       Object.defineProperty(exports, name, {
+/******/                               configurable: false,
+/******/                               enumerable: true,
+/******/                               get: getter
+/******/                       });
+/******/               }
+/******/       };
+/******/
+/******/       // getDefaultExport function for compatibility with non-harmony modules
+/******/       __webpack_require__.n = function(module) {
+/******/               var getter = module && module.__esModule ?
+/******/                       function getDefault() { return module['default']; } :
+/******/                       function getModuleExports() { return module; };
+/******/               __webpack_require__.d(getter, 'a', getter);
+/******/               return getter;
+/******/       };
+/******/
+/******/       // Object.prototype.hasOwnProperty.call
+/******/       __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/       // __webpack_public_path__
+/******/       __webpack_require__.p = "";
+/******/
+/******/       // Load entry module and return exports
+/******/       return __webpack_require__(__webpack_require__.s = 266);
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ 1:
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
+
+/***/ }),
+
+/***/ 2:
+/***/ (function(module, exports) {
+
+/*\r
+derived from:\r
+https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r
+
+only include the helpers we need, to keep down filesize\r
+*/\r
+var extendStatics = Object.setPrototypeOf ||\r
+    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r
+    function (d, b) { for (var p in b)\r
+        if (b.hasOwnProperty(p))\r
+            d[p] = b[p]; };\r
+exports.__extends = function (d, b) {\r
+    extendStatics(d, b);\r
+    function __() { this.constructor = d; }\r
+    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r
+};\r
+
+
+/***/ }),
+
+/***/ 266:
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });\r
+var exportHooks = __webpack_require__(1);\r
+var GcalEventSource_1 = __webpack_require__(267);\r
+exportHooks.EventSourceParser.registerClass(GcalEventSource_1.default);\r
+exportHooks.GcalEventSource = GcalEventSource_1.default;\r
+
+
+/***/ }),
+
+/***/ 267:
+/***/ (function(module, exports, __webpack_require__) {
+
+Object.defineProperty(exports, "__esModule", { value: true });\r
+var tslib_1 = __webpack_require__(2);\r
+var $ = __webpack_require__(3);\r
+var fullcalendar_1 = __webpack_require__(1);\r
+var GcalEventSource = /** @class */ (function (_super) {\r
+    tslib_1.__extends(GcalEventSource, _super);\r
+    function GcalEventSource() {\r
+        return _super !== null && _super.apply(this, arguments) || this;\r
+    }\r
+    GcalEventSource.parse = function (rawInput, calendar) {\r
+        var rawProps;\r
+        if (typeof rawInput === 'object') {\r
+            rawProps = rawInput;\r
+        }\r
+        else if (typeof rawInput === 'string') {\r
+            rawProps = { url: rawInput }; // url will be parsed with parseGoogleCalendarId\r
+        }\r
+        if (rawProps) {\r
+            return fullcalendar_1.EventSource.parse.call(this, rawProps, calendar);\r
+        }\r
+        return false;\r
+    };\r
+    GcalEventSource.prototype.fetch = function (start, end, timezone) {\r
+        var _this = this;\r
+        var url = this.buildUrl();\r
+        var requestParams = this.buildRequestParams(start, end, timezone);\r
+        var ajaxSettings = this.ajaxSettings || {};\r
+        var onSuccess = ajaxSettings.success;\r
+        if (!requestParams) {\r
+            return fullcalendar_1.Promise.reject();\r
+        }\r
+        this.calendar.pushLoading();\r
+        return fullcalendar_1.Promise.construct(function (onResolve, onReject) {\r
+            $.ajax($.extend({}, // destination\r
+            fullcalendar_1.JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r
+                url: url,\r
+                data: requestParams,\r
+                success: function (responseData, status, xhr) {\r
+                    var rawEventDefs;\r
+                    var successRes;\r
+                    _this.calendar.popLoading();\r
+                    if (responseData.error) {\r
+                        _this.reportError('Google Calendar API: ' + responseData.error.message, responseData.error.errors);\r
+                        onReject();\r
+                    }\r
+                    else if (responseData.items) {\r
+                        rawEventDefs = _this.gcalItemsToRawEventDefs(responseData.items, requestParams.timeZone);\r
+                        successRes = fullcalendar_1.applyAll(onSuccess, _this, [responseData, status, xhr]); // passthru\r
+                        if ($.isArray(successRes)) {\r
+                            rawEventDefs = successRes;\r
+                        }\r
+                        onResolve(_this.parseEventDefs(rawEventDefs));\r
+                    }\r
+                },\r
+                error: function (xhr, statusText, errorThrown) {\r
+                    _this.reportError('Google Calendar network failure: ' + statusText, [xhr, errorThrown]);\r
+                    _this.calendar.popLoading();\r
+                    onReject();\r
+                }\r
+            }));\r
+        });\r
+    };\r
+    GcalEventSource.prototype.gcalItemsToRawEventDefs = function (items, gcalTimezone) {\r
+        var _this = this;\r
+        return items.map(function (item) {\r
+            return _this.gcalItemToRawEventDef(item, gcalTimezone);\r
+        });\r
+    };\r
+    GcalEventSource.prototype.gcalItemToRawEventDef = function (item, gcalTimezone) {\r
+        var url = item.htmlLink || null;\r
+        // make the URLs for each event show times in the correct timezone\r
+        if (url && gcalTimezone) {\r
+            url = injectQsComponent(url, 'ctz=' + gcalTimezone);\r
+        }\r
+        return {\r
+            id: item.id,\r
+            title: item.summary,\r
+            start: item.start.dateTime || item.start.date,\r
+            end: item.end.dateTime || item.end.date,\r
+            url: url,\r
+            location: item.location,\r
+            description: item.description\r
+        };\r
+    };\r
+    GcalEventSource.prototype.buildUrl = function () {\r
+        return GcalEventSource.API_BASE + '/' +\r
+            encodeURIComponent(this.googleCalendarId) +\r
+            '/events?callback=?'; // jsonp\r
+    };\r
+    GcalEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r
+        var apiKey = this.googleCalendarApiKey || this.calendar.opt('googleCalendarApiKey');\r
+        var params;\r
+        if (!apiKey) {\r
+            this.reportError('Specify a googleCalendarApiKey. See http://fullcalendar.io/docs/google_calendar/');\r
+            return null;\r
+        }\r
+        // The API expects an ISO8601 datetime with a time and timezone part.\r
+        // Since the calendar's timezone offset isn't always known, request the date in UTC and pad it by a day on each\r
+        // side, guaranteeing we will receive all events in the desired range, albeit a superset.\r
+        // .utc() will set a zone and give it a 00:00:00 time.\r
+        if (!start.hasZone()) {\r
+            start = start.clone().utc().add(-1, 'day');\r
+        }\r
+        if (!end.hasZone()) {\r
+            end = end.clone().utc().add(1, 'day');\r
+        }\r
+        params = $.extend(this.ajaxSettings.data || {}, {\r
+            key: apiKey,\r
+            timeMin: start.format(),\r
+            timeMax: end.format(),\r
+            singleEvents: true,\r
+            maxResults: 9999\r
+        });\r
+        if (timezone && timezone !== 'local') {\r
+            // when sending timezone names to Google, only accepts underscores, not spaces\r
+            params.timeZone = timezone.replace(' ', '_');\r
+        }\r
+        return params;\r
+    };\r
+    GcalEventSource.prototype.reportError = function (message, apiErrorObjs) {\r
+        var calendar = this.calendar;\r
+        var calendarOnError = calendar.opt('googleCalendarError');\r
+        var errorObjs = apiErrorObjs || [{ message: message }]; // to be passed into error handlers\r
+        if (this.googleCalendarError) {\r
+            this.googleCalendarError.apply(calendar, errorObjs);\r
+        }\r
+        if (calendarOnError) {\r
+            calendarOnError.apply(calendar, errorObjs);\r
+        }\r
+        // print error to debug console\r
+        fullcalendar_1.warn.apply(null, [message].concat(apiErrorObjs || []));\r
+    };\r
+    GcalEventSource.prototype.getPrimitive = function () {\r
+        return this.googleCalendarId;\r
+    };\r
+    GcalEventSource.prototype.applyManualStandardProps = function (rawProps) {\r
+        var superSuccess = fullcalendar_1.EventSource.prototype.applyManualStandardProps.apply(this, arguments);\r
+        var googleCalendarId = rawProps.googleCalendarId;\r
+        if (googleCalendarId == null && rawProps.url) {\r
+            googleCalendarId = parseGoogleCalendarId(rawProps.url);\r
+        }\r
+        if (googleCalendarId != null) {\r
+            this.googleCalendarId = googleCalendarId;\r
+            return superSuccess;\r
+        }\r
+        return false;\r
+    };\r
+    GcalEventSource.prototype.applyMiscProps = function (rawProps) {\r
+        if (!this.ajaxSettings) {\r
+            this.ajaxSettings = {};\r
+        }\r
+        $.extend(this.ajaxSettings, rawProps);\r
+    };\r
+    GcalEventSource.API_BASE = 'https://www.googleapis.com/calendar/v3/calendars';\r
+    return GcalEventSource;\r
+}(fullcalendar_1.EventSource));\r
+exports.default = GcalEventSource;\r
+GcalEventSource.defineStandardProps({\r
+    // manually process...\r
+    url: false,\r
+    googleCalendarId: false,\r
+    // automatically transfer...\r
+    googleCalendarApiKey: true,\r
+    googleCalendarError: true\r
+});\r
+function parseGoogleCalendarId(url) {\r
+    var match;\r
+    // detect if the ID was specified as a single string.\r
+    // will match calendars like "asdf1234@calendar.google.com" in addition to person email calendars.\r
+    if (/^[^\/]+@([^\/\.]+\.)*(google|googlemail|gmail)\.com$/.test(url)) {\r
+        return url;\r
+    }\r
+    else if ((match = /^https:\/\/www.googleapis.com\/calendar\/v3\/calendars\/([^\/]*)/.exec(url)) ||\r
+        (match = /^https?:\/\/www.google.com\/calendar\/feeds\/([^\/]*)/.exec(url))) {\r
+        return decodeURIComponent(match[1]);\r
+    }\r
+}\r
+// Injects a string like "arg=value" into the querystring of a URL\r
+function injectQsComponent(url, component) {\r
+    // inject it after the querystring but before the fragment\r
+    return url.replace(/(\?.*?)?(#|$)/, function (whole, qs, hash) {\r
+        return (qs ? qs + '&' : '?') + component + hash;\r
+    });\r
+}\r
+
+
+/***/ }),
+
+/***/ 3:
+/***/ (function(module, exports) {
+
+module.exports = __WEBPACK_EXTERNAL_MODULE_3__;
+
+/***/ })
+
+/******/ });
+});
\ No newline at end of file