Merge branch 'MDL-59784-master' of git://github.com/andrewnicols/moodle

This commit is contained in:
Eloy Lafuente (stronk7) 2017-08-22 12:28:32 +02:00
commit faa509dfb2
6 changed files with 88 additions and 38 deletions

View file

@ -1 +1 @@
define(["jquery","core/modal_factory","core/templates","core/str","core/notification"],function(a,b,c,d,e){return{init:function(f){var g=a("[data-key=addblock]");d.get_string("addblock").done(function(e){var h=[];a.each(f.blocks,function(a,b){h[h.length]={key:"pluginname",component:"block_"+b}});var i=[];d.get_strings(h).done(function(d){a.each(d,function(a,b){i[i.length]={name:f.blocks[a],title:b}}),f.blocks=i,b.create({title:e,body:c.render("core/add_block_body",f),type:"CANCEL"},g)})}).fail(e.exception)}}}); define(["jquery","core/modal_factory","core/templates","core/str","core/notification"],function(a,b,c,d,e){return{init:function(f){var g=a("[data-key=addblock]"),h=f.blocks.map(function(a){return{key:"pluginname",component:"block_"+a}}),i=d.get_strings(h).then(function(a){return a.map(function(a,b){return{name:f.blocks[b],title:a}})}).then(function(a){return f.blocks=a,c.render("core/add_block_body",f)}).fail(e.exception),j=d.get_string("addblock").fail(e.exception);b.create({title:j,body:i,type:"CANCEL"},g)}}});

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
define(["jquery","core/modal_events","core/modal_registry","core/modal","core/modal_save_cancel","core/modal_confirm","core/modal_cancel","core/templates","core/notification","core/custom_interaction_events"],function(a,b,c,d,e,f,g,h,i,j){var k={DEFAULT:"core/modal",SAVE_CANCEL:"core/modal_save_cancel",CONFIRM:"core/modal_confirm",CANCEL:"core/modal_cancel"},l={DEFAULT:"DEFAULT",SAVE_CANCEL:"SAVE_CANCEL",CONFIRM:"CONFIRM",CANCEL:"CANCEL"};c.register(l.DEFAULT,d,k.DEFAULT),c.register(l.SAVE_CANCEL,e,k.SAVE_CANCEL),c.register(l.CONFIRM,f,k.CONFIRM),c.register(l.CANCEL,g,k.CANCEL);var m=function(a,c){if("undefined"!=typeof c){if(Array.isArray(c)){var d=c[1];c=c[0],j.define(c,[j.events.activate]),c.on(j.events.activate,d,function(b,c){a.show(),c.originalEvent.preventDefault()})}else j.define(c,[j.events.activate]),c.on(j.events.activate,function(b,c){a.show(),c.originalEvent.preventDefault()});a.getRoot().on(b.hidden,function(){c.focus()})}},n=function(b,c,d){c=a(c);var e=b.module,f=new e(c);return m(f,d),f},o=function(b,c,d){var e=b.template;return h.render(e,c).then(function(c){var e=a(c);return n(b,e,d)}).fail(i.exception)},p=function(a,b){var d=a.type||l.DEFAULT,e=!!a.large,f=null,g={};return f=c.get(d),f||i.exception({message:"Unable to find modal of type: "+d}),"undefined"!=typeof a.templateContext&&(g=a.templateContext),o(f,g,b).then(function(b){return"undefined"!=typeof a.title&&b.setTitle(a.title),"undefined"!=typeof a.body&&b.setBody(a.body),"undefined"!=typeof a.footer&&b.setFooter(a.footer),e&&b.setLarge(),b})};return{create:p,types:l}}); define(["jquery","core/modal_events","core/modal_registry","core/modal","core/modal_save_cancel","core/modal_confirm","core/modal_cancel","core/templates","core/notification","core/custom_interaction_events"],function(a,b,c,d,e,f,g,h,i,j){var k={DEFAULT:"core/modal",SAVE_CANCEL:"core/modal_save_cancel",CONFIRM:"core/modal_confirm",CANCEL:"core/modal_cancel"},l={DEFAULT:"DEFAULT",SAVE_CANCEL:"SAVE_CANCEL",CONFIRM:"CONFIRM",CANCEL:"CANCEL"};c.register(l.DEFAULT,d,k.DEFAULT),c.register(l.SAVE_CANCEL,e,k.SAVE_CANCEL),c.register(l.CONFIRM,f,k.CONFIRM),c.register(l.CANCEL,g,k.CANCEL);var m=function(a,c){if("undefined"!=typeof c){if(Array.isArray(c)){var d=c[1];c=c[0],j.define(c,[j.events.activate]),c.on(j.events.activate,d,function(b,c){a.then(function(a){return a.show(),a}),c.originalEvent.preventDefault()})}else j.define(c,[j.events.activate]),c.on(j.events.activate,function(b,c){a.then(function(a){return a.show(),a}),c.originalEvent.preventDefault()});a.then(function(a){return a.getRoot().on(b.hidden,function(){c.focus()}),a})}},n=function(b,c){c=a(c);var d=b.module,e=new d(c);return e},o=function(b,c,d){var e=b.template,f=h.render(e,c).then(function(c){var d=a(c);return n(b,d)}).fail(i.exception);return m(f,d),f},p=function(a,b){var d=a.type||l.DEFAULT,e=!!a.large,f=null,g={};return f=c.get(d),f||i.exception({message:"Unable to find modal of type: "+d}),"undefined"!=typeof a.templateContext&&(g=a.templateContext),o(f,g,b).then(function(b){return"undefined"!=typeof a.title&&b.setTitle(a.title),"undefined"!=typeof a.body&&b.setBody(a.body),"undefined"!=typeof a.footer&&b.setFooter(a.footer),e&&b.setLarge(),b})};return{create:p,types:l}});

View file

@ -37,28 +37,36 @@ define(['jquery', 'core/modal_factory', 'core/templates', 'core/str', 'core/noti
var addblocklink = $('[data-key=addblock]'); var addblocklink = $('[data-key=addblock]');
// We need the fetch the names of the blocks. It was too much to send in the page. // We need the fetch the names of the blocks. It was too much to send in the page.
Str.get_string('addblock').done(function(title) { var titlerequests = context.blocks.map(function(blockName) {
return {
key: 'pluginname',
component: 'block_' + blockName,
};
});
var titlerequests = []; var bodyPromise = Str.get_strings(titlerequests)
$.each(context.blocks, function(index, key) { .then(function(titles) {
titlerequests[titlerequests.length] = {key: 'pluginname', component: 'block_' + key}; return titles.map(function(title, index) {
}); return {
name: context.blocks[index],
var blocks = [];
Str.get_strings(titlerequests).done(function(titles) {
$.each(titles, function(index, title) {
blocks[blocks.length] = {name: context.blocks[index], title: title};
});
context.blocks = blocks;
ModalFactory.create({
title: title, title: title,
body: Templates.render('core/add_block_body', context), };
type: 'CANCEL',
}, addblocklink);
}); });
}).fail(Notification.exception); })
.then(function(blocks) {
context.blocks = blocks;
return Templates.render('core/add_block_body', context);
})
.fail(Notification.exception);
var titlePromise = Str.get_string('addblock')
.fail(Notification.exception);
ModalFactory.create({
title: titlePromise,
body: bodyPromise,
type: 'CANCEL',
}, addblocklink);
} }
}; };
}); });

View file

@ -215,23 +215,26 @@ define(['jquery', 'core/templates', 'core/notification', 'core/key_codes',
/** /**
* Set the modal title element. * Set the modal title element.
* *
* This method is overloaded to take either a string value for the title or a jQuery promise that is resolved with
* HTML most commonly from a Str.get_string call.
*
* @method setTitle * @method setTitle
* @param {string} value The title string * @param {(string|object)} value The title string or jQuery promise which resolves to the title.
*/ */
Modal.prototype.setTitle = function(value) { Modal.prototype.setTitle = function(value) {
var title = this.getTitle(); var title = this.getTitle();
title.html(value);
this.asyncSet(value, title.html.bind(title));
}; };
/** /**
* Set the modal body element. * Set the modal body element.
* *
* This method is overloaded to take either a string * This method is overloaded to take either a string value for the body or a jQuery promise that is resolved with
* value for the body or a jQuery promise that is resolved with HTML and Javascript * HTML and Javascript most commonly from a Templates.render call.
* most commonly from a Templates.render call.
* *
* @method setBody * @method setBody
* @param {(string|object)} value The body string or jQuery promise * @param {(string|object)} value The body string or jQuery promise which resolves to the body.
*/ */
Modal.prototype.setBody = function(value) { Modal.prototype.setBody = function(value) {
var body = this.getBody(); var body = this.getBody();
@ -595,5 +598,29 @@ define(['jquery', 'core/templates', 'core/notification', 'core/key_codes',
}.bind(this)); }.bind(this));
}; };
/**
* Set or resolve and set the value using the function.
*
* @method asyncSet
* @param {(string|object)} value The string or jQuery promise.
* @param {function} setFunction The setter
* @return {Promise}
*/
Modal.prototype.asyncSet = function(value, setFunction) {
var p = value;
if (typeof value === 'string') {
p = $.Deferred();
p.resolve(value);
}
p.then(function(content) {
setFunction(content);
return;
});
return p;
};
return Modal; return Modal;
}); });

View file

@ -55,10 +55,10 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
* is closed. * is closed.
* *
* @method setUpTrigger * @method setUpTrigger
* @param {object} modal The modal instance * @param {Promise} modalPromise The modal instance
* @param {object} triggerElement The jQuery element to open the modal * @param {object} triggerElement The jQuery element to open the modal
*/ */
var setUpTrigger = function(modal, triggerElement) { var setUpTrigger = function(modalPromise, triggerElement) {
if (typeof triggerElement != 'undefined') { if (typeof triggerElement != 'undefined') {
if (Array.isArray(triggerElement)) { if (Array.isArray(triggerElement)) {
var selector = triggerElement[1]; var selector = triggerElement[1];
@ -66,19 +66,31 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
CustomEvents.define(triggerElement, [CustomEvents.events.activate]); CustomEvents.define(triggerElement, [CustomEvents.events.activate]);
triggerElement.on(CustomEvents.events.activate, selector, function(e, data) { triggerElement.on(CustomEvents.events.activate, selector, function(e, data) {
modal.show(); modalPromise.then(function(modal) {
modal.show();
return modal;
});
data.originalEvent.preventDefault(); data.originalEvent.preventDefault();
}); });
} else { } else {
CustomEvents.define(triggerElement, [CustomEvents.events.activate]); CustomEvents.define(triggerElement, [CustomEvents.events.activate]);
triggerElement.on(CustomEvents.events.activate, function(e, data) { triggerElement.on(CustomEvents.events.activate, function(e, data) {
modal.show(); modalPromise.then(function(modal) {
modal.show();
return modal;
});
data.originalEvent.preventDefault(); data.originalEvent.preventDefault();
}); });
} }
modal.getRoot().on(ModalEvents.hidden, function() { modalPromise.then(function(modal) {
triggerElement.focus(); modal.getRoot().on(ModalEvents.hidden, function() {
triggerElement.focus();
});
return modal;
}); });
} }
}; };
@ -93,11 +105,10 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
* @param {object} triggerElement The trigger HTML jQuery object * @param {object} triggerElement The trigger HTML jQuery object
* @return {object} Modal instance * @return {object} Modal instance
*/ */
var createFromElement = function(registryConf, modalElement, triggerElement) { var createFromElement = function(registryConf, modalElement) {
modalElement = $(modalElement); modalElement = $(modalElement);
var module = registryConf.module; var module = registryConf.module;
var modal = new module(modalElement); var modal = new module(modalElement);
setUpTrigger(modal, triggerElement);
return modal; return modal;
}; };
@ -115,12 +126,16 @@ define(['jquery', 'core/modal_events', 'core/modal_registry', 'core/modal',
var createFromType = function(registryConf, templateContext, triggerElement) { var createFromType = function(registryConf, templateContext, triggerElement) {
var templateName = registryConf.template; var templateName = registryConf.template;
return Templates.render(templateName, templateContext) var modalPromise = Templates.render(templateName, templateContext)
.then(function(html) { .then(function(html) {
var modalElement = $(html); var modalElement = $(html);
return createFromElement(registryConf, modalElement, triggerElement); return createFromElement(registryConf, modalElement);
}) })
.fail(Notification.exception); .fail(Notification.exception);
setUpTrigger(modalPromise, triggerElement);
return modalPromise;
}; };
/** /**