mirrored from git://git.moodle.org/moodle.git
/
form.min.js
1 lines (1 loc) · 6.46 KB
/
form.min.js
1
define(["jquery","core/dragdrop"],function(a,b){"use strict";var c={maxBgImageSize:null,maxDragImageSize:null,fp:null,init:function(b,d){c.maxBgImageSize=b,c.maxDragImageSize=d,c.fp=c.filePickers(),a("#id_previewareaheader").append('<div class="ddarea"> <div class="droparea"> <img class="dropbackground" /> <div class="dropzones"></div> </div> <div class="dragitems"></div></div>'),c.updateVisibilityOfFilePickers(),c.setOptionsForDragItemSelectors(),c.setupEventHandlers(),c.waitForFilePickerToInitialise()},waitForFilePickerToInitialise:function(){return null===c.fp.file("bgimage").href?void setTimeout(c.waitForFilePickerToInitialise,1e3):(M.util.js_pending("dragDropToImageForm"),a("form.mform").on("change",".filepickerhidden",function(){M.util.js_pending("dragDropToImageForm"),c.loadPreviewImage()}),void c.loadPreviewImage())},loadPreviewImage:function(){a("fieldset#id_previewareaheader .dropbackground").one("load",c.afterPreviewImageLoaded).attr("src",c.fp.file("bgimage").href)},afterPreviewImageLoaded:function(){var b=a("fieldset#id_previewareaheader .dropbackground");c.constrainImageSize(b,c.maxBgImageSize),c.createDropZones(),M.util.js_complete("dragDropToImageForm")},constrainImageSize:function(a,b){var c=Math.max(a.width()/b.width,a.height()/b.height);c>1&&a.css("width",Math.floor(a.width()/c)),a.addClass("constrained")},createDropZones:function(){var b=a(".dropzones");b.empty();var d=c.fp.file("bgimage").href;if(null!==d){for(var e=c.form.getFormValue("nodropzone",[]),f=0;f<e;f++){var g=c.form.getFormValue("drops",[f,"choice"]);if("0"!==g){g-=1;var h=c.form.getFormValue("drags",[g,"draggroup"]),i=c.form.getFormValue("draglabel",[g]);if("image"===c.form.getFormValue("drags",[g,"dragitemtype"])){var j=c.fp.file("dragitem["+g+"]").href;if(null===j)continue;b.append('<img class="droppreview group'+h+" drop"+f+'" src="'+j+'" alt="'+i+'" data-drop-no="'+f+'">')}else""!==i&&b.append('<div class="droppreview group'+h+" drop"+f+'" data-drop-no="'+f+'">'+i+"</div>")}}c.waitForAllDropImagesToBeLoaded()}},waitForAllDropImagesToBeLoaded:function(){var b=a(".dropzones img").not(function(a,b){return c.imageIsLoaded(b)});return b.length>0?void setTimeout(function(){c.waitForAllDropImagesToBeLoaded()},100):void c.updateDropZones()},imageIsLoaded:function(a){return a.complete&&0!==a.naturalHeight},updateDropZones:function(){var b=c.fp.file("bgimage").href;if(null!==b){for(var d=a("fieldset#id_previewareaheader .dropbackground").offset(),e=c.form.getFormValue("nodropzone",[]),f=0;f<e;f++){var g=a(".dropzones .drop"+f);if(0!==g.length){var h=c.form.getFormValue("drops",[f,"choice"])-1;g.offset({left:d.left+parseInt(c.form.getFormValue("drops",[f,"xleft"])),top:d.top+parseInt(c.form.getFormValue("drops",[f,"ytop"]))});var i=c.form.getFormValue("draglabel",[h]);g.is("img")?g.attr("alt",i):g.html(i)}}a(".dropzones .droppreview").css("padding","0");for(var j=a("select.draggroup").first().find("option").length,k=1;k<=j;k++)c.resizeAllDragsAndDropsInGroup(k)}},resizeAllDragsAndDropsInGroup:function(b){var c=a(".dropzones .droppreview.group"+b),d=0,e=0;c.each(function(a,b){d=Math.max(d,Math.ceil(b.offsetWidth)),e=Math.max(e,Math.ceil(b.offsetHeight))}),d+=10,e+=10,c.each(function(b,c){var f=Math.round((d-c.offsetWidth)/2),g=Math.floor((e-c.offsetHeight)/2);a(c).css({"padding-left":f+"px","padding-right":d-c.offsetWidth-f+"px","padding-top":g+"px","padding-bottom":e-c.offsetHeight-g+"px"})})},setupEventHandlers:function(){a("fieldset#id_draggableitemheader").on("change input","input, select",function(b){var d=a(b.target).closest("select, input");d.hasClass("dragitemtype")&&c.updateVisibilityOfFilePickers(),c.setOptionsForDragItemSelectors(),d.is(".dragitemtype, .draggroup")?c.createDropZones():d.is(".draglabel")&&c.updateDropZones()}),a("fieldset#id_dropzoneheader").on("change input","input, select",function(b){var d=a(b.target).closest("select, input");d.is("select")?c.createDropZones():c.updateDropZones()}),a("fieldset#id_previewareaheader").on("mousedown touchstart",".droppreview",function(a){c.dragStart(a)}),a(window).on("resize",function(){c.updateDropZones()})},updateVisibilityOfFilePickers:function(){for(var b=c.form.getFormValue("noitems",[]),d=0;d<b;d++){var e=a("input#id_dragitem_"+d).closest(".fitem_ffilepicker");"image"===c.form.getFormValue("drags",[d,"dragitemtype"])?e.show():e.hide()}},setOptionsForDragItemSelectors:function(){for(var b={0:""},d=c.form.getFormValue("noitems",[]),e=c.form.getFormValue("nodropzone",[]),f=0;f<d;f++){var g=c.form.getFormValue("draglabel",[f]),h=c.fp.file(c.form.toNameWithIndex("dragitem",[f]));"image"===c.form.getFormValue("drags",[f,"dragitemtype"])&&null!==h.name?b[f+1]=f+1+". "+g+" ("+h.name+")":""!==g&&(b[f+1]=f+1+". "+g)}for(var i=0;i<e;i++){var j=a("#id_drops_"+i+"_choice"),k=j.val();j.find("option").remove();for(var l in b)if(b.hasOwnProperty(l)){j.append('<option value="'+l+'">'+b[l]+"</option>");var m=j.find('option[value="'+l+'"]');parseInt(l)===parseInt(k)?m.attr("selected",!0):c.isItemUsed(parseInt(l))&&m.attr("disabled",!0)}}},isItemUsed:function(b){return 0!==b&&(!c.form.getFormValue("drags",[b-1,"infinite"])&&0!==a("fieldset#id_dropzoneheader select").filter(function(c,d){return parseInt(a(d).val())===b}).length)},dragStart:function(d){var e=a(d.target).closest(".droppreview"),f=b.prepare(d);f.start&&b.start(d,e,function(a,b,d){c.dragMove(d)},function(){c.dragEnd()})},dragMove:function(b){var d=a("fieldset#id_previewareaheader .dropbackground"),e=d.offset(),f=b.data("dropNo"),g=b.offset(),h=Math.round(g.left-e.left),i=Math.round(g.top-e.top);h=Math.max(0,Math.min(h,d.width()-b.width()-10)),i=Math.max(0,Math.min(i,d.height()-b.height()-10)),c.form.setFormValue("drops",[f,"xleft"],h),c.form.setFormValue("drops",[f,"ytop"],i)},dragEnd:function(){c.updateDropZones()},form:{toNameWithIndex:function(a,b){for(var c=a,d=0;d<b.length;d++)c=c+"["+b[d]+"]";return c},getEl:function(a,b){var c=document.getElementById("mform1");return c.elements[this.toNameWithIndex(a,b)]},getFormValue:function(a,b){var c=this.getEl(a,b);return c.type||(c=c[c.length-1]),"checkbox"===c.type?c.checked:c.value},setFormValue:function(a,b,c){var d=this.getEl(a,b);"checkbox"===d.type?d.checked=c:d.value=c}},filePickers:function(){var b,c;if(void 0===b){b={},c={};var d=a("form.mform input.filepickerhidden");d.each(function(a,d){b[d.value]=d.name,c[d.name]=d.parentNode})}return{file:function(b){var d=a(c[b]),e=d.find("div.filepicker-filelist a");return e.length?{href:e.get(0).href,name:e.get(0).innerHTML}:{href:null,name:null}},name:function(a){return b[a]}}}};return{init:c.init}});