Autoría | Ultima modificación | Ver Log |
define(['jquery', 'core/yui', 'core/str', 'core/config', 'core/notification', 'core/modal_factory'], function($, Y, str, config, notification, ModalFactory) {var CONFIG;var NODES = {DELETE_ICON: '<span class="delete">❌</span>',};var SELECTORS = {cesa_notes_BASE: '#cesa_notes_base',cesa_notes_OPENER: '.cesa_notes-opener',cesa_notes_LISTS: '.cesa_notes_list',};var CSS = {cesa_notes_BASE: 'cesa_notes_base',cesa_notes_OPENER: 'cesa_notes-opener',cesa_notes_LISTS: 'cesa_notes_list',};var panel = null;var initnotes = null;var strdeletenote = M.util.get_string('deletecesa_notes', 'block_cesa_notes');var getcesa_notesValidatedUrl = function(baseurl) {var a = document.createElement('a');a.href = baseurl;return (a.search.length > 0) ? baseurl : baseurl + '?';};var cesa_notes = { /** @alias module:blocks/cesa_notes */getcesa_notesValidatedUrl: function(baseurl) {var a = document.createElement('a');a.href = baseurl;return (a.search.length > 0) ? baseurl : baseurl + '?';},/** Validation for textarea input text*/getWarnings: function(status) {if (status == false) {$('#addmynote-label-' + CONFIG.instanceid + ' span.warning').html(CONFIG.maxallowedcharacters_warning);} else {var ta = $('#id_mynotecontent-' + CONFIG.instanceid);if (ta.val() == '') {$('#addmynote-label-' + CONFIG.instanceid + ' span.warning').html('');} else {var cl = CONFIG.maxallowedcharacters - ta.val().length;$('#addmynote-label-' + CONFIG.instanceid + ' span.warning').html(M.util.get_string('charactersleft', 'block_cesa_notes') + cl);}}},checkInputText: function() {var ta = $('#id_mynotecontent-' + CONFIG.instanceid);if (ta.val().length <= CONFIG.maxallowedcharacters) {$('#addmynote_submit').removeAttr('disabled', '');return true;} else {$('#addmynote_submit').attr('disabled', 'disabled');return false;}return true;},toggle_textarea: function(e) {var ta = $('#id_mynotecontent-' + CONFIG.instanceid);if (!ta) {return false;}var focus = (e.type == 'focusin');if (focus) {if (ta.val() == M.util.get_string('placeholdercontent', 'block_cesa_notes')) {ta.val('');$('.textarea').css('border-color', 'black');}} else{if (ta.val() == '') {ta.val(M.util.get_string('placeholdercontent', 'block_cesa_notes'));$('.textarea').css('border-color', 'gray');$('#addmynote-label-' + CONFIG.instanceid + ' span.warning').html('');}}},request: function(args) {var params = {};var scope = this;if (args['scope']) {scope = args['scope'];}params['contextarea'] = scope.currenttab.replace(CONFIG.prefix, '');params['contextarea'] = params['contextarea'].replace('#', '');if (args.params) {for (i in args.params) {params[i] = args.params[i];}}params['sesskey'] = M.cfg.sesskey;var cfg = {method: 'POST',on: {start: function() {//'<div class="mdl-align"><img src="'+M.util.image_url('i/loading', 'core')+'" /></div>';},complete: function(id,o,p) {if (!o) {alert('IO FATAL');return false;}var data = Y.JSON.parse(o.responseText);if (data.error) {if (data.error == 'require_login') {args.callback(id,data,p);return true;}alert(data.error);return false;} else {args.callback(id,data,p);return true;}}},arguments: {scope: scope},headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'},data: build_querystring(params)};if (args.form) {cfg.form = args.form;}Y.io(this.api, cfg);},printcesa_notes: function(e) {e.preventDefault();let note_content_input = $('#id_mynotecontent-' + CONFIG.instanceid);;let arg = {action: 'print'}note_content_input.attr('disabled', true);note_content_input.css({'backgroundImage': 'url(' + M.util.image_url('i/loading_small', 'core') + ')','backgroundRepeat': 'no-repeat','backgroundPosition': 'center center'});this.request({params: arg,callback: function(id, ret, args) {$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('disabled');$('#id_mynotecontent-' + CONFIG.instanceid).css({backgroundImage: ''});}});},savecesa_notes: function(e) {e.preventDefault();var scope = this;if (scope.checkInputText() == false) {return false;}var ta = $('#id_mynotecontent-' + CONFIG.instanceid);if (ta.val() == "" || ta.val() == M.util.get_string('placeholdercontent', 'block_cesa_notes')) {return false;}let editingNoteId = ta.attr('data-editnoteid') ? ta.attr('data-editnoteid').replace('mynote-'+ CONFIG.instanceid + '-', '') : false;var arg = {contextid: CONFIG.contextid,content: ta.val(),action: editingNoteId? 'edit': 'add',contextarea: scope.currenttabindex,noteurl: window.location.href,noteToEditIt: editingNoteId};ta.attr('disabled', true);ta.css({'backgroundImage': 'url(' + M.util.image_url('i/loading_small', 'core') + ')','backgroundRepeat': 'no-repeat','backgroundPosition': 'center center'});this.request({params: arg,callback: function(id, ret, args) {if (!ret.notes) {return false;}$('#addmynote-label-' + CONFIG.instanceid + ' span.warning').html('');$('#id_mynotecontent-' + CONFIG.instanceid).val(M.util.get_string('placeholdercontent', 'block_cesa_notes'));$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('disabled');$('#id_mynotecontent-' + CONFIG.instanceid).css({backgroundImage: ''});if (scope.currenttab != scope.defaulttab) {scope.currenttab = scope.defaulttab;var tab = scope.currenttab.replace('#', '#tab-');$(SELECTORS.cesa_notes_BASE + ' ul.tabs-menu li').removeClass("current");$(SELECTORS.cesa_notes_BASE + ' ' + tab).addClass('current');$(SELECTORS.cesa_notes_BASE + ' .tab-content').has(scope.currenttab).addClass('current');$(SELECTORS.cesa_notes_BASE + ' .tab-content').not(scope.currenttab).css("display", "none");$(SELECTORS.cesa_notes_BASE + ' ' + scope.currenttab + '.tab-content').css("display", "block");}scope.addToList(ret, 'add');scope.displaycesa_notes();$(SELECTORS.cesa_notes_BASE).find('.responsetext').html(M.util.get_string('savedsuccess', 'block_cesa_notes'));$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('data-editnoteid');$('.j-delete-cesa-note').removeClass('show_delete_note_btn');}});},addToList: function(notesobj, action='') {var scope = this;var el = $(SELECTORS.cesa_notes_BASE).find(scope.currenttab + '-list');console.log(el);if (action == 'add') {console.log(notesobj.notes)el.prepend(scope.rendercesa_notes(notesobj.notes));} else {el.append(scope.rendercesa_notes(notesobj.notes));$(el).find('li').sort(sort_li) // sort elements.appendTo(el); // append again to the list// sort function callbackfunction sort_li(a, b){return ($(b).data('itemid')) > ($(a).data('itemid')) ? 1 : -1;}}$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('notes-count', notesobj.count);},getcesa_notes: function(page=0) {var scope = this;page = parseInt(page);var el = $(SELECTORS.cesa_notes_BASE).find(scope.currenttab + '-list');var notescount = el.find('li').length;var lastpage = Math.ceil(notescount / CONFIG.perpage);if (notescount > 0 && lastpage > page) {scope.displaycesa_notes();return false;}var arg = {contextid: CONFIG.contextid,action: 'get',page: page,};this.request({params: arg,callback: function(id, ret, args) {scope.addToList(ret);scope.displaycesa_notes();}});},updatecesa_notesInfo: function(cesa_notescount, page) {page = parseInt(page);cesa_notescount = parseInt(cesa_notescount);var scope = this;var paging = '';if (cesa_notescount > CONFIG.perpage) {var pagenum = page - 1;var prevlink = '';var nextlink = '';if (page > 0) {prevlink = scope.createLink(pagenum, M.util.get_string('previouspage', 'block_cesa_notes'), 'previous');}if (CONFIG.perpage > 0) {var lastpage = Math.ceil(cesa_notescount / CONFIG.perpage);} else {var lastpage = 1;}// Uncomment this line if you want to display page number//paging += '<span class="current-page">' + (page + 1) + '</span>';pagenum = page + 1;if (pagenum != lastpage) {nextlink = scope.createLink(pagenum, M.util.get_string('nextpage', 'block_cesa_notes'), 'next');}paging = prevlink;if (prevlink != '' && nextlink != '') {paging += '<span class="separator"></span>';}paging += nextlink;paging = '<span class="paging">' + paging + '</span>';}var noteinfo = $(SELECTORS.cesa_notes_BASE).find(scope.currenttab);if (cesa_notescount > 0) {noteinfo.find('.count').html(M.util.get_string('cesa_notescount', 'block_cesa_notes') + '' + cesa_notescount);} else {noteinfo.find('.count').html(M.util.get_string('nothingtodisplay', 'block_cesa_notes'));}noteinfo.find('.cesa_notes-paging').html(paging);},/** Render notes as html ul li element*/rendercesa_notes: function(notes) {if (notes.length < 1) {return false;}var lists = '';var x = '';for (x in notes) {$('#mynote-'+ CONFIG.instanceid + '-' + notes[x].id).remove();var deletelink = '<a href="#" id="mynote-delete-' + CONFIG.instanceid + '-' + notes[x].id + '" class="mynote-delete" title="'+ strdeletenote +'">'+ NODES.DELETE_ICON +'</a>';var notedetail = '';var userdate = '<span class="time">' + notes[x].timecreated + '</span>';if (notes[x].coursename != '') {notedetail = '<div class="note-detail">' + notes[x].coursename + ' - ' + userdate +'</div>';} else {notedetail = '<div class="note-detail">'+ userdate +'</div>';}var note_html = '<div class="content" data-noteid="mynote-'+ CONFIG.instanceid + '-' + notes[x].id +'">' + notes[x].content + '</div>';var note_edit_btn = '<button class="j-cesa-note-content-edit">Editar</button>'lists += '<li id="mynote-' + CONFIG.instanceid + '-' + notes[x].id + '" data-itemid="' + notes[x].id + '">' + note_edit_btn + note_html + notedetail + '</li>';}return lists;},createLink: function(page, text, classname) {var classattribute = (typeof(classname) != 'undefined') ? ' class="'+classname+'"' : '';return '<a href="' + this.api + '&page=' + page + '"' + classattribute + '>' + text + '</a>';},displaycesa_notes: function() {var scope = this;var page = parseInt($(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('onpage'));var cesa_notescount = parseInt($(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('notes-count'));var el = $(SELECTORS.cesa_notes_BASE).find(' ' + scope.currenttab + '-list');var notescount = el.find('li').length;var lastpage = Math.ceil(notescount / CONFIG.perpage);if (notescount > 0 && lastpage <= page) {page = lastpage - 1;}var upperlimit = page * CONFIG.perpage + CONFIG.perpage;var lowerlimit = page * CONFIG.perpage;el.find('li').css('display', 'none');el.find('li').each(function(i, el) {if (i>=lowerlimit && i<upperlimit) {$(el).css('display', 'block');}});scope.updatecesa_notesInfo(cesa_notescount, page);//panel.centerDialogue();},registerActions: function() {var scope = this;$('body').delegate('#addmynote_cancel', 'click', function() {panel.hide()});$('body').delegate('.j-cesa-note-content-edit', 'click', function() {let noteText = $(this).parent().find('.text_to_html').text();let textArea = $('.cesa_notes_base .textarea textarea');let deleteButton = $('.j-delete-cesa-note');deleteButton.addClass('show_delete_note_btn');textArea.attr('data-editnoteid', $(this).parent().find('.content').attr('data-noteid'));textArea.val(noteText);});$('body').delegate('.modal_cesa_notes_root .modal-header button.close', 'click', function(e) {$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('data-editnoteid');$('#id_mynotecontent-' + CONFIG.instanceid).val('');$('.j-delete-cesa-note').removeClass('show_delete_note_btn');$('#cesa_notes_delete_modal').removeClass('show_delete_modal');});$('body').delegate('#cesa_notes_modal_cancel_delete', 'click', function(e) {$('#cesa_notes_delete_modal').removeClass('show_delete_modal');});$('body').delegate('#cesa_notes_modal_accept_delete', 'click', function(e) {var nid = $('#id_mynotecontent-' + CONFIG.instanceid).attr('data-editnoteid');if (nid != '' || nid != 'undefined') {var notescount = $(SELECTORS.cesa_notes_BASE).find(SELECTORS.cesa_notes_LISTS + '-' + scope.currenttab + ' > li').length;var id = nid.replace('mynote-'+ CONFIG.instanceid + '-', '');var arg = {contextid: CONFIG.contextid,action: 'delete',noteid: id,lastnotecounts: notescount,};scope.request({params: arg,callback: function(id, ret, args) {args.scope.addToList(ret);$('#mynote-'+ CONFIG.instanceid + '-' + ret.noteid).remove();$('.j-delete-cesa-note').removeClass('show_delete_note_btn');$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('data-editnoteid');$('#id_mynotecontent-' + CONFIG.instanceid).val('');$('#cesa_notes_delete_modal').removeClass('show_delete_modal');args.scope.displaycesa_notes();}});}});$('body').delegate('#addmynote_submit', 'click', function(e) {scope.savecesa_notes(e)});//$('body').delegate('#cesa_notes_print', 'click', function(e) {scope.printcesa_notes(e)});$('body').delegate(SELECTORS.cesa_notes_BASE + ' ul.tabs-menu li', 'click', function(e) {$(this).addClass("current");$(this).siblings().removeClass("current");var tab = $(this).attr("id").replace('tab-', '');$(SELECTORS.cesa_notes_BASE + ' .tab-content').not('#' + tab).css("display", "none");$(SELECTORS.cesa_notes_BASE + ' #' + tab + '.tab-content').css("display", "block");scope.currenttab = '#'+tab;var isloaded = $(scope.currenttab).attr('data-loaded');if (typeof isloaded == 'undefined' || isloaded == false) {$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('data-loaded', "true");scope.getcesa_notes(0);}});$('body').delegate('#id_mynotecontent-' + CONFIG.instanceid, 'focus blur', function(e) {scope.toggle_textarea(e);});$('body').delegate('#id_mynotecontent-' + CONFIG.instanceid, 'change keypress keyup', function(e) {scope.getWarnings(scope.checkInputText());});$('body').delegate(SELECTORS.cesa_notes_BASE + ' .cesa_notes-paging .paging a', 'click', function(e) {e.preventDefault();var regex = new RegExp(/[\?&]page=(\d+)/);var results = regex.exec($(this).attr('href'));var page = 0;if (results[1]) {page = results[1];}$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('onpage', parseInt(page));scope.getcesa_notes(page);});$('body').delegate(SELECTORS.cesa_notes_BASE + ' .j-delete-cesa-note', 'click', function(e) {e.preventDefault();var nid = $('#id_mynotecontent-' + CONFIG.instanceid).attr('data-editnoteid');if (nid != '' || nid != 'undefined') {let deleteModal = $('#cesa_notes_delete_modal');deleteModal.addClass('show_delete_modal');}})$('body').delegate(SELECTORS.cesa_notes_BASE + ' a.mynote-delete', 'click', function(e) {e.preventDefault();$('#id_mynotecontent-' + CONFIG.instanceid).removeAttr('data-editnoteid');var nid = $(this).attr('id');if (nid != '' || nid != 'undefined') {var notescount = $(SELECTORS.cesa_notes_BASE).find(SELECTORS.cesa_notes_LISTS + '-' + scope.currenttab + ' > li').length;var id = nid.replace('mynote-delete-'+ CONFIG.instanceid + '-', '');var arg = {contextid: CONFIG.contextid,action: 'delete',noteid: id,lastnotecounts: notescount,};scope.request({params: arg,callback: function(id, ret, args) {args.scope.addToList(ret);$('#mynote-'+ CONFIG.instanceid + '-' + ret.noteid).remove();args.scope.displaycesa_notes();}});}});},displayDialogue: function(e) {var scope = cesa_notes;if (panel === null) {str.get_strings([{key : 'cesa_notes', component : 'block_cesa_notes'},{key : 'characterlimit', component : 'block_cesa_notes'},{key : 'save', component : 'block_cesa_notes'},{key : 'cancel'},{key : 'cesa_notessavedundertab', component : 'block_cesa_notes', param: CONFIG.contextareas[scope.currenttabindex]},{key : 'placeholdercontent', component : 'block_cesa_notes'}]).done(function(s) {// Create basic tab structurelet deleteModal = `<div id="cesa_notes_delete_modal"><div class="cesa_notes_delete_modal_content"><p>¿Estás seguro de que quieres eliminar este apunte?</p><button id="cesa_notes_modal_cancel_delete">Cancelar</button><button id="cesa_notes_modal_accept_delete">Eliminar</button></div></div>`;var el = $('<div></div>').append($('<div id="' + CSS.cesa_notes_BASE + '" class="' + CSS.cesa_notes_BASE + '">'+ deleteModal +'</div>').append('<div class="inputarea"><div class="responsetext"></div><div class="cesa-notes-limit" id="addmynote-label-' + CONFIG.instanceid + '">' + s[1] + ' ' + CONFIG.maxallowedcharacters + '<span class="warning"></span></div>' +'<div class="textarea"><textarea id="id_mynotecontent-' + CONFIG.instanceid + '" name="mynotecontent" rows="2">' + s[5] + '</textarea></div>' +'<p class="notesavedhint">' + s[4] + '</p>' +'<p class="cesa_notes_buttons_container"><button class="j-delete-cesa-note">Eliminar</button><input type="submit" id="addmynote_submit"/> </p>' +'<p class="cesa_note_bottom_container"><a class="cesa_notes_print" target="_blank" href="'+ CONFIG.printapi +'">Imprimir notas</a> </p>'+'</div>').append($('<ul class="tabs-menu"></ul>')).append($('<div class="tab"></div>')));el.find('#addmynote_submit').attr('value', s[2]);el.find('#addmynote_cancel').attr('value', s[3]);var tabsmenu = '';var tabcontents = '';var i = '';for (i in CONFIG.contextareas) {if (scope.currenttabindex == i) {tabsmenu += '<li class="current" id="tab-' + CONFIG.prefix + i + '"><div class="menu-item">' + CONFIG.contextareas[i] + '</div></li>';} else {tabsmenu += '<li class="" id="tab-' + CONFIG.prefix + i + '"><div class="menu-item">' + CONFIG.contextareas[i] + '</div></li>';}tabcontents += '<div class="tab-content" id="' + CONFIG.prefix + i + '" onpage="0" notes-count="0">'+ '<div class="notes-info"><div class="cesa_notes-paging"></div><div class="count"></div></div>'+ '<ul id="' + CONFIG.prefix + i + '-list" class="cesa_notes_lists"></ul>'+ '</div>';}el.find('.tabs-menu').append(tabsmenu);el.find('.tab').append($(tabcontents));ModalFactory.create({title: s[0],body: el.html(),}).then(function (modal) {if (initnotes === null) {initnotes = true;// Get initial notesscope.getcesa_notes(0);$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('data-loaded', "true");$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).css('display', 'block');}let root = modal.getRoot();root.addClass('modal_cesa_notes_root');panel = modal;panel.show();scope.registerActions();});/*if (initnotes === null) {initnotes = true;// Get initial notesscope.getcesa_notes(0);$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('data-loaded', "true");$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).css('display', 'block');}panel.show();*//*Y.use('moodle-core-notification-dialogue', function() {// TODO: CESA_NOTES Cambiar esto para que no use yui sino https://docs.moodle.org/dev/AMD_Modalpanel = new M.core.dialogue({draggable: true,modal: true,closeButton: true,headerContent: M.util.get_string('cesa_notes', 'block_cesa_notes'),responsive: true,classname: 'testing'});panel.set('bodyContent', el.html());if (initnotes === null) {initnotes = true;// Get initial notesscope.getcesa_notes(0);$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).attr('data-loaded', "true");$(SELECTORS.cesa_notes_BASE).find(scope.currenttab).css('display', 'block');}panel.show();});*///scope.registerActions();});} else {panel.show();}},/*** Initialize cesa_notes* @access public* @param {int} instanceid* @param {int} contextid* @param {int} maxallowedcharacters* @param {int} perpage* @param {string} editingicon_pos* @param {bool} editing* @param {string} adminurl* @param {array} contextareas* @param {string} currenttabindex*/init: function(args) {CONFIG = args;CONFIG.prefix = 'cesa_notes_';CONFIG.printapi = this.getcesa_notesValidatedUrl(M.cfg.wwwroot+'/blocks/cesa_notes/cesa_notes_print.php');this.perpage = parseInt(CONFIG.perpage);this.currenttab = '#cesa_notes_' + args.currenttabindex;this.defaulttab = '#cesa_notes_' + args.currenttabindex;this.currenttabindex = args.currenttabindex;this.api = this.getcesa_notesValidatedUrl(M.cfg.wwwroot+'/blocks/cesa_notes/cesa_notes_ajax.php');var strtitle = M.util.get_string('showcesa_notes', 'block_cesa_notes');if (!CONFIG.editing) {var handler = $('<div class="'+ CSS.cesa_notes_OPENER +'" title="' + strtitle + '" alt="' + strtitle+ '">' + M.util.get_string('cesa_notes', 'block_cesa_notes') + '</div>');handler.addClass(CONFIG.editingicon_pos);$('body').append(handler);handler.html('<span class="pencil">✍</span>');} else {var handler = $('<div class="'+ CSS.cesa_notes_OPENER +'" title="' + strtitle + '" alt="' + strtitle+ '">' + M.util.get_string('cesa_notes', 'block_cesa_notes') + '</div>');handler.addClass(CONFIG.editingicon_pos);handler.html('<span class="pencil">✍</span>');$('.inline-'+ CSS.cesa_notes_OPENER).html(handler);$('.inline-'+ CSS.cesa_notes_OPENER).append('<div class="cesa_notes-pos-inline-text '+ CSS.cesa_notes_OPENER +'">' + strtitle + '</div>');}var body = $('body');body.delegate(SELECTORS.cesa_notes_OPENER, 'click', this.displayDialogue);}};return cesa_notes;});