Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

define("qtype_ordering/drag_reorder",["exports","jquery","core/dragdrop","core/templates","core/notification","core/str","core/prefetch"],(function(_exports,_jquery,_dragdrop,_templates,_notification,_str,_prefetch){function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj}}function _defineProperty(obj,key,value){return key in obj?Object.defineProperty(obj,key,{value:value,enumerable:!0,configurable:!0,writable:!0}):obj[key]=value,obj}Object.defineProperty(_exports,"__esModule",{value:!0}),_exports.default=void 0,_jquery=_interopRequireDefault(_jquery),_dragdrop=_interopRequireDefault(_dragdrop),_templates=_interopRequireDefault(_templates),_notification=_interopRequireDefault(_notification);class DragReorder{constructor(config){_defineProperty(this,"config",{reorderStart:void 0,reorderEnd:void 0}),_defineProperty(this,"dragStart",null),_defineProperty(this,"originalOrder",null),_defineProperty(this,"orderList",null),_defineProperty(this,"itemDragging",null),_defineProperty(this,"proxy",null),this.config=config,this.orderList=document.querySelector(this.config.list),this.startListeners()}startListeners(){const pointerHandle=e=>{if(e.target.closest(this.config.item)&&!e.target.closest(this.config.actionButton)){this.itemDragging=(0,_jquery.default)(e.target.closest(this.config.item));const details=_dragdrop.default.prepare(e);details.start&&this.startDrag(e,details)}};this.orderList.addEventListener("mousedown",pointerHandle),this.orderList.addEventListener("touchstart",pointerHandle),this.orderList.addEventListener("click",this.itemMovedByClick.bind(this))}startDrag(e,details){this.dragStart={time:(new Date).getTime(),x:details.x,y:details.y},void 0!==this.config.reorderStart&&this.config.reorderStart(this.itemDragging.closest(this.config.list),this.itemDragging),this.originalOrder=this.getCurrentOrder(),_templates.default.renderForPromise("qtype_ordering/proxyhtml",{itemHtml:this.itemDragging.html(),itemClassName:this.itemDragging.attr("class"),listClassName:this.orderList.classList.toString(),proxyStyles:["width: ".concat(this.itemDragging.outerWidth(),"px;"),"height: ".concat(this.itemDragging.outerHeight(),"px;")].join(" ")}).then((_ref=>{let{html:html,js:js}=_ref;this.proxy=(0,_jquery.default)(_templates.default.appendNodeContents(document.body,html,js)[0]),this.proxy.css(this.itemDragging.offset()),this.itemDragging.addClass(this.config.itemMovingClass),this.updateProxy(),_dragdrop.default.start(e,this.proxy,this.dragMove.bind(this),this.dragEnd.bind(this))})).catch(_notification.default.exception)}dragMove(){let closestItem=null,closestDistance=null;if(this.orderList.querySelectorAll(this.config.item).forEach((element=>{const distance=this.distanceBetweenElements(element);(null===closestItem||distance<closestDistance)&&(closestItem=(0,_jquery.default)(element),closestDistance=distance)})),closestItem[0]===this.itemDragging[0])return;const offsetValue=this.midY(this.proxy)<this.midY(closestItem)?20:-20;this.midY(this.proxy)+offsetValue<this.midY(closestItem)?this.itemDragging.insertBefore(closestItem):this.itemDragging.insertAfter(closestItem),this.updateProxy()}updateProxy(){const items=[...this.orderList.querySelectorAll(this.config.item)];for(let i=0;i<items.length;++i)if(this.itemDragging[0]===items[i]){this.proxy.find("li").attr("value",i+1);break}}dragEnd(){void 0!==this.config.reorderEnd&&this.config.reorderEnd(this.itemDragging.closest(this.config.list),this.itemDragging),this.arrayEquals(this.originalOrder,this.getCurrentOrder())||(this.config.reorderDone(this.itemDragging.closest(this.config.list),this.itemDragging,this.getCurrentOrder()),(0,_str.getString)("moved","qtype_ordering",{item:this.itemDragging.find("[data-itemcontent]").text().trim(),position:this.itemDragging.index()+1,total:this.orderList.querySelectorAll(this.config.item).length}).then((str=>{this.config.announcementRegion.innerHTML=str}))),this.proxy.remove(),this.proxy=null,this.itemDragging.removeClass(this.config.itemMovingClass),this.itemDragging=null,this.dragStart=null}itemMovedByClick(e){const actionButton=e.target.closest(this.config.actionButton);if(actionButton){switch(this.itemDragging=(0,_jquery.default)(e.target.closest(this.config.item)),this.originalOrder=this.getCurrentOrder(),actionButton.dataset.action){case"move-backward":e.preventDefault(),e.stopPropagation(),this.itemDragging.prev().length&&this.itemDragging.prev().insertAfter(this.itemDragging);break;case"move-forward":e.preventDefault(),e.stopPropagation(),this.itemDragging.next().length&&this.itemDragging.next().insertBefore(this.itemDragging)}this.arrayEquals(this.originalOrder,this.getCurrentOrder())||(this.config.reorderDone(this.itemDragging.closest(this.config.list),this.itemDragging,this.getCurrentOrder()),this.itemDragging.prev().length?this.itemDragging.next().length||this.itemDragging.find('[data-action="move-backward"]').focus():this.itemDragging.find('[data-action="move-forward"]').focus(),(0,_str.getString)("moved","qtype_ordering",{item:this.itemDragging.find("[data-itemcontent]").text().trim(),position:this.itemDragging.index()+1,total:this.orderList.querySelectorAll(this.config.item).length}).then((str=>{this.config.announcementRegion.innerHTML=str})))}}midX(node){return node.offset().left+node.outerWidth()/2}midY(node){return node.offset().top+node.outerHeight()/2}distanceBetweenElements(element){const[e1,e2]=[(0,_jquery.default)(element),(0,_jquery.default)(this.proxy)],[dx,dy]=[this.midX(e1)-this.midX(e2),this.midY(e1)-this.midY(e2)];return Math.sqrt(dx*dx+dy*dy)}getCurrentOrder(){return this.itemDragging.closest(this.config.list).find(this.config.item).map(((index,item)=>this.config.idGetter(item))).get()}arrayEquals(a1,a2){return a1.length===a2.length&&a1.every(((v,i)=>v===a2[i]))}static init(sortableid,responseid){new DragReorder({actionButton:"[data-action]",announcementRegion:document.querySelector("#".concat(sortableid,"-announcement")),list:"ul#"+sortableid,item:"li.sortableitem",itemMovingClass:"current-drop",idGetter:item=>item.id,reorderDone:(list,item,newOrder)=>{(0,_jquery.default)("input#"+responseid)[0].value=newOrder.join(",")}}),(0,_prefetch.prefetchString)("qtype_ordering","moved")}}return _exports.default=DragReorder,_exports.default}));

//# sourceMappingURL=drag_reorder.min.js.map