Autoría | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** @package atto_managefiles* @copyright 2014 Frédéric Massart* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*//*** @module moodle-atto-managefiles-button*//*** Atto text editor managefiles plugin.** @namespace M.atto_link* @class button* @extends M.editor_atto.EditorPlugin*/var LOGNAME = 'atto_managefiles',CAN_RECEIVE_FOCUS_SELECTOR = '.fp-navbar a:not([disabled])',FILE_MANAGER_SELECTOR = '#fitem_id_files_filemanager';Y.namespace('M.atto_managefiles').Button = Y.Base.create('button', Y.M.editor_atto.EditorPlugin, [], {/*** A reference to the current selection at the time that the dialogue* was opened.** @property _currentSelection* @type Range* @private*/_currentSelection: null,initializer: function() {if (this.get('disabled')) {return;}var host = this.get('host'),area = this.get('area'),options = host.get('filepickeroptions');if (options.image && options.image.itemid) {area.itemid = options.image.itemid;this.set('area', area);} else {Y.log('Plugin managefiles not available because itemid is missing.','warn', LOGNAME);return;}this.addButton({icon: 'e/manage_files',callback: this._displayDialogue});},/*** Display the manage files.** @method _displayDialogue* @private*/_displayDialogue: function(e) {e.preventDefault();var dialogue = this.getDialogue({headerContent: M.util.get_string('managefiles', LOGNAME),width: '800px',focusAfterHide: true});var iframe = Y.Node.create('<iframe></iframe>');// We set the height here because otherwise it is really small. That might not look// very nice on mobile devices, but we considered that enough for now.iframe.setStyles({height: '700px',border: 'none',width: '100%'});iframe.setAttribute('src', this._getIframeURL());// Focus on the first focusable element of the file manager after it is fully loaded.iframe.on('load', function(e, frame) {var fileManager = frame.getDOMNode().contentDocument.querySelector(FILE_MANAGER_SELECTOR);// The file manager component is loaded asynchronously after the page is loaded.// We check for the presence of .fm-loaded every 200 ms to determine if the file manager is loaded yet.var intervalId = setInterval(function() {if (fileManager.querySelector('.fm-loaded')) {var firstFocusableElement = fileManager.querySelector(CAN_RECEIVE_FOCUS_SELECTOR);if (firstFocusableElement) {firstFocusableElement.focus();}clearInterval(intervalId);}}, 200);}, this, iframe);dialogue.set('bodyContent', iframe).show();this.markUpdated();},/*** Returns the URL to the file manager.** @param _getIframeURL* @return {String} URL* @private*/_getIframeURL: function() {var args = Y.mix({elementid: this.get('host').get('elementid')},this.get('area'));return M.cfg.wwwroot + '/lib/editor/atto/plugins/managefiles/manage.php?' +Y.QueryString.stringify(args);}}, {ATTRS: {disabled: {value: true},area: {value: {}}}});