moodle/lib/amd/build/inplace_editable.min.js
Paul Holden 244d304b6e MDL-72291 output: emit native events from inplace editable element.
Removes jQuery dependency from calling code that wants to listen
for these events. Maintains backwards compatibility with existing
code that does want to listen to jQuery-style events.
2021-10-01 10:41:45 +01:00

2 lines
5.1 KiB
JavaScript

define ("core/inplace_editable",["jquery","core/ajax","core/templates","core/notification","core/str","core/config","core/url","core/form-autocomplete","core/pending","core/local/inplace_editable/events"],function(a,b,c,d,e,f,g,h,i,j){var k=function(a){a.removeClass("updating");a.find("img.spinner").hide()},l=function(e,f,g){var h=[e.attr("data-itemid"),e.attr("data-component"),e.attr("data-itemtype")].join("-"),l=new i(h);m(e);b.call([{methodname:"core_update_inplace_editable",args:{itemid:e.attr("data-itemid"),component:e.attr("data-component"),itemtype:e.attr("data-itemtype"),value:f}}])[0].then(function(b){return c.render("core/inplace_editable",b).then(function(d,f){var h=e.attr("data-value"),i=a(d);c.replaceNode(e,i,f);if(!g){i.find("[data-inplaceeditablelink]").focus()}j.notifyElementUpdated(i.get(0),b,h)})}).then(function(){return l.resolve()}).fail(function(a){k(e);M.util.js_complete(h);var b=j.notifyElementUpdateFailed(e.get(0),a,f);if(!b.defaultPrevented){d.exception(a)}})},m=function(b){b.addClass("updating");var c=b.find("img.spinner");if(c.length){c.show()}else{c=a("<img/>").attr("src",g.imageUrl("i/loading_small")).addClass("spinner").addClass("smallicon");b.append(c)}};a("body").on("click keypress","[data-inplaceeditable] [data-inplaceeditablelink]",function(b){if("keypress"===b.type&&13!==b.keyCode){return}var g=new i("autocomplete-start-editing");b.stopImmediatePropagation();b.preventDefault();var j=a(this),k=j.closest("[data-inplaceeditable]"),m=function(a){a.find("input").off();a.find("select").off();a.html(a.attr("data-oldcontent"));a.removeAttr("data-oldcontent");a.removeClass("inplaceeditingon");a.find("[data-inplaceeditablelink]").focus()},n=function(b,c){var d=b,e;for(e=0;e<c;e++){d+=Math.floor(10*Math.random())+""}if(0===a("#"+d).length){return d}return n(b,c)},o=function(b){e.get_string("edittitleinstructions").done(function(c){var d=a("<span class=\"editinstructions\">"+c+"</span>").attr("id",n("id_editinstructions_",20)),e=a("<input type=\"text\"/>").attr("id",n("id_inplacevalue_",20)).attr("value",b.attr("data-value")).attr("aria-describedby",d.attr("id")).addClass("ignoredirty").addClass("form-control"),g=a("<label class=\"accesshide\">"+k.attr("data-editlabel")+"</label>").attr("for",e.attr("id"));b.html("").append(d).append(g).append(e);e.focus();e.select();e.on("keyup keypress focusout",function(a){if(f.behatsiterunning&&"focusout"===a.type){return}if("keypress"===a.type&&13===a.keyCode){var c=e.val();m(b);l(b,c)}if("keyup"===a.type&&27===a.keyCode||"focusout"===a.type){m(b)}})})},p=function(a,b){m(a);l(a,b)},q=function(b,c){var d,e=a("<select></select>").attr("id",n("id_inplacevalue_",20)).addClass("custom-select"),g=a("<label class=\"accesshide\">"+k.attr("data-editlabel")+"</label>").attr("for",e.attr("id"));for(d in c){e.append(a("<option>").attr("value",c[d].key).html(c[d].value))}e.val(b.attr("data-value"));b.html("").append(g).append(e);e.focus();e.select();e.on("keyup change focusout",function(a){if(f.behatsiterunning&&"focusout"===a.type){return}if("change"===a.type){var c=e.val();m(b);l(b,c)}if("keyup"===a.type&&27===a.keyCode||"focusout"===a.type){m(b)}})},r=function(b,f){var g,j=a("<select></select>").attr("id",n("id_inplacevalue_",20)).addClass("form-autocomplete-original-select").addClass("custom-select"),o=a("<label class=\"accesshide\">"+k.attr("data-editlabel")+"</label>").attr("for",j.attr("id")),p=f.options,q=f.attributes,r=a("<a href=\"#\"></a>"),s=a("<a href=\"#\"></a>");for(g in p){j.append(a("<option>").attr("value",p[g].key).html(p[g].value))}if(q.multiple){j.attr("multiple","true")}j.val(JSON.parse(b.attr("data-value")));e.get_string("savechanges","core").then(function(a){return c.renderPix("e/save","core",a)}).then(function(a){r.append(a)}).fail(d.exception);e.get_string("cancel","core").then(function(a){return c.renderPix("e/cancel","core",a)}).then(function(a){s.append(a)}).fail(d.exception);b.html("").append(o).append(j).append(r).append(s);j.focus();j.select();h.enhance(j,q.tags,q.ajax,q.placeholder,q.caseSensitive,q.showSuggestions,q.noSelectionString).then(function(){b.find("[role=combobox]").focus()}).fail(d.exception);j.on("keyup",function(a){if("keyup"===a.type&&27===a.keyCode||"focusout"===a.type){m(b)}});r.on("click",function(a){var c=JSON.stringify(j.val());j.empty();m(b);l(b,c);a.preventDefault()});s.on("click",function(a){j.empty();m(b);a.preventDefault()})};(function turnEditingOffEverywhere(){a("span.inplaceeditable.inplaceeditingon").each(function(){m(a(this))})})();(function turnEditingOn(b){b.addClass("inplaceeditingon");b.attr("data-oldcontent",b.html());var c=b.attr("data-type"),d=b.attr("data-options");if("toggle"===c){p(b,d)}else if("select"===c){q(b,a.parseJSON(d))}else if("autocomplete"===c){r(b,a.parseJSON(d))}else{o(b)}})(k);g.resolve()});return{getInplaceEditable:function getInplaceEditable(b){var c=b.querySelector("[data-inplaceeditable]");if(!c){return}return{element:c,getValue:function getValue(){return this.element.dataset.value},setValue:function setValue(b){l(a(this.element),b,!0)},getItemId:function getItemId(){return this.element.dataset.itemid}}}}});
//# sourceMappingURL=inplace_editable.min.js.map