Sindbad~EG File Manager

Current Path : /var/www/html/ceade.tocsa.com.py/blocks/timeline/amd/build/
Upload File :
Current File : /var/www/html/ceade.tocsa.com.py/blocks/timeline/amd/build/event_list.min.js.map

{"version":3,"file":"event_list.min.js","sources":["../src/event_list.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * Javascript to load and render the list of calendar events for a\n * given day range.\n *\n * @module     block_timeline/event_list\n * @copyright  2016 Ryan Wyllie <ryan@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(\n[\n    'jquery',\n    'core/notification',\n    'core/templates',\n    'core/paged_content_factory',\n    'core/str',\n    'core/user_date',\n    'block_timeline/calendar_events_repository'\n],\nfunction(\n    $,\n    Notification,\n    Templates,\n    PagedContentFactory,\n    Str,\n    UserDate,\n    CalendarEventsRepository\n) {\n\n    var SECONDS_IN_DAY = 60 * 60 * 24;\n\n    var SELECTORS = {\n        EMPTY_MESSAGE: '[data-region=\"empty-message\"]',\n        ROOT: '[data-region=\"event-list-container\"]',\n        EVENT_LIST_CONTENT: '[data-region=\"event-list-content\"]',\n        EVENT_LIST_LOADING_PLACEHOLDER: '[data-region=\"event-list-loading-placeholder\"]',\n    };\n\n    var TEMPLATES = {\n        EVENT_LIST_CONTENT: 'block_timeline/event-list-content'\n    };\n\n    // We want the paged content controls below the paged content area\n    // and the controls should be ignored while data is loading.\n    var DEFAULT_PAGED_CONTENT_CONFIG = {\n        ignoreControlWhileLoading: true,\n        controlPlacementBottom: true,\n        ariaLabels: {\n            itemsperpagecomponents: 'ariaeventlistpagelimit, block_timeline',\n        }\n    };\n\n    /**\n     * Hide the content area and display the empty content message.\n     *\n     * @param {object} root The container element\n     */\n    var hideContent = function(root) {\n        root.find(SELECTORS.EVENT_LIST_CONTENT).addClass('hidden');\n        root.find(SELECTORS.EMPTY_MESSAGE).removeClass('hidden');\n    };\n\n    /**\n     * Show the content area and hide the empty content message.\n     *\n     * @param {object} root The container element\n     */\n    var showContent = function(root) {\n        root.find(SELECTORS.EVENT_LIST_CONTENT).removeClass('hidden');\n        root.find(SELECTORS.EMPTY_MESSAGE).addClass('hidden');\n    };\n\n    /**\n     * Empty the content area.\n     *\n     * @param {object} root The container element\n     */\n    var emptyContent = function(root) {\n        root.find(SELECTORS.EVENT_LIST_CONTENT).empty();\n    };\n\n    /**\n     * Construct the template context from a list of calendar events. The events\n     * are grouped by which day they are on. The day is calculated from the user's\n     * midnight timestamp to ensure that the calculation is timezone agnostic.\n     *\n     * The return data structure will look like:\n     * {\n     *      eventsbyday: [\n     *          {\n     *              dayTimestamp: 1533744000,\n     *              events: [\n     *                  { ...event 1 data... },\n     *                  { ...event 2 data... }\n     *              ]\n     *          },\n     *          {\n     *              dayTimestamp: 1533830400,\n     *              events: [\n     *                  { ...event 3 data... },\n     *                  { ...event 4 data... }\n     *              ]\n     *          }\n     *      ]\n     * }\n     *\n     * Each day timestamp is the day's midnight in the user's timezone.\n     *\n     * @param {array} calendarEvents List of calendar events\n     * @param {Number} midnight A timestamp representing midnight in the user's timezone\n     * @return {object}\n     */\n    var buildTemplateContext = function(calendarEvents, midnight) {\n        var eventsByDay = {};\n        var templateContext = {\n            eventsbyday: []\n        };\n\n        calendarEvents.forEach(function(calendarEvent) {\n            var dayTimestamp = calendarEvent.timeusermidnight;\n            if (eventsByDay[dayTimestamp]) {\n                eventsByDay[dayTimestamp].push(calendarEvent);\n            } else {\n                eventsByDay[dayTimestamp] = [calendarEvent];\n            }\n        });\n\n        Object.keys(eventsByDay).forEach(function(dayTimestamp) {\n            var events = eventsByDay[dayTimestamp];\n            templateContext.eventsbyday.push({\n                past: dayTimestamp < midnight,\n                dayTimestamp: dayTimestamp,\n                events: events\n            });\n        });\n\n        return templateContext;\n    };\n\n    /**\n     * Render the HTML for the given calendar events.\n     *\n     * @param {array} calendarEvents  A list of calendar events\n     * @param {Number} midnight A timestamp representing midnight for the user\n     * @return {promise} Resolved with HTML and JS strings.\n     */\n    var render = function(calendarEvents, midnight) {\n        var templateContext = buildTemplateContext(calendarEvents, midnight);\n        var templateName = TEMPLATES.EVENT_LIST_CONTENT;\n\n        return Templates.render(templateName, templateContext);\n    };\n\n    /**\n     * Retrieve a list of calendar events from the server for the given\n     * constraints.\n     *\n     * @param {Number} midnight The user's midnight time in unix timestamp.\n     * @param {Number} limit Limit the result set to this number of items\n     * @param {Number} daysOffset How many days (from midnight) to offset the results from\n     * @param {int|undefined} daysLimit How many dates (from midnight) to limit the result to\n     * @param {int|false} lastId The ID of the last seen event (if any)\n     * @param {int|undefined} courseId Course ID to restrict events to\n     * @return {Promise} A jquery promise\n     */\n    var load = function(midnight, limit, daysOffset, daysLimit, lastId, courseId) {\n        var startTime = midnight + (daysOffset * SECONDS_IN_DAY);\n        var endTime = daysLimit != undefined ? midnight + (daysLimit * SECONDS_IN_DAY) : false;\n\n        var args = {\n            starttime: startTime,\n            limit: limit,\n        };\n\n        if (lastId) {\n            args.aftereventid = lastId;\n        }\n\n        if (endTime) {\n            args.endtime = endTime;\n        }\n\n        if (courseId) {\n            // If we have a course id then we only want events from that course.\n            args.courseid = courseId;\n            return CalendarEventsRepository.queryByCourse(args);\n        } else {\n            // Otherwise we want events from any course.\n            return CalendarEventsRepository.queryByTime(args);\n        }\n    };\n\n    /**\n     * Handle a single page request from the paged content. Uses the given page data to request\n     * the events from the server.\n     *\n     * Checks the given preloadedPages before sending a request to the server to make sure we\n     * don't load data unnecessarily.\n     *\n     * @param {object} pageData A single page data (see core/paged_content_pages for more info).\n     * @param {object} actions Paged content actions (see core/paged_content_pages for more info).\n     * @param {Number} midnight The user's midnight time in unix timestamp.\n     * @param {object} lastIds The last event ID for each loaded page. Page number is key, id is value.\n     * @param {object} preloadedPages An object of preloaded page data. Page number as key, data promise as value.\n     * @param {int|undefined} courseId Course ID to restrict events to\n     * @param {Number} daysOffset How many days (from midnight) to offset the results from\n     * @param {int|undefined} daysLimit How many dates (from midnight) to limit the result to\n     * @return {object} jQuery promise resolved with calendar events.\n     */\n    var loadEventsFromPageData = function(\n        pageData,\n        actions,\n        midnight,\n        lastIds,\n        preloadedPages,\n        courseId,\n        daysOffset,\n        daysLimit\n    ) {\n        var pageNumber = pageData.pageNumber;\n        var limit = pageData.limit;\n        var lastPageNumber = pageNumber;\n\n        // This is here to protect us if, for some reason, the pages\n        // are loaded out of order somehow and we don't have a reference\n        // to the previous page. In that case, scan back to find the most\n        // recent page we've seen.\n        while (!lastIds.hasOwnProperty(lastPageNumber)) {\n            lastPageNumber--;\n        }\n        // Use the last id of the most recent page.\n        var lastId = lastIds[lastPageNumber];\n        var eventsPromise = null;\n\n        if (preloadedPages && preloadedPages.hasOwnProperty(pageNumber)) {\n            // This page has been preloaded so use that rather than load the values\n            // again.\n            eventsPromise = preloadedPages[pageNumber];\n        } else {\n            // Load one more than the given limit so that we can tell if there\n            // is more content to load after this.\n            eventsPromise = load(midnight, limit + 1, daysOffset, daysLimit, lastId, courseId);\n        }\n\n        return eventsPromise.then(function(result) {\n            if (!result.events.length) {\n                // If we didn't get any events back then tell the paged content\n                // that we're done loading.\n                actions.allItemsLoaded(pageNumber);\n                return [];\n            }\n\n            var calendarEvents = result.events.filter(function(event) {\n                if (event.eventtype == \"open\" || event.eventtype == \"opensubmission\") {\n                    var dayTimestamp = UserDate.getUserMidnightForTimestamp(event.timesort, midnight);\n                    return dayTimestamp > midnight;\n                }\n                return true;\n            });\n            // We expect to receive limit + 1 events back from the server.\n            // Any less means there are no more events to load.\n            var loadedAll = calendarEvents.length <= limit;\n\n            if (loadedAll) {\n                // Tell the pagination that everything is loaded.\n                actions.allItemsLoaded(pageNumber);\n            } else {\n                // Remove the last element from the array because it isn't\n                // needed in this result set.\n                calendarEvents.pop();\n            }\n\n            return calendarEvents;\n        });\n    };\n\n    /**\n     * Use the paged content factory to create a paged content element for showing\n     * the event list. We only provide a page limit to the factory because we don't\n     * know exactly how many pages we'll need. This creates a paging bar with just\n     * next/previous buttons.\n     *\n     * This function specifies the callback for loading the event data that the user\n     * is requesting.\n     *\n     * @param {int|array} pageLimit A single limit or list of limits as options for the paged content\n     * @param {object} preloadedPages An object of preloaded page data. Page number as key, data promise as value.\n     * @param {Number} midnight The user's midnight time in unix timestamp.\n     * @param {object} firstLoad A jQuery promise to be resolved after the first set of data is loaded.\n     * @param {int|undefined} courseId Course ID to restrict events to\n     * @param {Number} daysOffset How many days (from midnight) to offset the results from\n     * @param {int|undefined} daysLimit How many dates (from midnight) to limit the result to\n     * @param {string} paginationAriaLabel String to set as the aria label for the pagination bar.\n     * @param {object} additionalConfig Additional config options to pass to pagedContentFactory\n     * @return {object} jQuery promise.\n     */\n    var createPagedContent = function(\n        pageLimit,\n        preloadedPages,\n        midnight,\n        firstLoad,\n        courseId,\n        daysOffset,\n        daysLimit,\n        paginationAriaLabel,\n        additionalConfig\n    ) {\n        // Remember the last event id we loaded on each page because we can't\n        // use the offset value since the backend can skip events if the user doesn't\n        // have the capability to see them. Instead we load the next page of events\n        // based on the last seen event id.\n        var lastIds = {'1': 0};\n        var hasContent = false;\n        var config = $.extend({}, DEFAULT_PAGED_CONTENT_CONFIG, additionalConfig);\n\n        return Str.get_string(\n                'ariaeventlistpagelimit',\n                'block_timeline',\n                $.isArray(pageLimit) ? pageLimit[0].value : pageLimit\n            )\n            .then(function(string) {\n                config.ariaLabels.itemsperpage = string;\n                config.ariaLabels.paginationnav = paginationAriaLabel;\n                return string;\n            })\n            .then(function() {\n                return PagedContentFactory.createWithLimit(\n                    pageLimit,\n                    function(pagesData, actions) {\n                        var promises = [];\n\n                        pagesData.forEach(function(pageData) {\n                            var pageNumber = pageData.pageNumber;\n                            // Load the page data.\n                            var pagePromise = loadEventsFromPageData(\n                                pageData,\n                                actions,\n                                midnight,\n                                lastIds,\n                                preloadedPages,\n                                courseId,\n                                daysOffset,\n                                daysLimit\n                            ).then(function(calendarEvents) {\n                                if (calendarEvents.length) {\n                                    // Remember that we've loaded content.\n                                    hasContent = true;\n                                    // Remember the last id we've seen.\n                                    var lastEventId = calendarEvents[calendarEvents.length - 1].id;\n                                    // Record the id that the next page will need to start from.\n                                    lastIds[pageNumber + 1] = lastEventId;\n                                    // Get the HTML and JS for these calendar events.\n                                    return render(calendarEvents, midnight);\n                                } else {\n                                    return calendarEvents;\n                                }\n                            })\n                            .catch(Notification.exception);\n\n                            promises.push(pagePromise);\n                        });\n\n                        $.when.apply($, promises).then(function() {\n                            // Tell the calling code that the first page has been loaded\n                            // and whether it contains any content.\n                            firstLoad.resolve(hasContent);\n                            return;\n                        })\n                        .catch(function() {\n                            firstLoad.resolve(hasContent);\n                        });\n\n                        return promises;\n                    },\n                    config\n                );\n            });\n    };\n\n    /**\n     * Create a paged content region for the calendar events in the given root element.\n     * The content of the root element are replaced with a new paged content section\n     * each time this function is called.\n     *\n     * This function will be called each time the offset or limit values are changed to\n     * reload the event list region.\n     *\n     * @param {object} root The event list container element\n     * @param {int|array} pageLimit A single limit or list of limits as options for the paged content\n     * @param {object} preloadedPages An object of preloaded page data. Page number as key, data promise as value.\n     * @param {string} paginationAriaLabel String to set as the aria label for the pagination bar.\n     * @param {object} additionalConfig Additional config options to pass to pagedContentFactory\n     */\n    var init = function(root, pageLimit, preloadedPages, paginationAriaLabel, additionalConfig) {\n        root = $(root);\n\n        // Create a promise that will be resolved once the first set of page\n        // data has been loaded. This ensures that the loading placeholder isn't\n        // hidden until we have all of the data back to prevent the page elements\n        // jumping around.\n        var firstLoad = $.Deferred();\n        var eventListContent = root.find(SELECTORS.EVENT_LIST_CONTENT);\n        var loadingPlaceholder = root.find(SELECTORS.EVENT_LIST_LOADING_PLACEHOLDER);\n        var courseId = root.attr('data-course-id');\n        var daysOffset = parseInt(root.attr('data-days-offset'), 10);\n        var daysLimit = root.attr('data-days-limit');\n        var midnight = parseInt(root.attr('data-midnight'), 10);\n\n        // Make sure the content area and loading placeholder is visible.\n        // This is because the init function can be called to re-initialise\n        // an existing event list area.\n        emptyContent(root);\n        showContent(root);\n        loadingPlaceholder.removeClass('hidden');\n\n        // Days limit isn't mandatory.\n        if (daysLimit != undefined) {\n            daysLimit = parseInt(daysLimit, 10);\n        }\n\n        // Created the paged content element.\n        return createPagedContent(pageLimit, preloadedPages, midnight, firstLoad, courseId, daysOffset, daysLimit,\n                paginationAriaLabel, additionalConfig)\n            .then(function(html, js) {\n                html = $(html);\n                // Hide the content for now.\n                html.addClass('hidden');\n                // Replace existing elements with the newly created paged content.\n                // If we're reinitialising an existing event list this will replace\n                // the old event list (including removing any event handlers).\n                Templates.replaceNodeContents(eventListContent, html, js);\n\n                firstLoad.then(function(hasContent) {\n                    // Prevent changing page elements too much by only showing the content\n                    // once we've loaded some data for the first time. This allows our\n                    // fancy loading placeholder to shine.\n                    html.removeClass('hidden');\n                    loadingPlaceholder.addClass('hidden');\n\n                    if (!hasContent) {\n                        // If we didn't get any data then show the empty data message.\n                        hideContent(root);\n                    }\n\n                    return hasContent;\n                })\n                .catch(function() {\n                    return false;\n                });\n\n                return html;\n            })\n            .catch(Notification.exception);\n    };\n\n    return {\n        init: init,\n        rootSelector: SELECTORS.ROOT,\n    };\n});\n"],"names":["define","$","Notification","Templates","PagedContentFactory","Str","UserDate","CalendarEventsRepository","SELECTORS","TEMPLATES","DEFAULT_PAGED_CONTENT_CONFIG","ignoreControlWhileLoading","controlPlacementBottom","ariaLabels","itemsperpagecomponents","render","calendarEvents","midnight","templateContext","eventsByDay","eventsbyday","forEach","calendarEvent","dayTimestamp","timeusermidnight","push","Object","keys","events","past","buildTemplateContext","templateName","loadEventsFromPageData","pageData","actions","lastIds","preloadedPages","courseId","daysOffset","daysLimit","pageNumber","limit","lastPageNumber","hasOwnProperty","lastId","eventsPromise","endTime","undefined","args","starttime","aftereventid","endtime","courseid","queryByCourse","queryByTime","load","then","result","length","allItemsLoaded","filter","event","eventtype","getUserMidnightForTimestamp","timesort","pop","init","root","pageLimit","paginationAriaLabel","additionalConfig","firstLoad","Deferred","eventListContent","find","loadingPlaceholder","attr","parseInt","empty","emptyContent","removeClass","addClass","showContent","hasContent","config","extend","get_string","isArray","value","string","itemsperpage","paginationnav","createWithLimit","pagesData","promises","pagePromise","lastEventId","id","catch","exception","when","apply","resolve","createPagedContent","html","js","replaceNodeContents","hideContent","rootSelector"],"mappings":"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"}

Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists