diff --git a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-debug.js b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-debug.js index 88a97063f5f..ca7ab636aaa 100644 --- a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-debug.js +++ b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-debug.js @@ -147,6 +147,14 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + // This is the node that the user started to drag. + var node = drag.get('node'); + // This is the container node that will follow the mouse around, + // or during a keyboard drag and drop the original node. + var dragnode = drag.get('dragNode'); + if (node === dragnode) { + return; + } // Creat a dummy structure of the outer elemnents for clean styles application var containernode = Y.Node.create('<' + M.course.format.get_containernode() + '>'); @@ -155,10 +163,10 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { '>'); sectionnode.addClass(M.course.format.get_sectionwrapperclass()); sectionnode.setStyle('margin', 0); - sectionnode.setContent(drag.get('node').get('innerHTML')); + sectionnode.setContent(node.get('innerHTML')); containernode.appendChild(sectionnode); - drag.get('dragNode').setContent(containernode); - drag.get('dragNode').addClass(CSS.COURSECONTENT); + dragnode.setContent(containernode); + dragnode.addClass(CSS.COURSECONTENT); }, drag_dropmiss: function(e) { @@ -431,6 +439,11 @@ Y.extend(DRAGRESOURCE, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + if (drag.get('dragNode') === drag.get('node')) { + // We do not want to modify the contents of the real node. + // They will be the same during a keyboard drag and drop. + return; + } drag.get('dragNode').setContent(drag.get('node').get('innerHTML')); drag.get('dragNode').all('img.iconsmall').setStyle('vertical-align', 'baseline'); }, diff --git a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-min.js b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-min.js index 6ea5d1ba946..7715de69c8f 100644 --- a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-min.js +++ b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop-min.js @@ -1,2 +1,2 @@ -YUI.add("moodle-course-dragdrop",function(e,t){var n={ACTIONAREA:".actions",ACTIVITY:"activity",ACTIVITYINSTANCE:"activityinstance",CONTENT:"content",COURSECONTENT:"course-content",EDITINGMOVE:"editing_move",ICONCLASS:"iconsmall",JUMPMENU:"jumpmenu",LEFT:"left",LIGHTBOX:"lightbox",MOVEDOWN:"movedown",MOVEUP:"moveup",PAGECONTENT:"page-content",RIGHT:"right",SECTION:"section",SECTIONADDMENUS:"section_add_menus",SECTIONHANDLE:"section-handle",SUMMARY:"summary",SECTIONDRAGGABLE:"sectiondraggable"};M.course=M.course||{};var r=function(){r.superclass.constructor.apply(this,arguments)};e.extend(r,M.core.dragdrop,{sectionlistselector:null,initializer:function(){this.groups=[n.SECTIONDRAGGABLE],this.samenodeclass=M.course.format.get_sectionwrapperclass(),this.parentnodeclass=M.course.format.get_containerclass();if(e.Node.one("."+n.JUMPMENU))return!1;this.sectionlistselector=M.course.format.get_section_wrapper(e);if(this.sectionlistselector){this.sectionlistselector="."+n.COURSECONTENT+" "+this.sectionlistselector,this.setup_for_section(this.sectionlistselector);var t=new e.DD.Delegate({container:"."+n.COURSECONTENT,nodes:"."+n.SECTIONDRAGGABLE,target:!0,handles:["."+n.LEFT],dragConfig:{groups:this.groups}});t.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1}),t.dd.plug(e.Plugin.DDConstrained,{constrain:"#"+n.PAGECONTENT,stickY:!0}),t.dd.plug(e.Plugin.DDWinScroll)}},setup_for_section:function(t){e.Node.all(t).each(function(t){var r=e.Moodle.core_course.util.section.getId(t);if(r>0){var i=t.one("."+n.RIGHT+" a."+n.MOVEDOWN),s=t.one("."+n.RIGHT+" a."+n.MOVEUP),o=M.util.get_string("movesection","moodle",r),u=t.one("."+n.LEFT);if((i||s)&&u){u.setStyle("cursor","move"),u.appendChild(this.get_drag_handle(o,n.SECTIONHANDLE,"icon",!0)),s&&(s.previous("br")?s.previous("br").remove():s.next("br")&&s.next("br").remove(),s.ancestor(".section_action_menu")&&s.ancestor().get("nodeName").toLowerCase()=="li"?s.ancestor().remove():s.remove());if(i){i.previous("br")?i.previous("br").remove():i.next("br")&&i.next("br").remove();var a=i.ancestor().get("nodeName").toLowerCase();i.ancestor(".section_action_menu")&&a=="li"?i.ancestor().remove():i.remove()}t.addClass(n.SECTIONDRAGGABLE)}}},this)},drag_start:function(t){var r=t.target,i=e.Node.create("<"+M.course.format.get_containernode()+">");i.addClass(M.course.format.get_containerclass());var s=e.Node.create("<"+M.course.format.get_sectionwrappernode()+">");s.addClass(M.course.format.get_sectionwrapperclass()),s.setStyle("margin",0),s.setContent(r.get("node").get("innerHTML")),i.appendChild(s),r.get("dragNode").setContent(i),r.get("dragNode").addClass(n.COURSECONTENT)},drag_dropmiss:function(e){this.drop_hit(e)},get_section_index:function(t){var r="."+n.COURSECONTENT+" "+M.course.format.get_section_selector(e),i=e.all(r),s=i.indexOf(t),o=i.indexOf(e.one("#section-0"));return s-o},drop_hit:function(t){var r=t.drag,i=r.get("node"),s=e.Moodle.core_course.util.section.getId(i),o=s,u=this.get_section_index(i),a=u;if(s===u)return;o>a&&(o=u,a=s),r.get("dragNode").removeClass(n.COURSECONTENT);var f=e.Node.all(this.sectionlistselector),l=M.util.add_lightbox(e,i),c={},h=this.get("config").pageparams,p;for(p in h){if(!h.hasOwnProperty(p))continue;c[p]=h[p]}c.sesskey=M.cfg.sesskey,c.courseId=this.get("courseid"),c["class"]="section",c.field="move",c.id=s,c.value=u;var d=M.cfg.wwwroot+this.get("ajaxurl");e.io(d,{method:"POST",data:c,on:{start:function(){l.show()},success:function(t,n){try{var r=e.JSON.parse(n.responseText);r.error&&new M.core.ajaxException(r),M.course.format.process_sections(e,f,r,o,a)}catch(i){}var s,u=!1;do{u=!1;for(s=o;s<=a;s++)if(e.Moodle.core_course.util.section.getId(f.item(s-1))>e.Moodle.core_course.util.section.getId(f.item(s))){var c=f.item(s-1).get("id");f.item(s-1).set("id",f.item(s).get("id")),f.item(s).set("id",c),M.course.format.swap_sections(e,s-1,s),u=!0}a-=1}while(u);window.setTimeout(function(){l.hide()},250)},failure:function(e,t){this.ajax_failure(t),l.hide()}},context:this})}},{NAME:"course-dragdrop-section",ATTRS:{courseid:{value:null},ajaxurl:{value:0},config:{value:0}}}),M.course=M.course||{},M.course.init_section_dragdrop=function(e){new r(e)};var i=function(){i.superclass.constructor.apply(this,arguments)};e.extend(i,M.core.dragdrop,{initializer:function(){this.groups=["resource"],this.samenodeclass=n.ACTIVITY,this.parentnodeclass=n.SECTION,this.samenodelabel={identifier:"afterresource",component:"moodle"},this.parentnodelabel={identifier:"totopofsection",component:"moodle"};var t=M.course.format.get_section_selector(e);if(t){t="."+n.COURSECONTENT+" "+t,this.setup_for_section(t);var r=t.slice(n.COURSECONTENT.length+2)+" li."+n.ACTIVITY,i=new e.DD.Delegate({container:"."+n.COURSECONTENT,nodes:r,target:!0,handles:["."+n.EDITINGMOVE],dragConfig:{groups:this.groups}});i.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1,cloneNode:!0}),i.dd.plug(e.Plugin.DDConstrained,{constrain:"#"+n.PAGECONTENT}),i.dd.plug(e.Plugin.DDWinScroll),M.course.coursebase.register_module(this),M.course.dragres=this}},setup_for_section:function(t){e.Node.all(t).each(function(t){var r=t.one("."+n.CONTENT+" ul."+n.SECTION);r||(r=e.Node.create(""),r.addClass(n.SECTION),t.one("."+n.CONTENT+" div."+n.SUMMARY).insert(r,"after")),r.setAttribute("data-draggroups",this.groups.join(" ")),new e.DD.Drop({node:r,groups:this.groups,padding:"20 0 20 0"}),this.setup_for_resource("#"+t.get("id")+" li."+n.ACTIVITY)},this)},setup_for_resource:function(t){e.Node.all(t).each(function(t){var r=t.getData("draggroups");r||(t.setAttribute("data-draggroups",this.groups.join(" ")),new e.DD.Drop({node:t,groups:this.groups,padding:"20 0 20 0"}));var i=t.one("a."+n.EDITINGMOVE);if(i){var s=i.getData("sectionreturn");i.replace(this.get_drag_handle(M.util.get_string("movecoursemodule","moodle"),n.EDITINGMOVE,n.ICONCLASS,!0).setAttribute("data-sectionreturn",s))}},this)},drag_start:function(e){var t=e.target;t.get("dragNode") -.setContent(t.get("node").get("innerHTML")),t.get("dragNode").all("img.iconsmall").setStyle("vertical-align","baseline")},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(t){var r=t.drag,i=r.get("node"),s=t.drop.get("node"),o=i.one(n.ACTIONAREA),u=M.util.add_spinner(e,o),a={},f=this.get("config").pageparams,l;for(l in f)a[l]=f[l];a.sesskey=M.cfg.sesskey,a.courseId=this.get("courseid"),a["class"]="resource",a.field="move",a.id=Number(e.Moodle.core_course.util.cm.getId(i)),a.sectionId=e.Moodle.core_course.util.section.getId(s.ancestor(M.course.format.get_section_wrapper(e),!0)),i.next()&&(a.beforeId=Number(e.Moodle.core_course.util.cm.getId(i.next())));var c=M.cfg.wwwroot+this.get("ajaxurl");e.io(c,{method:"POST",data:a,on:{start:function(){this.lock_drag_handle(r,n.EDITINGMOVE),u.show()},success:function(t,s){var o=e.JSON.parse(s.responseText),a={element:i,visible:o.visible};M.course.coursebase.invoke_function("set_visibility_resource_ui",a),this.unlock_drag_handle(r,n.EDITINGMOVE),window.setTimeout(function(){u.hide()},250)},failure:function(e,t){this.ajax_failure(t),this.unlock_drag_handle(r,n.SECTIONHANDLE),u.hide()}},context:this})}},{NAME:"course-dragdrop-resource",ATTRS:{courseid:{value:null},ajaxurl:{value:0},config:{value:0}}}),M.course=M.course||{},M.course.init_resource_dragdrop=function(e){new i(e)}},"@VERSION@",{requires:["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification","moodle-course-coursebase","moodle-course-util"]}); +YUI.add("moodle-course-dragdrop",function(p,e){var o,t,u=".actions",s="activity",r="content",f="course-content",l="editing_move",i="iconsmall",n="jumpmenu",a="left",c="movedown",d="moveup",g="page-content",m="right",h="section",_="section-handle",v="summary",w="sectiondraggable";M.course=M.course||{},o=function(){o.superclass.constructor.apply(this,arguments)},p.extend(o,M.core.dragdrop,{sectionlistselector:null,initializer:function(){if(this.groups=[w],this.samenodeclass=M.course.format.get_sectionwrapperclass(),this.parentnodeclass=M.course.format.get_containerclass(),p.Node.one("."+n))return!1;if(this.sectionlistselector=M.course.format.get_section_wrapper(p),this.sectionlistselector){this.sectionlistselector="."+f+" "+this.sectionlistselector,this.setup_for_section(this.sectionlistselector);var e=new p.DD.Delegate({container:"."+f,nodes:"."+w,target:!0,handles:["."+a],dragConfig:{groups:this.groups}});e.dd.plug(p.Plugin.DDProxy,{moveOnEnd:!1}),e.dd.plug(p.Plugin.DDConstrained,{constrain:"#"+g,stickY:!0}),e.dd.plug(p.Plugin.DDWinScroll)}},setup_for_section:function(e){p.Node.all(e).each(function(e){var o,t,s,r,i,n=p.Moodle.core_course.util.section.getId(e);0")).addClass(M.course.format.get_containerclass()),(t=p.Node.create("<"+M.course.format.get_sectionwrappernode()+">")).addClass(M.course.format.get_sectionwrapperclass()),t.setStyle("margin",0),t.setContent(r.get("innerHTML")),o.appendChild(t),i.setContent(o),i.addClass(f))},drag_dropmiss:function(e){this.drop_hit(e)},get_section_index:function(e){var o="."+f+" "+M.course.format.get_section_selector(p),t=p.all(o);return t.indexOf(e)-t.indexOf(p.one("#section-0"))},drop_hit:function(n){var a,c,e,o,t,s,r=n.drag,i=r.get("node"),d=p.Moodle.core_course.util.section.getId(i),u=d,l=this.get_section_index(i),g=l;if(d!==l){for(t in gp.Moodle.core_course.util.section.getId(a.item(s))&&(i=a.item(s-1).get("id"),a.item(s-1).set("id",a.item(s).get("id")),a.item(s).set("id",i),M.course.format.swap_sections(p,s-1,s),r=!0);g-=1}while(r);window.setTimeout(function(){c.hide()},250)},failure:function(e,o){this.ajax_failure(o),c.hide()}},context:this})}}},{NAME:"course-dragdrop-section",ATTRS:{courseid:{value:null},ajaxurl:{value:0},config:{value:0}}}),M.course=M.course||{},M.course.init_section_dragdrop=function(e){new o(e)},t=function(){t.superclass.constructor.apply(this,arguments)},p.extend(t,M.core.dragdrop,{initializer:function(){var e,o,t;this.groups=["resource"],this.samenodeclass=s,this.parentnodeclass=h,this.samenodelabel={identifier:"afterresource",component:"moodle"},this.parentnodelabel={identifier:"totopofsection",component:"moodle"},(e=M.course.format.get_section_selector(p))&&(e="."+f+" "+e,this.setup_for_section(e),o=e.slice(f.length+2)+" li."+s,(t=new p.DD.Delegate({container:"."+f,nodes:o,target:!0,handles:["."+l],dragConfig:{groups:this.groups}})).dd.plug(p.Plugin.DDProxy,{moveOnEnd:!1,cloneNode:!0}),t.dd.plug(p.Plugin.DDConstrained,{constrain:"#"+g}),t.dd.plug(p.Plugin.DDWinScroll),M.course.coursebase.register_module(this),M.course.dragres=this)},setup_for_section:function(e){p.Node.all(e).each(function(e){var o=e.one("."+r+" ul."+h);o||((o=p.Node.create("")).addClass(h),e.one("."+r+" div."+v).insert(o,"after")),o.setAttribute("data-draggroups",this.groups.join(" ")),new p.DD.Drop({node:o,groups:this.groups,padding:"20 0 20 0"}),this.setup_for_resource("#"+e.get("id")+" li."+s)},this)},setup_for_resource:function(e){p.Node.all(e).each(function(e){var o,t,s=e.getData("draggroups");s||(e.setAttribute("data-draggroups",this.groups.join(" ")),new p.DD.Drop({node:e,groups:this.groups,padding:"20 0 20 0"})),(o=e.one("a."+l))&&(t=o.getData("sectionreturn"),o.replace(this.get_drag_handle(M.util.get_string("movecoursemodule","moodle"),l,i,!0).setAttribute("data-sectionreturn",t)))},this)},drag_start:function(e){var o=e.target;o.get("dragNode")!==o.get("node")&&(o.get("dragNode").setContent(o.get("node").get("innerHTML")),o.get("dragNode").all("img.iconsmall").setStyle("vertical-align","baseline"))},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(e){var o,t,r=e.drag,i=r.get("node"),s=e.drop.get("node"),n=i.one(u),a=M.util.add_spinner(p,n),c={},d=this.get("config").pageparams;for(o in d)c[o]=d[o];c.sesskey=M.cfg.sesskey,c.courseId=this.get("courseid"),c["class"]="resource",c.field="move",c.id=Number(p.Moodle.core_course.util.cm.getId(i)),c.sectionId=p.Moodle.core_course.util.section.getId(s.ancestor(M.course.format.get_section_wrapper(p),!0)), +i.next()&&(c.beforeId=Number(p.Moodle.core_course.util.cm.getId(i.next()))),t=M.cfg.wwwroot+this.get("ajaxurl"),p.io(t,{method:"POST",data:c,on:{start:function(){this.lock_drag_handle(r,l),a.show()},success:function(e,o){var t=p.JSON.parse(o.responseText),s={element:i,visible:t.visible};M.course.coursebase.invoke_function("set_visibility_resource_ui",s),this.unlock_drag_handle(r,l),window.setTimeout(function(){a.hide()},250)},failure:function(e,o){this.ajax_failure(o),this.unlock_drag_handle(r,_),a.hide()}},context:this})}},{NAME:"course-dragdrop-resource",ATTRS:{courseid:{value:null},ajaxurl:{value:0},config:{value:0}}}),M.course=M.course||{},M.course.init_resource_dragdrop=function(e){new t(e)}},"@VERSION@",{requires:["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification","moodle-course-coursebase","moodle-course-util"]}); \ No newline at end of file diff --git a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop.js b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop.js index 6c016e6985e..4e0a65c25a5 100644 --- a/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop.js +++ b/course/yui/build/moodle-course-dragdrop/moodle-course-dragdrop.js @@ -147,6 +147,14 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + // This is the node that the user started to drag. + var node = drag.get('node'); + // This is the container node that will follow the mouse around, + // or during a keyboard drag and drop the original node. + var dragnode = drag.get('dragNode'); + if (node === dragnode) { + return; + } // Creat a dummy structure of the outer elemnents for clean styles application var containernode = Y.Node.create('<' + M.course.format.get_containernode() + '>'); @@ -155,10 +163,10 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { '>'); sectionnode.addClass(M.course.format.get_sectionwrapperclass()); sectionnode.setStyle('margin', 0); - sectionnode.setContent(drag.get('node').get('innerHTML')); + sectionnode.setContent(node.get('innerHTML')); containernode.appendChild(sectionnode); - drag.get('dragNode').setContent(containernode); - drag.get('dragNode').addClass(CSS.COURSECONTENT); + dragnode.setContent(containernode); + dragnode.addClass(CSS.COURSECONTENT); }, drag_dropmiss: function(e) { @@ -427,6 +435,11 @@ Y.extend(DRAGRESOURCE, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + if (drag.get('dragNode') === drag.get('node')) { + // We do not want to modify the contents of the real node. + // They will be the same during a keyboard drag and drop. + return; + } drag.get('dragNode').setContent(drag.get('node').get('innerHTML')); drag.get('dragNode').all('img.iconsmall').setStyle('vertical-align', 'baseline'); }, diff --git a/course/yui/src/dragdrop/js/resource.js b/course/yui/src/dragdrop/js/resource.js index fc32f51f778..5864ec19fed 100644 --- a/course/yui/src/dragdrop/js/resource.js +++ b/course/yui/src/dragdrop/js/resource.js @@ -116,6 +116,11 @@ Y.extend(DRAGRESOURCE, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + if (drag.get('dragNode') === drag.get('node')) { + // We do not want to modify the contents of the real node. + // They will be the same during a keyboard drag and drop. + return; + } drag.get('dragNode').setContent(drag.get('node').get('innerHTML')); drag.get('dragNode').all('img.iconsmall').setStyle('vertical-align', 'baseline'); }, diff --git a/course/yui/src/dragdrop/js/section.js b/course/yui/src/dragdrop/js/section.js index efbb73e48f2..54e51ef9eeb 100644 --- a/course/yui/src/dragdrop/js/section.js +++ b/course/yui/src/dragdrop/js/section.js @@ -115,6 +115,14 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { drag_start: function(e) { // Get our drag object var drag = e.target; + // This is the node that the user started to drag. + var node = drag.get('node'); + // This is the container node that will follow the mouse around, + // or during a keyboard drag and drop the original node. + var dragnode = drag.get('dragNode'); + if (node === dragnode) { + return; + } // Creat a dummy structure of the outer elemnents for clean styles application var containernode = Y.Node.create('<' + M.course.format.get_containernode() + '>'); @@ -123,10 +131,10 @@ Y.extend(DRAGSECTION, M.core.dragdrop, { '>'); sectionnode.addClass(M.course.format.get_sectionwrapperclass()); sectionnode.setStyle('margin', 0); - sectionnode.setContent(drag.get('node').get('innerHTML')); + sectionnode.setContent(node.get('innerHTML')); containernode.appendChild(sectionnode); - drag.get('dragNode').setContent(containernode); - drag.get('dragNode').addClass(CSS.COURSECONTENT); + dragnode.setContent(containernode); + dragnode.addClass(CSS.COURSECONTENT); }, drag_dropmiss: function(e) {