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/>./*** AMD module used when rearranging a custom certificate.** @module mod_customcert/rearrange-area* @copyright 2016 Mark Nelson <markn@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery', 'core/yui', 'core/fragment', 'mod_customcert/dialogue', 'core/notification','core/str', 'core/templates', 'core/ajax'],function($, Y, fragment, Dialogue, notification, str, template, ajax) {/*** RearrangeArea class.** @param {String} selector The rearrange PDF selector*/var RearrangeArea = function(selector) {this._node = $(selector);this._setEvents();};RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPLEFT = 0;RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPCENTER = 1;RearrangeArea.prototype.CUSTOMCERT_REF_POINT_TOPRIGHT = 2;RearrangeArea.prototype.PIXELSINMM = 3.779527559055;RearrangeArea.prototype._setEvents = function() {this._node.on('click', '.element', this._editElement.bind(this));};RearrangeArea.prototype._editElement = function(event) {var elementid = event.currentTarget.id.substr(8);var contextid = this._node.attr('data-contextid');var params = {'elementid': elementid};fragment.loadFragment('mod_customcert', 'editelement', contextid, params).done(function(html, js) {str.get_string('editelement', 'mod_customcert').done(function(title) {Y.use('moodle-core-formchangechecker', function() {new Dialogue(title,'<div id=\'elementcontent\'></div>',this._editElementDialogueConfig.bind(this, elementid, html, js),undefined,true);}.bind(this));}.bind(this));}.bind(this)).fail(notification.exception);};RearrangeArea.prototype._editElementDialogueConfig = function(elementid, html, js, popup) {// Place the content in the dialogue.template.replaceNode('#elementcontent', html, js);// We may have dragged the element changing it's position.// Ensure the form has the current up-to-date location.this._setPositionInForm(elementid);// Add events for when we save, close and cancel the page.var body = $(popup.getContent());body.on('click', '#id_submitbutton', function(e) {// Do not want to ask the user if they wish to stay on page after saving.M.core_formchangechecker.reset_form_dirty_state();// Save the data.this._saveElement(elementid).then(function() {// Update the DOM to reflect the adjusted value.this._getElementHTML(elementid).done(function(html) {var elementNode = this._node.find('#element-' + elementid);var refpoint = parseInt($('#id_refpoint').val());var refpointClass = '';if (refpoint == this.CUSTOMCERT_REF_POINT_TOPLEFT) {refpointClass = 'refpoint-left';} else if (refpoint == this.CUSTOMCERT_REF_POINT_TOPCENTER) {refpointClass = 'refpoint-center';} else if (refpoint == this.CUSTOMCERT_REF_POINT_TOPRIGHT) {refpointClass = 'refpoint-right';}elementNode.empty().append(html);// Update the ref point.elementNode.removeClass();elementNode.addClass('element ' + refpointClass);elementNode.attr('data-refpoint', refpoint);// Move the element.var posx = $('#editelementform #id_posx').val();var posy = $('#editelementform #id_posy').val();this._setPosition(elementid, refpoint, posx, posy);// All done.popup.close();}.bind(this));}.bind(this)).fail(notification.exception);e.preventDefault();}.bind(this));body.on('click', '#id_cancel', function(e) {popup.close();e.preventDefault();});};RearrangeArea.prototype._setPosition = function(elementid, refpoint, posx, posy) {var element = Y.one('#element-' + elementid);posx = Y.one('#pdf').getX() + posx * this.PIXELSINMM;posy = Y.one('#pdf').getY() + posy * this.PIXELSINMM;var nodewidth = parseFloat(element.getComputedStyle('width'));var maxwidth = element.width * this.PIXELSINMM;if (maxwidth && (nodewidth > maxwidth)) {nodewidth = maxwidth;}switch (refpoint) {case this.CUSTOMCERT_REF_POINT_TOPCENTER:posx -= nodewidth / 2;break;case this.CUSTOMCERT_REF_POINT_TOPRIGHT:posx = posx - nodewidth + 2;break;}element.setX(posx);element.setY(posy);};RearrangeArea.prototype._setPositionInForm = function(elementid) {var posxelement = $('#editelementform #id_posx');var posyelement = $('#editelementform #id_posy');if (posxelement.length && posyelement.length) {var element = Y.one('#element-' + elementid);var posx = element.getX() - Y.one('#pdf').getX();var posy = element.getY() - Y.one('#pdf').getY();var refpoint = parseInt(element.getData('refpoint'));var nodewidth = parseFloat(element.getComputedStyle('width'));switch (refpoint) {case this.CUSTOMCERT_REF_POINT_TOPCENTER:posx += nodewidth / 2;break;case this.CUSTOMCERT_REF_POINT_TOPRIGHT:posx += nodewidth;break;}posx = Math.round(parseFloat(posx / this.PIXELSINMM));posy = Math.round(parseFloat(posy / this.PIXELSINMM));posxelement.val(posx);posyelement.val(posy);}};RearrangeArea.prototype._getElementHTML = function(elementid) {// Get the variables we need.var templateid = this._node.attr('data-templateid');// Call the web service to get the updated element.var promises = ajax.call([{methodname: 'mod_customcert_get_element_html',args: {templateid: templateid,elementid: elementid}}]);// Return the promise.return promises[0];};RearrangeArea.prototype._saveElement = function(elementid) {// Get the variables we need.var templateid = this._node.attr('data-templateid');var inputs = $('#editelementform').serializeArray();// Call the web service to save the element.var promises = ajax.call([{methodname: 'mod_customcert_save_element',args: {templateid: templateid,elementid: elementid,values: inputs}}]);// Return the promise.return promises[0];};return {init: function(selector) {new RearrangeArea(selector);}};});