From 34df4e4ba49aab9e747e5ff7eebddf7832c6d70f Mon Sep 17 00:00:00 2001 From: Sam Hemelryk Date: Fri, 11 Apr 2014 13:38:03 +1200 Subject: [PATCH] MDL-43145 dock: fixed up region_completely_docked code to ignore empty regions --- lib/blocklib.php | 6 +++++- .../build/moodle-core-blocks/moodle-core-blocks-debug.js | 4 ++-- lib/yui/build/moodle-core-blocks/moodle-core-blocks-min.js | 4 ++-- lib/yui/build/moodle-core-blocks/moodle-core-blocks.js | 4 ++-- lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js | 4 +++- lib/yui/build/moodle-core-dock/moodle-core-dock-min.js | 6 +++--- lib/yui/build/moodle-core-dock/moodle-core-dock.js | 4 +++- lib/yui/src/blocks/js/blocks.js | 2 +- lib/yui/src/blocks/js/manager.js | 2 +- lib/yui/src/dock/js/dock.js | 4 +++- 10 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/blocklib.php b/lib/blocklib.php index fbf37acef4a..c462bb8b331 100644 --- a/lib/blocklib.php +++ b/lib/blocklib.php @@ -518,7 +518,11 @@ class block_manager { $this->check_is_loaded(); $this->ensure_content_created($region, $output); - foreach($this->visibleblockcontent[$region] as $instance) { + if (!$this->region_has_content($region, $output)) { + // If the region has no content then nothing is docked at all of course. + return false; + } + foreach ($this->visibleblockcontent[$region] as $instance) { if (!empty($instance->content) && !get_user_preferences('docked_block_instance_'.$instance->blockinstanceid, 0)) { return false; } diff --git a/lib/yui/build/moodle-core-blocks/moodle-core-blocks-debug.js b/lib/yui/build/moodle-core-blocks/moodle-core-blocks-debug.js index a907328377b..64a0aa865d8 100644 --- a/lib/yui/build/moodle-core-blocks/moodle-core-blocks-debug.js +++ b/lib/yui/build/moodle-core-blocks/moodle-core-blocks-debug.js @@ -351,7 +351,7 @@ M.core.blockdraganddrop.is_using_blocks_render_method = function() { var goodregions = Y.all('.block-region[data-blockregion]').size(); var allregions = Y.all('.block-region').size(); this._isusingnewblocksmethod = (allregions === goodregions); - if (goodregions > 0 && allregions > 0) { + if (goodregions > 0 && allregions > 0 && goodregions !== allregions) { Y.log('Both core_renderer::blocks and core_renderer::blocks_for_region have been used.', 'warn', 'moodle-core_blocks'); } } @@ -494,7 +494,7 @@ MANAGER.prototype = { dragdelegation.dd.plug(Y.Plugin.DDWinScroll); // On the mouse down event we will enable all block regions so that they can be dragged to. // This is VERY important as without it dnd won't work for empty block regions. - dragdelegation.on('drag:mouseDown', this.enable_all_regions, this); + dragdelegation.on('drag:start', this.enable_all_regions, this); region.change_block_move_icons(this); } diff --git a/lib/yui/build/moodle-core-blocks/moodle-core-blocks-min.js b/lib/yui/build/moodle-core-blocks/moodle-core-blocks-min.js index c4223e019c6..463d604afc9 100644 --- a/lib/yui/build/moodle-core-blocks/moodle-core-blocks-min.js +++ b/lib/yui/build/moodle-core-blocks/moodle-core-blocks-min.js @@ -1,2 +1,2 @@ -YUI.add("moodle-core-blocks",function(e,t){var n="/lib/ajax/blocks.php",r={BLOCK:"block",BLOCKREGION:"block-region",BLOCKADMINBLOCK:"block_adminblock",EDITINGMOVE:"editing_move",HEADER:"header",LIGHTBOX:"lightbox",REGIONCONTENT:"region-content",SKIPBLOCK:"skip-block",SKIPBLOCKTO:"skip-block-to",MYINDEX:"page-my-index",REGIONMAIN:"region-main",BLOCKSMOVING:"blocks-moving"},i={DRAGHANDLE:"."+r.HEADER+" .commands .moodle-core-dragdrop-draghandle"},s=function(){s.superclass.constructor.apply(this,arguments)};e.extend(s,M.core.dragdrop,{skipnodetop:null,skipnodebottom:null,dragsourceregion:null,initializer:function(){this.groups=["block"],this.samenodeclass=r.BLOCK,this.parentnodeclass=r.REGIONCONTENT;var t=e.Node.all("body#"+r.MYINDEX+" #"+r.REGIONMAIN+" > ."+r.REGIONCONTENT);if(t.size()>0){var n=t.item(0);n.addClass(r.BLOCKREGION),n.set("id",r.REGIONCONTENT),n.one("div").addClass(r.REGIONCONTENT)}var s=e.Node.all("div."+r.BLOCKREGION);if(s.size()===0)return!1;if(s.size()!==this.get("regions").length){var o=e.Node.create("
").addClass(r.BLOCKREGION),u=e.Node.create("
").addClass(r.REGIONCONTENT);o.appendChild(u);var a=s.filter("#region-pre"),f=s.filter("#region-post");a.size()===0&&f.size()===1?(o.setAttrs({id:"region-pre"}),f.item(0).insert(o,"before"),s.unshift(o)):f.size()===0&&a.size()===1&&(o.setAttrs({id:"region-post"}),a.item(0).insert(o,"after"),s.push(o))}s.each(function(t){new e.DD.Drop({node:t.one("div."+r.REGIONCONTENT),groups:this.groups,padding:"40 240 40 240"});var n=new e.DD.Delegate({container:t,nodes:"."+r.BLOCK,target:!0,handles:[i.DRAGHANDLE],invalid:".block-hider-hide, .block-hider-show, .moveto",dragConfig:{groups:this.groups}});n.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1}),n.dd.plug(e.Plugin.DDWinScroll);var s=t.all("."+r.BLOCK);s.each(function(e){var t=e.one("a."+r.EDITINGMOVE);t&&(t.replace(this.get_drag_handle(t.getAttribute("title"),"","iconsmall",!0)),e.one(i.DRAGHANDLE).setStyle("cursor","move"))},this)},this)},get_block_id:function(e){return Number(e.get("id").replace(/inst/i,""))},get_block_region:function(t){var n=t.ancestor("div."+r.BLOCKREGION).get("id").replace(/region-/i,"");return e.Array.indexOf(this.get("regions"),n)===-1?(right_to_left()&&(n==="post"?n="pre":n==="pre"&&(n="post")),"side-"+n):n},get_region_id:function(e){return e.get("id").replace(/region-/i,"")},drag_start:function(t){var n=t.target;this.dragsourceregion=n.get("node").ancestor("div."+r.BLOCKREGION),n.get("node").previous()&&n.get("node").previous().hasClass(r.SKIPBLOCK)&&(this.skipnodetop=n.get("node").previous()),n.get("node").next()&&n.get("node").next().hasClass(r.SKIPBLOCKTO)&&(this.skipnodebottom=n.get("node").next()),e.one("body").addClass(r.BLOCKSMOVING)},drop_over:function(t){var n=t.drag.get("node"),i=t.drop.get("node");i.hasClass(this.parentnodeclass)&&i.one("."+r.BLOCKADMINBLOCK)&&i.one("."+r.BLOCKADMINBLOCK).next("."+r.BLOCK)&&i.prepend(n);if(this.dragsourceregion.contains(i))return!1;var s=e.one("body"),o=this.get_region_id(this.dragsourceregion);s.hasClass("side-"+o+"-only")&&s.removeClass("side-"+o+"-only"),o=this.get_region_id(i.ancestor("div."+r.BLOCKREGION)),this.dragsourceregion.all("."+r.BLOCK).size()===0&&this.dragsourceregion.get("id").match(/(region-pre|region-post)/i)&&(s.hasClass("side-"+o+"-only")||s.addClass("side-"+o+"-only"))},drag_end:function(){this.skipnodetop=null,this.skipnodebottom=null,this.dragsourceregion=null,e.one("body").removeClass(r.BLOCKSMOVING)},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(t){var i=t.drag,s=i.get("node"),o=t.drop.get("node");s.previous()&&s.previous().hasClass(r.SKIPBLOCK)&&s.insert(s.previous(),"after"),this.skipnodetop&&s.insert(this.skipnodetop,"before"),this.skipnodebottom&&s.insert(this.skipnodebottom,"after");var u=M.util.add_lightbox(e,s),a={sesskey:M.cfg.sesskey,courseid:this.get("courseid"),pagelayout:this.get("pagelayout"),pagetype:this.get("pagetype"),subpage:this.get("subpage"),contextid:this.get("contextid"),action:"move",bui_moveid:this.get_block_id(s),bui_newregion:this.get_block_region(o)};this.get("cmid")&&(a.cmid=this.get("cmid")),s.next("."+this.samenodeclass)&&!s.next("."+this.samenodeclass).hasClass(r.BLOCKADMINBLOCK)&&(a.bui_beforeid=this.get_block_id(s.next("."+this.samenodeclass))),e.io(M.cfg.wwwroot+n,{method:"POST",data:a,on:{start:function(){u.show()},success:function(t,n){window.setTimeout(function(){u.hide()},250);try{var r=e.JSON.parse(n.responseText);r.error&&new M.core.ajaxException(r)}catch(i){}},failure:function(e,t){this.ajax_failure(t),u.hide()}},context:this})}},{NAME:"core-blocks-dragdrop",ATTRS:{courseid:{value:null},cmid:{value:null},contextid:{value:null},pagelayout:{value:null},pagetype:{value:null},subpage:{value:null},regions:{value:null}}}),M.core=M.core||{},M.core.blockdraganddrop=M.core.blockdraganddrop||{},M.core.blockdraganddrop._isusingnewblocksmethod=null,M.core.blockdraganddrop.is_using_blocks_render_method=function(){if(this._isusingnewblocksmethod===null){var t=e.all(".block-region[data-blockregion]").size(),n=e.all(".block-region").size();this._isusingnewblocksmethod=n===t,t>0&&n>0}return this._isusingnewblocksmethod},M.core.blockdraganddrop.init=function(e){this.is_using_blocks_render_method()?new o(e):new s(e)},M.core_blocks=M.core_blocks||{},M.core_blocks.init_dragdrop=function(e){M.core.blockdraganddrop.init(e)};var o=function(){o.superclass.constructor.apply(this,arguments)};o.prototype={skipnodetop:null,skipnodebottom:null,regionobjects:{},initializer:function(){var t=this.get("regions"),n=0,s,o,a,f;this.groups=["block"],this.samenodeclass=r.BLOCK,this.parentnodeclass=r.BLOCKREGION;var l=e.Node.all("body#"+r.MYINDEX+" #"+r.REGIONMAIN+" > ."+r.REGIONCONTENT);if(l.size()>0){var c=l.item(0);c.addClass(r.BLOCKREGION),c.set("id",r.REGIONCONTENT),c.one("div").addClass(r.REGIONCONTENT)}for(n in t)o=t[n],s=new u({manager:this,region:o,node:e.one("#block-region-"+o)}),this.regionobjects[o]=s,a=new e.DD.Drop({node:s.get_droptarget(),groups:this -.groups,padding:"40 240 40 240"}),f=new e.DD.Delegate({container:s.get_droptarget(),nodes:"."+r.BLOCK,target:!0,handles:[i.DRAGHANDLE],invalid:".block-hider-hide, .block-hider-show, .moveto",dragConfig:{groups:this.groups}}),f.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1}),f.dd.plug(e.Plugin.DDWinScroll),f.on("drag:mouseDown",this.enable_all_regions,this),s.change_block_move_icons(this)},get_block_id:function(e){return Number(e.get("id").replace(/inst/i,""))},get_block_region:function(e){return e.test("[data-blockregion]")||(e=e.ancestor("[data-blockregion]")),e.getData("blockregion")},get_region_object:function(e){return this.regionobjects[this.get_block_region(e)]},enable_all_regions:function(){var e=0;for(e in this.regionobjects)this.regionobjects[e].enable()},disable_regions_if_required:function(){var e=0;for(e in this.regionobjects)this.regionobjects[e].disable_if_required()},drag_start:function(e){var t=e.target;t.get("node").previous()&&t.get("node").previous().hasClass(r.SKIPBLOCK)&&(this.skipnodetop=t.get("node").previous()),t.get("node").next()&&t.get("node").next().hasClass(r.SKIPBLOCKTO)&&(this.skipnodebottom=t.get("node").next())},drop_over:function(e){var t=e.drag.get("node"),n=e.drop.get("node");n.hasClass(r.REGIONCONTENT)&&n.one("."+r.BLOCKADMINBLOCK)&&n.one("."+r.BLOCKADMINBLOCK).next("."+r.BLOCK)&&n.prepend(t)},drop_end:function(){this.skipnodetop=null,this.skipnodebottom=null,this.disable_regions_if_required()},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(t){var i=t.drag.get("node"),s=t.drop.get("node");i.previous()&&i.previous().hasClass(r.SKIPBLOCK)&&i.insert(i.previous(),"after"),this.skipnodetop&&i.insert(this.skipnodetop,"before"),this.skipnodebottom&&i.insert(this.skipnodebottom,"after");var o=M.util.add_lightbox(e,i),u={sesskey:M.cfg.sesskey,courseid:this.get("courseid"),pagelayout:this.get("pagelayout"),pagetype:this.get("pagetype"),subpage:this.get("subpage"),contextid:this.get("contextid"),action:"move",bui_moveid:this.get_block_id(i),bui_newregion:this.get_block_region(s)};this.get("cmid")&&(u.cmid=this.get("cmid")),i.next("."+r.BLOCK)&&!i.next("."+r.BLOCK).hasClass(r.BLOCKADMINBLOCK)&&(u.bui_beforeid=this.get_block_id(i.next("."+r.BLOCK))),e.io(M.cfg.wwwroot+n,{method:"POST",data:u,on:{start:function(){o.show()},success:function(t,n){window.setTimeout(function(){o.hide()},250);try{var r=e.JSON.parse(n.responseText);r.error&&new M.core.ajaxException(r)}catch(i){}},failure:function(e,t){this.ajax_failure(t),o.hide()},complete:function(){this.disable_regions_if_required()}},context:this})}},e.extend(o,M.core.dragdrop,o.prototype,{NAME:"core-blocks-dragdrop-manager",ATTRS:{courseid:{value:null},cmid:{value:null},contextid:{value:null},pagelayout:{value:null},pagetype:{value:null},subpage:{value:null},regions:{value:[]}}});var u=function(){u.superclass.constructor.apply(this,arguments)};u.prototype={initializer:function(){var t=this.get("node");t||(t=this.create_and_add_node());var n=e.one("body"),i=t.all("."+r.BLOCK).size()>0,s=this.get_has_region_class();this.set("hasblocks",i),n.hasClass(s)||n.addClass(s),n.addClass(i?this.get_used_region_class():this.get_empty_region_class()),n.removeClass(i?this.get_empty_region_class():this.get_used_region_class())},create_and_add_node:function(){var t=e.Node.create,n=this.get("region"),i=t('
').addClass(r.BLOCKREGION).setData("blockregion",n),s=this.get("manager").get("regions"),o,u=!1,a=!1,f=!1,l,c;for(o in s)s[o].match(/(pre|left)/)?u=s[o]:s[o].match(/(post|right)/)&&(a=s[o]);return u!==!1&&a!==!1&&(n===u?(c=e.one("#block-region-"+a),c&&(c.insert(i,"before"),f=!0)):(l=e.one("#block-region-"+u),l&&(l.insert(i,"after"),f=!0))),f===!1&&e.one("body").append(i),this.set("node",i),i},change_block_move_icons:function(e){var t,n;this.get("node").all("."+r.BLOCK+" a."+r.EDITINGMOVE).each(function(r){r.setStyle("cursor","move"),t=e.get_drag_handle(r.getAttribute("title"),"","icon",!0),n=t.one("img"),n.addClass("iconsmall"),n.removeClass("icon"),r.replace(t)})},get_has_region_class:function(){return"has-region-"+this.get("region")},get_empty_region_class:function(){return"empty-region-"+this.get("region")},get_used_region_class:function(){return"used-region-"+this.get("region")},get_droptarget:function(){var e=this.get("node");return e.test('[data-droptarget="1"]')?e:e.one('[data-droptarget="1"]')},enable:function(){e.one("body").addClass(this.get_used_region_class()).removeClass(this.get_empty_region_class())},disable_if_required:function(){this.get("node").all("."+r.BLOCK).size()===0&&e.one("body").addClass(this.get_empty_region_class()).removeClass(this.get_used_region_class())}},e.extend(u,e.Base,u.prototype,{NAME:"core-blocks-dragdrop-blockregion",ATTRS:{manager:{writeOnce:"initOnly",validator:function(t){return e.Lang.isObject(t)&&t instanceof o}},region:{writeOnce:"initOnly",validator:function(t){return e.Lang.isString(t)}},node:{validator:function(t){return e.Lang.isObject(t)||e.Lang.isNull(t)}},hasblocks:{value:!1,validator:function(t){return e.Lang.isBoolean(t)}}}})},"@VERSION@",{requires:["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification"]}); +YUI.add("moodle-core-blocks",function(e,t){var n="/lib/ajax/blocks.php",r={BLOCK:"block",BLOCKREGION:"block-region",BLOCKADMINBLOCK:"block_adminblock",EDITINGMOVE:"editing_move",HEADER:"header",LIGHTBOX:"lightbox",REGIONCONTENT:"region-content",SKIPBLOCK:"skip-block",SKIPBLOCKTO:"skip-block-to",MYINDEX:"page-my-index",REGIONMAIN:"region-main",BLOCKSMOVING:"blocks-moving"},i={DRAGHANDLE:"."+r.HEADER+" .commands .moodle-core-dragdrop-draghandle"},s=function(){s.superclass.constructor.apply(this,arguments)};e.extend(s,M.core.dragdrop,{skipnodetop:null,skipnodebottom:null,dragsourceregion:null,initializer:function(){this.groups=["block"],this.samenodeclass=r.BLOCK,this.parentnodeclass=r.REGIONCONTENT;var t=e.Node.all("body#"+r.MYINDEX+" #"+r.REGIONMAIN+" > ."+r.REGIONCONTENT);if(t.size()>0){var n=t.item(0);n.addClass(r.BLOCKREGION),n.set("id",r.REGIONCONTENT),n.one("div").addClass(r.REGIONCONTENT)}var s=e.Node.all("div."+r.BLOCKREGION);if(s.size()===0)return!1;if(s.size()!==this.get("regions").length){var o=e.Node.create("
").addClass(r.BLOCKREGION),u=e.Node.create("
").addClass(r.REGIONCONTENT);o.appendChild(u);var a=s.filter("#region-pre"),f=s.filter("#region-post");a.size()===0&&f.size()===1?(o.setAttrs({id:"region-pre"}),f.item(0).insert(o,"before"),s.unshift(o)):f.size()===0&&a.size()===1&&(o.setAttrs({id:"region-post"}),a.item(0).insert(o,"after"),s.push(o))}s.each(function(t){new e.DD.Drop({node:t.one("div."+r.REGIONCONTENT),groups:this.groups,padding:"40 240 40 240"});var n=new e.DD.Delegate({container:t,nodes:"."+r.BLOCK,target:!0,handles:[i.DRAGHANDLE],invalid:".block-hider-hide, .block-hider-show, .moveto",dragConfig:{groups:this.groups}});n.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1}),n.dd.plug(e.Plugin.DDWinScroll);var s=t.all("."+r.BLOCK);s.each(function(e){var t=e.one("a."+r.EDITINGMOVE);t&&(t.replace(this.get_drag_handle(t.getAttribute("title"),"","iconsmall",!0)),e.one(i.DRAGHANDLE).setStyle("cursor","move"))},this)},this)},get_block_id:function(e){return Number(e.get("id").replace(/inst/i,""))},get_block_region:function(t){var n=t.ancestor("div."+r.BLOCKREGION).get("id").replace(/region-/i,"");return e.Array.indexOf(this.get("regions"),n)===-1?(right_to_left()&&(n==="post"?n="pre":n==="pre"&&(n="post")),"side-"+n):n},get_region_id:function(e){return e.get("id").replace(/region-/i,"")},drag_start:function(t){var n=t.target;this.dragsourceregion=n.get("node").ancestor("div."+r.BLOCKREGION),n.get("node").previous()&&n.get("node").previous().hasClass(r.SKIPBLOCK)&&(this.skipnodetop=n.get("node").previous()),n.get("node").next()&&n.get("node").next().hasClass(r.SKIPBLOCKTO)&&(this.skipnodebottom=n.get("node").next()),e.one("body").addClass(r.BLOCKSMOVING)},drop_over:function(t){var n=t.drag.get("node"),i=t.drop.get("node");i.hasClass(this.parentnodeclass)&&i.one("."+r.BLOCKADMINBLOCK)&&i.one("."+r.BLOCKADMINBLOCK).next("."+r.BLOCK)&&i.prepend(n);if(this.dragsourceregion.contains(i))return!1;var s=e.one("body"),o=this.get_region_id(this.dragsourceregion);s.hasClass("side-"+o+"-only")&&s.removeClass("side-"+o+"-only"),o=this.get_region_id(i.ancestor("div."+r.BLOCKREGION)),this.dragsourceregion.all("."+r.BLOCK).size()===0&&this.dragsourceregion.get("id").match(/(region-pre|region-post)/i)&&(s.hasClass("side-"+o+"-only")||s.addClass("side-"+o+"-only"))},drag_end:function(){this.skipnodetop=null,this.skipnodebottom=null,this.dragsourceregion=null,e.one("body").removeClass(r.BLOCKSMOVING)},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(t){var i=t.drag,s=i.get("node"),o=t.drop.get("node");s.previous()&&s.previous().hasClass(r.SKIPBLOCK)&&s.insert(s.previous(),"after"),this.skipnodetop&&s.insert(this.skipnodetop,"before"),this.skipnodebottom&&s.insert(this.skipnodebottom,"after");var u=M.util.add_lightbox(e,s),a={sesskey:M.cfg.sesskey,courseid:this.get("courseid"),pagelayout:this.get("pagelayout"),pagetype:this.get("pagetype"),subpage:this.get("subpage"),contextid:this.get("contextid"),action:"move",bui_moveid:this.get_block_id(s),bui_newregion:this.get_block_region(o)};this.get("cmid")&&(a.cmid=this.get("cmid")),s.next("."+this.samenodeclass)&&!s.next("."+this.samenodeclass).hasClass(r.BLOCKADMINBLOCK)&&(a.bui_beforeid=this.get_block_id(s.next("."+this.samenodeclass))),e.io(M.cfg.wwwroot+n,{method:"POST",data:a,on:{start:function(){u.show()},success:function(t,n){window.setTimeout(function(){u.hide()},250);try{var r=e.JSON.parse(n.responseText);r.error&&new M.core.ajaxException(r)}catch(i){}},failure:function(e,t){this.ajax_failure(t),u.hide()}},context:this})}},{NAME:"core-blocks-dragdrop",ATTRS:{courseid:{value:null},cmid:{value:null},contextid:{value:null},pagelayout:{value:null},pagetype:{value:null},subpage:{value:null},regions:{value:null}}}),M.core=M.core||{},M.core.blockdraganddrop=M.core.blockdraganddrop||{},M.core.blockdraganddrop._isusingnewblocksmethod=null,M.core.blockdraganddrop.is_using_blocks_render_method=function(){if(this._isusingnewblocksmethod===null){var t=e.all(".block-region[data-blockregion]").size(),n=e.all(".block-region").size();this._isusingnewblocksmethod=n===t,t>0&&n>0&&t!==n}return this._isusingnewblocksmethod},M.core.blockdraganddrop.init=function(e){this.is_using_blocks_render_method()?new o(e):new s(e)},M.core_blocks=M.core_blocks||{},M.core_blocks.init_dragdrop=function(e){M.core.blockdraganddrop.init(e)};var o=function(){o.superclass.constructor.apply(this,arguments)};o.prototype={skipnodetop:null,skipnodebottom:null,regionobjects:{},initializer:function(){var t=this.get("regions"),n=0,s,o,a,f;this.groups=["block"],this.samenodeclass=r.BLOCK,this.parentnodeclass=r.BLOCKREGION;var l=e.Node.all("body#"+r.MYINDEX+" #"+r.REGIONMAIN+" > ."+r.REGIONCONTENT);if(l.size()>0){var c=l.item(0);c.addClass(r.BLOCKREGION),c.set("id",r.REGIONCONTENT),c.one("div").addClass(r.REGIONCONTENT)}for(n in t)o=t[n],s=new u({manager:this,region:o,node:e.one("#block-region-"+o)}),this.regionobjects[o]=s,a=new e.DD.Drop({node:s.get_droptarget(),groups +:this.groups,padding:"40 240 40 240"}),f=new e.DD.Delegate({container:s.get_droptarget(),nodes:"."+r.BLOCK,target:!0,handles:[i.DRAGHANDLE],invalid:".block-hider-hide, .block-hider-show, .moveto",dragConfig:{groups:this.groups}}),f.dd.plug(e.Plugin.DDProxy,{moveOnEnd:!1}),f.dd.plug(e.Plugin.DDWinScroll),f.on("drag:start",this.enable_all_regions,this),s.change_block_move_icons(this)},get_block_id:function(e){return Number(e.get("id").replace(/inst/i,""))},get_block_region:function(e){return e.test("[data-blockregion]")||(e=e.ancestor("[data-blockregion]")),e.getData("blockregion")},get_region_object:function(e){return this.regionobjects[this.get_block_region(e)]},enable_all_regions:function(){var e=0;for(e in this.regionobjects)this.regionobjects[e].enable()},disable_regions_if_required:function(){var e=0;for(e in this.regionobjects)this.regionobjects[e].disable_if_required()},drag_start:function(e){var t=e.target;t.get("node").previous()&&t.get("node").previous().hasClass(r.SKIPBLOCK)&&(this.skipnodetop=t.get("node").previous()),t.get("node").next()&&t.get("node").next().hasClass(r.SKIPBLOCKTO)&&(this.skipnodebottom=t.get("node").next())},drop_over:function(e){var t=e.drag.get("node"),n=e.drop.get("node");n.hasClass(r.REGIONCONTENT)&&n.one("."+r.BLOCKADMINBLOCK)&&n.one("."+r.BLOCKADMINBLOCK).next("."+r.BLOCK)&&n.prepend(t)},drop_end:function(){this.skipnodetop=null,this.skipnodebottom=null,this.disable_regions_if_required()},drag_dropmiss:function(e){this.drop_hit(e)},drop_hit:function(t){var i=t.drag.get("node"),s=t.drop.get("node");i.previous()&&i.previous().hasClass(r.SKIPBLOCK)&&i.insert(i.previous(),"after"),this.skipnodetop&&i.insert(this.skipnodetop,"before"),this.skipnodebottom&&i.insert(this.skipnodebottom,"after");var o=M.util.add_lightbox(e,i),u={sesskey:M.cfg.sesskey,courseid:this.get("courseid"),pagelayout:this.get("pagelayout"),pagetype:this.get("pagetype"),subpage:this.get("subpage"),contextid:this.get("contextid"),action:"move",bui_moveid:this.get_block_id(i),bui_newregion:this.get_block_region(s)};this.get("cmid")&&(u.cmid=this.get("cmid")),i.next("."+r.BLOCK)&&!i.next("."+r.BLOCK).hasClass(r.BLOCKADMINBLOCK)&&(u.bui_beforeid=this.get_block_id(i.next("."+r.BLOCK))),e.io(M.cfg.wwwroot+n,{method:"POST",data:u,on:{start:function(){o.show()},success:function(t,n){window.setTimeout(function(){o.hide()},250);try{var r=e.JSON.parse(n.responseText);r.error&&new M.core.ajaxException(r)}catch(i){}},failure:function(e,t){this.ajax_failure(t),o.hide()},complete:function(){this.disable_regions_if_required()}},context:this})}},e.extend(o,M.core.dragdrop,o.prototype,{NAME:"core-blocks-dragdrop-manager",ATTRS:{courseid:{value:null},cmid:{value:null},contextid:{value:null},pagelayout:{value:null},pagetype:{value:null},subpage:{value:null},regions:{value:[]}}});var u=function(){u.superclass.constructor.apply(this,arguments)};u.prototype={initializer:function(){var t=this.get("node");t||(t=this.create_and_add_node());var n=e.one("body"),i=t.all("."+r.BLOCK).size()>0,s=this.get_has_region_class();this.set("hasblocks",i),n.hasClass(s)||n.addClass(s),n.addClass(i?this.get_used_region_class():this.get_empty_region_class()),n.removeClass(i?this.get_empty_region_class():this.get_used_region_class())},create_and_add_node:function(){var t=e.Node.create,n=this.get("region"),i=t('
').addClass(r.BLOCKREGION).setData("blockregion",n),s=this.get("manager").get("regions"),o,u=!1,a=!1,f=!1,l,c;for(o in s)s[o].match(/(pre|left)/)?u=s[o]:s[o].match(/(post|right)/)&&(a=s[o]);return u!==!1&&a!==!1&&(n===u?(c=e.one("#block-region-"+a),c&&(c.insert(i,"before"),f=!0)):(l=e.one("#block-region-"+u),l&&(l.insert(i,"after"),f=!0))),f===!1&&e.one("body").append(i),this.set("node",i),i},change_block_move_icons:function(e){var t,n;this.get("node").all("."+r.BLOCK+" a."+r.EDITINGMOVE).each(function(r){r.setStyle("cursor","move"),t=e.get_drag_handle(r.getAttribute("title"),"","icon",!0),n=t.one("img"),n.addClass("iconsmall"),n.removeClass("icon"),r.replace(t)})},get_has_region_class:function(){return"has-region-"+this.get("region")},get_empty_region_class:function(){return"empty-region-"+this.get("region")},get_used_region_class:function(){return"used-region-"+this.get("region")},get_droptarget:function(){var e=this.get("node");return e.test('[data-droptarget="1"]')?e:e.one('[data-droptarget="1"]')},enable:function(){e.one("body").addClass(this.get_used_region_class()).removeClass(this.get_empty_region_class())},disable_if_required:function(){this.get("node").all("."+r.BLOCK).size()===0&&e.one("body").addClass(this.get_empty_region_class()).removeClass(this.get_used_region_class())}},e.extend(u,e.Base,u.prototype,{NAME:"core-blocks-dragdrop-blockregion",ATTRS:{manager:{writeOnce:"initOnly",validator:function(t){return e.Lang.isObject(t)&&t instanceof o}},region:{writeOnce:"initOnly",validator:function(t){return e.Lang.isString(t)}},node:{validator:function(t){return e.Lang.isObject(t)||e.Lang.isNull(t)}},hasblocks:{value:!1,validator:function(t){return e.Lang.isBoolean(t)}}}})},"@VERSION@",{requires:["base","node","io","dom","dd","dd-scroll","moodle-core-dragdrop","moodle-core-notification"]}); diff --git a/lib/yui/build/moodle-core-blocks/moodle-core-blocks.js b/lib/yui/build/moodle-core-blocks/moodle-core-blocks.js index 476975f6742..508b391b1a8 100644 --- a/lib/yui/build/moodle-core-blocks/moodle-core-blocks.js +++ b/lib/yui/build/moodle-core-blocks/moodle-core-blocks.js @@ -351,7 +351,7 @@ M.core.blockdraganddrop.is_using_blocks_render_method = function() { var goodregions = Y.all('.block-region[data-blockregion]').size(); var allregions = Y.all('.block-region').size(); this._isusingnewblocksmethod = (allregions === goodregions); - if (goodregions > 0 && allregions > 0) { + if (goodregions > 0 && allregions > 0 && goodregions !== allregions) { } } return this._isusingnewblocksmethod; @@ -490,7 +490,7 @@ MANAGER.prototype = { dragdelegation.dd.plug(Y.Plugin.DDWinScroll); // On the mouse down event we will enable all block regions so that they can be dragged to. // This is VERY important as without it dnd won't work for empty block regions. - dragdelegation.on('drag:mouseDown', this.enable_all_regions, this); + dragdelegation.on('drag:start', this.enable_all_regions, this); region.change_block_move_icons(this); } diff --git a/lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js b/lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js index 8ba11cc612a..a7592879382 100644 --- a/lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js +++ b/lib/yui/build/moodle-core-dock/moodle-core-dock-debug.js @@ -750,7 +750,9 @@ DOCK.prototype = { BODY.addClass('used-region-'+regionname); BODY.removeClass('empty-region-'+regionname); BODY.removeClass('docked-region-'+regionname); - } else { + } else if (region.all('.block_dock_placeholder').size() > 0) { + // There are no blocks in the region but there are placeholders. + // All blocks in this region have been docked. BODY.addClass('empty-region-'+regionname); BODY.addClass('docked-region-'+regionname); BODY.removeClass('used-region-'+regionname); diff --git a/lib/yui/build/moodle-core-dock/moodle-core-dock-min.js b/lib/yui/build/moodle-core-dock/moodle-core-dock-min.js index 9689bb06b65..9ee43d1b027 100644 --- a/lib/yui/build/moodle-core-dock/moodle-core-dock-min.js +++ b/lib/yui/build/moodle-core-dock/moodle-core-dock-min.js @@ -1,4 +1,4 @@ YUI.add("moodle-core-dock",function(e,t){var n="moodle-core-dock",r=e.one(e.config.doc.body),i={dock:"dock",dockspacer:"dockspacer",controls:"controls",body:"has_dock",buttonscontainer:"buttons_container",dockeditem:"dockeditem",dockeditemcontainer:"dockeditem_container",dockedtitle:"dockedtitle",activeitem:"activeitem",contentonly:"content-only",dockonload:"dock_on_load"},s={dockableblock:".block[data-instanceid][data-dockable]",blockmoveto:".block[data-instanceid][data-dockable] .moveto",panelmoveto:"#dockeditempanel .commands a.moveto",dockonload:".block."+i.dockonload,blockregion:"[data-blockregion]"},o,u,a,f,l;M.core=M.core||{},M.core.dock=M.core.dock||{},M.core.dock._dock=null,M.core.dock._dockableblocks={},M.core.dock.init=function(){e.all(s.dockableblock).each(M.core.dock.registerDockableBlock),r.delegate("click",M.core.dock.dockBlock,s.blockmoveto),r.delegate("key",M.core.dock.dockBlock,s.blockmoveto,"enter")},M.core.dock.get=function(){return this._dock===null&&(this._dock=new o),this._dock},M.core.dock.registerDockableBlock=function(e){typeof e=="object"&&typeof e.getData=="function"&&(e=e.getData("instanceid")),M.core.dock._dockableblocks[e]=new f({id:e})},M.core.dock.dockBlock=function(e){typeof e=="object"&&e.target!=="undefined"&&(e=e.target);if(typeof e=="object"){e.test(s.dockableblock)||(e=e.ancestor(s.dockableblock));if(typeof e!="object"||typeof e.getData!="function"||!!e.ancestor("."+i.dock))return;e=e.getData("instanceid")}var t=M.core.dock._dockableblocks[e];t&&t.moveToDock()},M.core.dock.fixTitleOrientation=function(t,n){var i=M.core.dock.get(),s="11px",o="rotate(270deg)",u,a,f,l;t=e.one(t);if(i.get("orientation")!=="vertical")return t.set("innerHTML",n),t;e.UA.ie>0&&e.UA.ie<8&&(M.str.langconfig.thisdirectionvertical="ver");switch(M.str.langconfig.thisdirectionvertical){case"ver":return t.set("innerHTML",n.split("").join("
"));case"ttb":o="rotate(90deg)";break;case"btt":}return e.UA.ie===8?(t.set("innerHTML",n),t.setAttribute("style","writing-mode: tb-rl; filter: flipV flipH;display:inline;"),t.addClass("filterrotate"),t):(u=e.Node.create('

'+n+"

"),r.insert(u,0),a=u.one("span").get("offsetWidth")*1.2,f=u.one("span").get("offsetHeight"),u.remove(),t.set("innerHTML",n),t.addClass("css3transform"),t.setStyles({position:"relative",fontSize:s,width:a,top:(a-f)/2}),right_to_left()?t.setStyle("left",a/2-f):t.setStyle("right",a/2-f),t.setStyles({transform:o,"-ms-transform":o,"-moz-transform":o,"-webkit-transform":o,"-o-transform":o}),l=e.Node.create("
"),l.append(t),l.setStyles({height:a+a/4,position:"relative"}),l)},M.core.dock.notifyBlockChange=function(e){if(this._dock!==null){var t=M.core.dock.get(),n=t.getActiveItem();n&&n.get("blockinstanceid")===parseInt(e,10)&&t.resizePanelIfRequired()}},o=function(){o.superclass.constructor.apply(this,arguments)},o.prototype={tabheightmanager:null,preventevent:null,delayedevent:null,dockeditems:[],dockdrawn:!1,count:0,totalcount:0,holdingareanode:null,initializer:function(){this.publish("dock:starting",{prefix:"dock",broadcast:2,emitFacade:!0,fireOnce:!0}),this.publish("dock:initialised",{prefix:"dock",broadcast:2,emitFacade:!0,fireOnce:!0}),this.publish("dock:beforedraw",{prefix:"dock",fireOnce:!0}),this.publish("dock:beforeshow",{prefix:"dock"}),this.publish("dock:shown",{prefix:"dock"}),this.publish("dock:hidden",{prefix:"dock"}),this.publish("dock:itemadded",{prefix:"dock"}),this.publish("dock:itemremoved",{prefix:"dock"}),this.publish("dock:itemschanged",{prefix:"dock"}),this.publish("dock:panelgenerated",{prefix:"dock",fireOnce:!0}),this.publish("dock:panelresizestart",{prefix:"dock"}),this.publish("dock:resizepanelcomplete",{prefix:"dock"}),this._applyThemeCustomisation(),this.fire("dock:starting"),this._ensureDockDrawn(),this.fire("dock:initialised")},_ensureDockDrawn:function(){if(this.dockdrawn===!0)return!0;var t=this._initialiseDockNode(),n={cssselector:"."+i.dockedtitle,delay:0},o={cssselector:"."+i.dockedtitle,delay:.5,iscontained:!0,preventevent:"click",preventdelay:3};return e.UA.ie>0&&e.UA.ie<7&&t.setStyle("height",t.get("winHeight")+"px"),this.fire("dock:beforedraw"),this._initialiseDockControls(),this.tabheightmanager=new a({dock:this}),e.delegate("click",this.handleEvent,this.get("dockNode"),"."+i.dockedtitle,this,n),e.delegate("mouseenter",this.handleEvent,this.get("dockNode"),"."+i.dockedtitle,this,o),this.get("dockNode").on("mouseleave",this.handleEvent,this,{cssselector:"#dock",delay:.5,iscontained:!1}),e.delegate("click",this.handleReturnToBlock,this.get("dockNode"),s.panelmoveto,this),e.delegate("click",this.handleReturnToBlock,this.get("dockNode"),s.panelmoveto,this),e.delegate("dock:actionkey",this.handleDockedItemEvent,this.get("dockNode"),"."+i.dockeditem,this),r.on("click",this.handleEvent,this,{cssselector:"body",delay:0}),this.on("dock:itemschanged",this.resizeBlockSpace,this),this.on("dock:itemschanged",this.checkDockVisibility,this),this.on("dock:itemschanged",this.resetFirstItem,this),this.dockdrawn=!0,!0},handleDockedItemEvent:function(e){if(e.type!=="dock:actionkey")return!1;var t=e.target,n="."+i.dockeditem;t.test(n)||(t=t.ancestor(n));if(!t)return!1;e.halt(),this.dockeditems[t.getAttribute("rel")].toggle(e.action)},_applyThemeCustomisation:function(){if(typeof customise_dock_for_theme=="function"){M.core_dock=this,M.core_dock.cfg={buffer:null,orientation:null,position:null,spacebeforefirstitem:null,removeallicon:null},M.core_dock.css={dock:null,dockspacer:null,controls:null,body:null,buttonscontainer:null,dockeditem:null,dockeditemcontainer:null,dockedtitle:null,activeitem:null};try{customise_dock_for_theme(this)}catch(t){}var n,r,s=!1,o={buffer:"bufferPanel",orientation:"orientation",position:"position",spacebeforefirstitem:"bufferBeforeFirstItem",removeallicon:"undockAllIconUrl"};for(n in M.core_dock.cfg)if(e.Lang.isString(n)&&o[n]){r=M.core_dock.cfg[n];if(r===null)continue; -s||(s=!0),this.set(o[n],r)}for(n in M.core_dock.css)if(e.Lang.isString(n)){r=M.core_dock.css[n];if(r===null)continue;s||(s=!0),i[n]=r}}},_initialiseDockNode:function(){var t=this.get("dockNode"),n=i.dock+"_"+this.get("position")+"_"+this.get("orientation"),o=e.Node.create("
").setStyles({display:"none"}),u=this.get("buttonsNode"),a=this.get("itemContainerNode");return t||(t=e.one("#"+i.dock)),t||(t=e.Node.create('
'),r.append(t)),t.setAttribute("role","menubar").addClass(n),e.all(s.dockonload).size()===0?t.addClass("nothingdocked"):(n=i.body+"_"+this.get("position")+"_"+this.get("orientation"),r.addClass(i.body).addClass()),u||(u=t.one("."+i.buttonscontainer)),u||(u=e.Node.create('
'),t.append(u)),a||(a=t.one("."+i.dockeditemcontainer)),a||(a=e.Node.create('
'),u.append(a)),r.append(o),this.holdingareanode=o,this.set("dockNode",t),this.set("buttonsNode",u),this.set("itemContainerNode",a),t},_initialiseDockControls:function(){var t=e.Node.create(''+M.util.get_string(');t.setAttribute("src",this.get("undockAllIconUrl")),t.on("removeall|click",this.removeAll,this),t.on("dock:actionkey",this.removeAll,this,{actions:{enter:!0}}),this.get("buttonsNode").append(e.Node.create('
').append(t))},getPanel:function(){var t=this.get("panel");return t||(t=new u({dock:this}),t.on("panel:visiblechange",this.resize,this),e.on("windowresize",this.resize,this),this.set("panel",t),this.fire("dock:panelgenerated")),t},resizePanelIfRequired:function(){this.resize();var e=this.get("panel");e&&e.correctWidth()},handleEvent:function(e,t){var n=this.getActiveItem(),r,i,s=/^dock_item_(\d+)_title$/,o=this;if(t.cssselector==="body")this.get("dockNode").contains(e.target)||n&&n.hide();else{e.target.test(t.cssselector)?r=e.target:r=e.target.ancestor(t.cssselector);if(!r)return!0;if(this.preventevent!==null&&e.type===this.preventevent)return!0;t.preventevent&&(this.preventevent=t.preventevent,t.preventdelay&&setTimeout(function(){o.preventevent=null},t.preventdelay*1e3)),this.delayedevent&&this.delayedevent.timeout&&(clearTimeout(this.delayedevent.timeout),this.delayedevent.event.detach(),this.delayedevent=null);if(t.delay>0)return this.delayEvent(e,t,r);i=r.get("id"),i.match(s)?(n=this.dockeditems[i.replace(s,"$1")],n.active?n.hide():n.show()):n&&n.hide()}return!0},delayEvent:function(e,t,n){var i=this;return i.delayedevent=function(){return{target:n,event:r.on("mousemove",function(e){i.delayedevent.target=e.target}),timeout:null}}(i),i.delayedevent.timeout=setTimeout(function(){i.delayedevent.timeout=null,i.delayedevent.event.detach(),t.iscontained===i.get("dockNode").contains(i.delayedevent.target)&&i.handleEvent(e,{cssselector:t.cssselector,delay:0,iscontained:t.iscontained})},t.delay*1e3),!0},resizeBlockSpace:function(){if(e.all(s.dockonload).size()>0)return;var t=[],n=0,o=!0,u=!1,a;e.all(s.blockregion).each(function(e){var t=e.getData("blockregion");e.all(".block").size()>0?(n++,r.addClass("used-region-"+t),r.removeClass("empty-region-"+t),r.removeClass("docked-region-"+t)):(r.addClass("empty-region-"+t),r.addClass("docked-region-"+t),r.removeClass("used-region-"+t))}),e.all(".block-region").each(function(e){if(e.test(s.blockregion))return;var r=e.all(".block").size()>0;r&&n++,o=!1,t[e.get("id")]={hasblocks:r,bodyclass:e.get("id").replace(/^region\-/,"side-")+"-only"}}),r.hasClass("blocks-moving")&&(u=!0),n===0&&u===!1?r.addClass(i.contentonly):r.removeClass(i.contentonly);if(!o)if(n===0&&u===!1)for(a in t)t[a].bodyclass&&r.removeClass(t[a].bodyclass);else if(n===1&&u===!1)for(a in t)t[a].bodyclass&&(t[a].hasblocks?r.addClass(t[a].bodyclass):r.removeClass(t[a].bodyclass));else for(a in t)t[a].bodyclass&&r.removeClass(t[a].bodyclass)},add:function(e){e.set("id",this.totalcount),this.count++,this.totalcount++,this.dockeditems[e.get("id")]=e,this.dockeditems[e.get("id")].draw(),this.fire("dock:itemadded",e),this.fire("dock:itemschanged",e)},append:function(e){this.get("itemContainerNode").append(e)},handleReturnToBlock:function(e){e.halt(),this.remove(this.getActiveItem().get("id"))},remove:function(e){return this.dockeditems[e]?(this.dockeditems[e].remove(),delete this.dockeditems[e],this.count--,this.fire("dock:itemremoved",e),this.fire("dock:itemschanged",e),!0):!1},resetFirstItem:function(){this.get("dockNode").all("."+i.dockeditem+".firstdockitem").removeClass("firstdockitem"),this.get("dockNode").one("."+i.dockeditem)&&this.get("dockNode").one("."+i.dockeditem).addClass("firstdockitem")},removeAll:function(){var t;for(t in this.dockeditems)(e.Lang.isNumber(t)||e.Lang.isString(t))&&this.remove(t);return!0},hideActive:function(){var e=this.getActiveItem();e&&e.hide()},checkDockVisibility:function(){var e=i.body+"_"+this.get("position")+"_"+this.get("orientation");this.count?(this.fire("dock:beforeshow"),this.get("dockNode").removeClass("nothingdocked"),r.addClass(i.body).addClass(e),this.fire("dock:shown")):(this.get("dockNode").addClass("nothingdocked"),r.removeClass(i.body).removeClass(),this.fire("dock:hidden"))},resize:function(){var t=this.getPanel(),n=this.getActiveItem(),i,s,o,u,a,f,l,c,h,p;return!t.get("visible")||!n?!0:(this.fire("dock:panelresizestart"),this.get("orientation")==="vertical"&&(i=this.get("bufferPanel"),s=parseInt(r.get("winHeight"),10)-i*2,o=this.get("dockNode").getY(),u=n.get("dockTitleNode").getY()-o-i,a=this.get("itemContainerNode").getY(),f=a-o+this.get("buttonsNode").get("offsetHeight"),l=t.get("bodyNode").get("scrollTop"),t.get("bodyNode").setStyle("height","auto"),t.get("node").removeClass("oversized_content"),c=t.get("node").get("offsetHeight"),e.UA.ie>0&&e.UA.ie<7?t.setTop(n.get("dockTitleNode").getY()):c>s?(t.setTop(i-f),t.get("bodyNode").setStyle("height",s-t.get("headerNode").get("offsetHeight")+"px"),t.get("node").addClass("oversized_content")):c>s-(u-i)?t.setTop(u-f-(c-(s-u))+ -i):t.setTop(u-f+i),l&&t.get("bodyNode").set("scrollTop",l)),this.get("position")==="right"?t.get("node").setStyle("left",-t.get("offsetWidth")+"px"):this.get("position")==="top"&&(h=this.get("dockNode").getX(),p=n.get("dockTitleNode").getX()-h,t.get("node").setStyle("left",p+"px")),this.fire("dock:resizepanelcomplete"),!0)},getActiveItem:function(){var e;for(e in this.dockeditems)if(this.dockeditems[e].active)return this.dockeditems[e];return!1},addToHoldingArea:function(e){this.holdingareanode.append(e)}},e.extend(o,e.Base,o.prototype,{NAME:"moodle-core-dock",ATTRS:{dockNode:{writeOnce:!0},panel:{writeOnce:!0},buttonsNode:{writeOnce:!0},itemContainerNode:{writeOnce:!0},bufferPanel:{value:10,validator:e.Lang.isNumber},position:{value:"left",validator:e.Lang.isString},orientation:{value:"vertical",validator:e.Lang.isString,setter:function(e){return e.match(/^vertical$/i)?"vertical":"horizontal"}},bufferBeforeFirstItem:{value:10,validator:e.Lang.isNumber},undockAllIconUrl:{value:M.util.image_url("t/dock_to_block","moodle"),validator:e.Lang.isString}}}),e.augment(o,e.EventTarget),u=function(){u.superclass.constructor.apply(this,arguments)},u.prototype={created:!1,initializer:function(){this.publish("dockpanel:beforeshow",{prefix:"dockpanel"}),this.publish("dockpanel:shown",{prefix:"dockpanel"}),this.publish("dockpanel:beforehide",{prefix:"dockpanel"}),this.publish("dockpanel:hidden",{prefix:"dockpanel"}),this.publish("dockpanel:visiblechange",{prefix:"dockpanel"})},create:function(){if(this.created)return!0;this.created=!0;var t=this.get("dock"),n=t.get("dockNode");this.set("node",e.Node.create('
')),this.set("contentNode",e.Node.create('
')),this.set("headerNode",e.Node.create('
')),this.set("bodyNode",e.Node.create('
')),n.append(this.get("node").append(this.get("contentNode").append(this.get("headerNode")).append(this.get("bodyNode"))))},show:function(){this.create(),this.fire("dockpanel:beforeshow"),this.set("visible",!0),this.get("node").removeClass("dockitempanel_hidden"),this.fire("dockpanel:shown"),this.fire("dockpanel:visiblechange")},hide:function(){this.fire("dockpanel:beforehide"),this.set("visible",!1),this.get("node").addClass("dockitempanel_hidden"),this.fire("dockpanel:hidden"),this.fire("dockpanel:visiblechange")},setHeader:function(t){this.create();var n=this.get("headerNode"),r;n.setContent(t);if(arguments.length>1)for(r=1;r0&&e.UA.ie<7?this.get("node").setY(t):this.get("node").setStyle("top",t.toString()+"px")},correctWidth:function(){var e=this.get("bodyNode"),t=e.get("clientWidth"),n=e.get("scrollWidth"),r=e.get("offsetWidth"),i=t,s=Math.round(e.get("winWidth")*.8);n>t&&(i=t+(n-t)+(r-t)*2+10),i>s&&(i=s),i>r&&this.get("node").setStyle("width",i+"px")}},e.extend(u,e.Base,u.prototype,{NAME:"moodle-core-dock-panel",ATTRS:{dock:{writeOnce:"initOnly"},node:{value:null},contentNode:{value:null},headerNode:{value:null},bodyNode:{value:null},visible:{value:!1}}}),e.augment(u,e.EventTarget),a=function(){a.superclass.constructor.apply(this,arguments)},a.prototype={initializer:function(){var t=this.get("dock");t.on("dock:itemschanged",this.checkSizing,this),e.on("windowresize",this.checkSizing,this)},checkSizing:function(){var t=this.get("dock"),n=t.get("dockNode"),r=t.dockeditems,s=parseInt(n.one(".dockeditem_container").getStyle("marginTop").replace("/[^0-9]+$/",""),10),o=n.get("offsetHeight")-s,u=n.one(".controls").get("offsetHeight"),a=t.get("bufferPanel")*3,f=o-u-a-r.length*2,l=0,c,h;if(r.length>0){for(c in r)if(e.Lang.isNumber(c)||e.Lang.isString(c))h=e.one(r[c].get("title")).ancestor("."+i.dockedtitle),h&&(this.get("enabled")&&h.setStyle("height","auto"),l+=h.get("offsetHeight")||0);l>f&&this.enable(f)}},enable:function(t){var n=this.get("dock"),r=n.dockeditems,s=n.count,o=0,u=0,a,f,l,c;this.set("enabled",!0);for(a in r)if(e.Lang.isNumber(a)||e.Lang.isString(a)){f=e.one(r[a].get("title")).ancestor("."+i.dockedtitle);if(!f)continue;l=Math.floor((t-u)/(s-o)),c=f.get("offsetHeight"),f.setStyle("overflow","hidden"),c>l?(f.setStyle("height",l+"px"),u+=l):u+=c,o++}}},e.extend(a,e.Base,a.prototype,{NAME:"moodle-core-tabheightmanager",ATTRS:{dock:{writeOnce:"initOnly"},enabled:{value:!1}}}),e.Event.define("dock:actionkey",{_event:e.UA.webkit||e.UA.ie?"keydown":"keypress",_keys:{37:"collapse",39:"expand",32:"toggle",13:"enter"},_keyHandler:function(e,t,n){var r;n.actions?r=n.actions:r={collapse:!0,expand:!0,toggle:!0,enter:!0},this._keys[e.keyCode]&&r[this._keys[e.keyCode]]&&(e.action=this._keys[e.keyCode],t.fire(e))},on:function(e,t,n){t.args===null?t._detacher=e.on(this._event,this._keyHandler,this,n,{actions:!1}):t._detacher=e.on(this._event,this._keyHandler,this,n,t.args[0])},detach:function(e,t){t._detacher.detach()},delegate:function(e,t,n,r){t.args===null?t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,{actions:!1}):t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,t.args[0])},detachDelegate:function(e,t){t._delegateDetacher.detach()}}),f=function(){f.superclass.constructor.apply(this,arguments)},f.prototype={contentplaceholder:null,contentskipanchor:null,cachedcontentnode:null,skipsetposition:!0,dockitem:null,initializer:function(){var t=e.one("#inst"+this.get("id")),n;return t?(M.core.dock.ensureMoveToIconExists(t),t.hasClass(i.dockonload)&&(t.removeClass(i.dockonload),n=t.one(".header .title .commands"),n||(n=e.Node.create('
'),t.one(".header .title")&&t.one(".header .title").append(n)),this.moveToDock(null,n)),this.skipsetposition=!1,!0):!1},_getBlockClass:function(t){var n=t.getData("block"),r,i;return e.Lang.isString(n)&&n!==""?n:(r=t.getAttribute("className" -).toString(),i=/(^| )block_([^ ]+)/.exec(r),i?i[2]:i)},moveToDock:function(t){t&&t.halt(!0);var n=M.core.dock.get(),r=this.get("id"),i=e.one("#inst"+r).one(".content"),s=right_to_left()?"t/dock_to_block_rtl":"t/dock_to_block",o=location.href.match(/\?/)?"&":"?",u,a,f,c;if(!i)return;this.recordBlockState(),u=this.cachedcontentnode.one(".title h2").cloneNode(!0),a=this.cachedcontentnode.one(".title .commands").cloneNode(!0),f=e.Node.create("").setAttrs({alt:e.Escape.html(M.str.block.undockitem),title:e.Escape.html(M.util.get_string("undockblock","block",u.get("innerHTML"))),src:M.util.image_url(s,"moodle")}),c=e.Node.create('').setAttrs({href:e.config.win.location.href+o+"dock="+r}),c.append(f),a.append(c.append(f)),this.dockitem=new l({block:this,dock:n,blockinstanceid:r,title:u,contents:i,commands:a,blockclass:this._getBlockClass(e.one("#inst"+r))}),n.add(this.dockitem),this.skipsetposition||M.util.set_user_preference("docked_block_instance_"+r,1),this.set("isDocked",!0)},recordBlockState:function(){var t=this.get("id"),n=M.core.dock.get(),r=e.one("#inst"+t),i=r.previous();i.hasClass("skip-block")&&(this.contentskipanchor=i,this.contentskipanchor.hide()),this.cachedcontentnode=r,this.contentplaceholder=e.Node.create('
'),r.replace(this.contentplaceholder),n.addToHoldingArea(r),r=null,this.cachedcontentnode.one(".title .commands")||this.cachedcontentnode.one(".title").append(e.Node.create('
'))},returnToPage:function(){var t=this.get("id"),n;return this.contentskipanchor&&this.contentskipanchor.show(),this.cachedcontentnode.one(".header")?this.cachedcontentnode.one(".header").insert(this.dockitem.get("contents"),"after"):this.cachedcontentnode.insert(this.dockitem.get("contents")),this.contentplaceholder.replace(this.cachedcontentnode),this.cachedcontentnode=e.one("#"+this.cachedcontentnode.get("id")),n=this.dockitem.get("commands"),n&&(n.all(".hidepanelicon").remove(),n.all(".moveto").remove(),n.remove()),this.cachedcontentnode=null,M.util.set_user_preference("docked_block_instance_"+t,0),this.set("isDocked",!1),!0}},e.extend(f,e.Base,f.prototype,{NAME:"moodle-core-dock-block",ATTRS:{id:{writeOnce:"initOnly",setter:function(e){return parseInt(e,10)}},isDocked:{value:!1}}}),l=function(){l.superclass.constructor.apply(this,arguments)},l.prototype={active:!1,initializer:function(){var t=this.get("title"),n,r;this.publish("dockeditem:drawstart",{prefix:"dockeditem"}),this.publish("dockeditem:drawcomplete",{prefix:"dockeditem"}),this.publish("dockeditem:showstart",{prefix:"dockeditem"}),this.publish("dockeditem:showcomplete",{prefix:"dockeditem"}),this.publish("dockeditem:hidestart",{prefix:"dockeditem"}),this.publish("dockeditem:hidecomplete",{prefix:"dockeditem"}),this.publish("dockeditem:itemremoved",{prefix:"dockeditem"}),t&&(r=t.get("nodeName"),n=t.cloneNode(!0),t=e.Node.create("<"+r+">"),t=M.core.dock.fixTitleOrientation(t,n.get("text")),this.set("title",t),this.set("titlestring",n))},draw:function(){var t=e.Node.create,n=this.get("dock"),r=n.count,s,o,u,a,f=this.get("id");return this.fire("dockeditem:drawstart"),s=t(''),s.append(this.get("title")),o=t('
'),r===1&&o.addClass("firstdockitem"),o.append(s),n.append(o),a=t(''+M.str.block.hidepanel+''),a.setAttribute("src",M.util.image_url("t/dockclose","moodle")),u=t('').append(a),u.on("forceclose|click",this.hide,this),u.on("dock:actionkey",this.hide,this,{actions:{enter:!0,toggle:!0}}),this.get("commands").append(u),this.set("dockTitleNode",s),this.set("dockItemNode",o),this.fire("dockeditem:drawcomplete"),!0},show:function(){var t=this.get("dock"),n=t.getPanel(),r=this.get("dockTitleNode");return t.hideActive(),this.fire("dockeditem:showstart"),n.setHeader(this.get("titlestring"),this.get("commands")),n.setBody(e.Node.create('
').append(this.get("contents"))),n.show(),n.correctWidth(),this.active=!0,r.addClass(i.activeitem),r.set("aria-expanded","true"),this.fire("dockeditem:showcomplete"),t.resize(),!0},hide:function(){this.fire("dockeditem:hidestart"),this.active&&(this.active=!1,this.get("dock").getPanel().hide()),this.get("dockTitleNode").removeClass(i.activeitem).set("aria-expanded","false"),this.fire("dockeditem:hidecomplete")},toggle:function(e){var t=this.get("dockTitleNode");t.hasClass(i.activeitem)&&e!=="expand"?this.hide():!t.hasClass(i.activeitem)&&e!=="collapse"&&this.show()},remove:function(){this.hide(),this.get("block").returnToPage(),this.get("dockItemNode").remove(),this.fire("dockeditem:itemremoved")},_getLogDescription:function(){return this.get("titlestring").get("innerHTML")+" ("+this.get("blockinstanceid")+")"}},e.extend(l,e.Base,l.prototype,{NAME:"moodle-core-dock-dockeditem",ATTRS:{block:{writeOnce:"initOnly"},dock:{writeOnce:"initOnly"},id:{},blockinstanceid:{writeOnce:"initOnly",setter:function(e){return parseInt(e,10)}},title:{value:null},titlestring:{value:null},contents:{writeOnce:"initOnly"},commands:{writeOnce:"initOnly"},blockclass:{writeOnce:"initOnly"},dockTitleNode:{value:null},dockItemNode:{value:null},dockcontainerNode:{value:null}}}),e.augment(l,e.EventTarget)},"@VERSION@",{requires:["base","node","event-custom","event-mouseenter","event-resize","escape","moodle-core-dock-loader"]}); +s||(s=!0),this.set(o[n],r)}for(n in M.core_dock.css)if(e.Lang.isString(n)){r=M.core_dock.css[n];if(r===null)continue;s||(s=!0),i[n]=r}}},_initialiseDockNode:function(){var t=this.get("dockNode"),n=i.dock+"_"+this.get("position")+"_"+this.get("orientation"),o=e.Node.create("
").setStyles({display:"none"}),u=this.get("buttonsNode"),a=this.get("itemContainerNode");return t||(t=e.one("#"+i.dock)),t||(t=e.Node.create('
'),r.append(t)),t.setAttribute("role","menubar").addClass(n),e.all(s.dockonload).size()===0?t.addClass("nothingdocked"):(n=i.body+"_"+this.get("position")+"_"+this.get("orientation"),r.addClass(i.body).addClass()),u||(u=t.one("."+i.buttonscontainer)),u||(u=e.Node.create('
'),t.append(u)),a||(a=t.one("."+i.dockeditemcontainer)),a||(a=e.Node.create('
'),u.append(a)),r.append(o),this.holdingareanode=o,this.set("dockNode",t),this.set("buttonsNode",u),this.set("itemContainerNode",a),t},_initialiseDockControls:function(){var t=e.Node.create(''+M.util.get_string(');t.setAttribute("src",this.get("undockAllIconUrl")),t.on("removeall|click",this.removeAll,this),t.on("dock:actionkey",this.removeAll,this,{actions:{enter:!0}}),this.get("buttonsNode").append(e.Node.create('
').append(t))},getPanel:function(){var t=this.get("panel");return t||(t=new u({dock:this}),t.on("panel:visiblechange",this.resize,this),e.on("windowresize",this.resize,this),this.set("panel",t),this.fire("dock:panelgenerated")),t},resizePanelIfRequired:function(){this.resize();var e=this.get("panel");e&&e.correctWidth()},handleEvent:function(e,t){var n=this.getActiveItem(),r,i,s=/^dock_item_(\d+)_title$/,o=this;if(t.cssselector==="body")this.get("dockNode").contains(e.target)||n&&n.hide();else{e.target.test(t.cssselector)?r=e.target:r=e.target.ancestor(t.cssselector);if(!r)return!0;if(this.preventevent!==null&&e.type===this.preventevent)return!0;t.preventevent&&(this.preventevent=t.preventevent,t.preventdelay&&setTimeout(function(){o.preventevent=null},t.preventdelay*1e3)),this.delayedevent&&this.delayedevent.timeout&&(clearTimeout(this.delayedevent.timeout),this.delayedevent.event.detach(),this.delayedevent=null);if(t.delay>0)return this.delayEvent(e,t,r);i=r.get("id"),i.match(s)?(n=this.dockeditems[i.replace(s,"$1")],n.active?n.hide():n.show()):n&&n.hide()}return!0},delayEvent:function(e,t,n){var i=this;return i.delayedevent=function(){return{target:n,event:r.on("mousemove",function(e){i.delayedevent.target=e.target}),timeout:null}}(i),i.delayedevent.timeout=setTimeout(function(){i.delayedevent.timeout=null,i.delayedevent.event.detach(),t.iscontained===i.get("dockNode").contains(i.delayedevent.target)&&i.handleEvent(e,{cssselector:t.cssselector,delay:0,iscontained:t.iscontained})},t.delay*1e3),!0},resizeBlockSpace:function(){if(e.all(s.dockonload).size()>0)return;var t=[],n=0,o=!0,u=!1,a;e.all(s.blockregion).each(function(e){var t=e.getData("blockregion");e.all(".block").size()>0?(n++,r.addClass("used-region-"+t),r.removeClass("empty-region-"+t),r.removeClass("docked-region-"+t)):e.all(".block_dock_placeholder").size()>0&&(r.addClass("empty-region-"+t),r.addClass("docked-region-"+t),r.removeClass("used-region-"+t))}),e.all(".block-region").each(function(e){if(e.test(s.blockregion))return;var r=e.all(".block").size()>0;r&&n++,o=!1,t[e.get("id")]={hasblocks:r,bodyclass:e.get("id").replace(/^region\-/,"side-")+"-only"}}),r.hasClass("blocks-moving")&&(u=!0),n===0&&u===!1?r.addClass(i.contentonly):r.removeClass(i.contentonly);if(!o)if(n===0&&u===!1)for(a in t)t[a].bodyclass&&r.removeClass(t[a].bodyclass);else if(n===1&&u===!1)for(a in t)t[a].bodyclass&&(t[a].hasblocks?r.addClass(t[a].bodyclass):r.removeClass(t[a].bodyclass));else for(a in t)t[a].bodyclass&&r.removeClass(t[a].bodyclass)},add:function(e){e.set("id",this.totalcount),this.count++,this.totalcount++,this.dockeditems[e.get("id")]=e,this.dockeditems[e.get("id")].draw(),this.fire("dock:itemadded",e),this.fire("dock:itemschanged",e)},append:function(e){this.get("itemContainerNode").append(e)},handleReturnToBlock:function(e){e.halt(),this.remove(this.getActiveItem().get("id"))},remove:function(e){return this.dockeditems[e]?(this.dockeditems[e].remove(),delete this.dockeditems[e],this.count--,this.fire("dock:itemremoved",e),this.fire("dock:itemschanged",e),!0):!1},resetFirstItem:function(){this.get("dockNode").all("."+i.dockeditem+".firstdockitem").removeClass("firstdockitem"),this.get("dockNode").one("."+i.dockeditem)&&this.get("dockNode").one("."+i.dockeditem).addClass("firstdockitem")},removeAll:function(){var t;for(t in this.dockeditems)(e.Lang.isNumber(t)||e.Lang.isString(t))&&this.remove(t);return!0},hideActive:function(){var e=this.getActiveItem();e&&e.hide()},checkDockVisibility:function(){var e=i.body+"_"+this.get("position")+"_"+this.get("orientation");this.count?(this.fire("dock:beforeshow"),this.get("dockNode").removeClass("nothingdocked"),r.addClass(i.body).addClass(e),this.fire("dock:shown")):(this.get("dockNode").addClass("nothingdocked"),r.removeClass(i.body).removeClass(),this.fire("dock:hidden"))},resize:function(){var t=this.getPanel(),n=this.getActiveItem(),i,s,o,u,a,f,l,c,h,p;return!t.get("visible")||!n?!0:(this.fire("dock:panelresizestart"),this.get("orientation")==="vertical"&&(i=this.get("bufferPanel"),s=parseInt(r.get("winHeight"),10)-i*2,o=this.get("dockNode").getY(),u=n.get("dockTitleNode").getY()-o-i,a=this.get("itemContainerNode").getY(),f=a-o+this.get("buttonsNode").get("offsetHeight"),l=t.get("bodyNode").get("scrollTop"),t.get("bodyNode").setStyle("height","auto"),t.get("node").removeClass("oversized_content"),c=t.get("node").get("offsetHeight"),e.UA.ie>0&&e.UA.ie<7?t.setTop(n.get("dockTitleNode").getY()):c>s?(t.setTop(i-f),t.get("bodyNode").setStyle("height",s-t.get("headerNode").get("offsetHeight")+"px"),t.get("node").addClass("oversized_content" +)):c>s-(u-i)?t.setTop(u-f-(c-(s-u))+i):t.setTop(u-f+i),l&&t.get("bodyNode").set("scrollTop",l)),this.get("position")==="right"?t.get("node").setStyle("left",-t.get("offsetWidth")+"px"):this.get("position")==="top"&&(h=this.get("dockNode").getX(),p=n.get("dockTitleNode").getX()-h,t.get("node").setStyle("left",p+"px")),this.fire("dock:resizepanelcomplete"),!0)},getActiveItem:function(){var e;for(e in this.dockeditems)if(this.dockeditems[e].active)return this.dockeditems[e];return!1},addToHoldingArea:function(e){this.holdingareanode.append(e)}},e.extend(o,e.Base,o.prototype,{NAME:"moodle-core-dock",ATTRS:{dockNode:{writeOnce:!0},panel:{writeOnce:!0},buttonsNode:{writeOnce:!0},itemContainerNode:{writeOnce:!0},bufferPanel:{value:10,validator:e.Lang.isNumber},position:{value:"left",validator:e.Lang.isString},orientation:{value:"vertical",validator:e.Lang.isString,setter:function(e){return e.match(/^vertical$/i)?"vertical":"horizontal"}},bufferBeforeFirstItem:{value:10,validator:e.Lang.isNumber},undockAllIconUrl:{value:M.util.image_url("t/dock_to_block","moodle"),validator:e.Lang.isString}}}),e.augment(o,e.EventTarget),u=function(){u.superclass.constructor.apply(this,arguments)},u.prototype={created:!1,initializer:function(){this.publish("dockpanel:beforeshow",{prefix:"dockpanel"}),this.publish("dockpanel:shown",{prefix:"dockpanel"}),this.publish("dockpanel:beforehide",{prefix:"dockpanel"}),this.publish("dockpanel:hidden",{prefix:"dockpanel"}),this.publish("dockpanel:visiblechange",{prefix:"dockpanel"})},create:function(){if(this.created)return!0;this.created=!0;var t=this.get("dock"),n=t.get("dockNode");this.set("node",e.Node.create('
')),this.set("contentNode",e.Node.create('
')),this.set("headerNode",e.Node.create('
')),this.set("bodyNode",e.Node.create('
')),n.append(this.get("node").append(this.get("contentNode").append(this.get("headerNode")).append(this.get("bodyNode"))))},show:function(){this.create(),this.fire("dockpanel:beforeshow"),this.set("visible",!0),this.get("node").removeClass("dockitempanel_hidden"),this.fire("dockpanel:shown"),this.fire("dockpanel:visiblechange")},hide:function(){this.fire("dockpanel:beforehide"),this.set("visible",!1),this.get("node").addClass("dockitempanel_hidden"),this.fire("dockpanel:hidden"),this.fire("dockpanel:visiblechange")},setHeader:function(t){this.create();var n=this.get("headerNode"),r;n.setContent(t);if(arguments.length>1)for(r=1;r0&&e.UA.ie<7?this.get("node").setY(t):this.get("node").setStyle("top",t.toString()+"px")},correctWidth:function(){var e=this.get("bodyNode"),t=e.get("clientWidth"),n=e.get("scrollWidth"),r=e.get("offsetWidth"),i=t,s=Math.round(e.get("winWidth")*.8);n>t&&(i=t+(n-t)+(r-t)*2+10),i>s&&(i=s),i>r&&this.get("node").setStyle("width",i+"px")}},e.extend(u,e.Base,u.prototype,{NAME:"moodle-core-dock-panel",ATTRS:{dock:{writeOnce:"initOnly"},node:{value:null},contentNode:{value:null},headerNode:{value:null},bodyNode:{value:null},visible:{value:!1}}}),e.augment(u,e.EventTarget),a=function(){a.superclass.constructor.apply(this,arguments)},a.prototype={initializer:function(){var t=this.get("dock");t.on("dock:itemschanged",this.checkSizing,this),e.on("windowresize",this.checkSizing,this)},checkSizing:function(){var t=this.get("dock"),n=t.get("dockNode"),r=t.dockeditems,s=parseInt(n.one(".dockeditem_container").getStyle("marginTop").replace("/[^0-9]+$/",""),10),o=n.get("offsetHeight")-s,u=n.one(".controls").get("offsetHeight"),a=t.get("bufferPanel")*3,f=o-u-a-r.length*2,l=0,c,h;if(r.length>0){for(c in r)if(e.Lang.isNumber(c)||e.Lang.isString(c))h=e.one(r[c].get("title")).ancestor("."+i.dockedtitle),h&&(this.get("enabled")&&h.setStyle("height","auto"),l+=h.get("offsetHeight")||0);l>f&&this.enable(f)}},enable:function(t){var n=this.get("dock"),r=n.dockeditems,s=n.count,o=0,u=0,a,f,l,c;this.set("enabled",!0);for(a in r)if(e.Lang.isNumber(a)||e.Lang.isString(a)){f=e.one(r[a].get("title")).ancestor("."+i.dockedtitle);if(!f)continue;l=Math.floor((t-u)/(s-o)),c=f.get("offsetHeight"),f.setStyle("overflow","hidden"),c>l?(f.setStyle("height",l+"px"),u+=l):u+=c,o++}}},e.extend(a,e.Base,a.prototype,{NAME:"moodle-core-tabheightmanager",ATTRS:{dock:{writeOnce:"initOnly"},enabled:{value:!1}}}),e.Event.define("dock:actionkey",{_event:e.UA.webkit||e.UA.ie?"keydown":"keypress",_keys:{37:"collapse",39:"expand",32:"toggle",13:"enter"},_keyHandler:function(e,t,n){var r;n.actions?r=n.actions:r={collapse:!0,expand:!0,toggle:!0,enter:!0},this._keys[e.keyCode]&&r[this._keys[e.keyCode]]&&(e.action=this._keys[e.keyCode],t.fire(e))},on:function(e,t,n){t.args===null?t._detacher=e.on(this._event,this._keyHandler,this,n,{actions:!1}):t._detacher=e.on(this._event,this._keyHandler,this,n,t.args[0])},detach:function(e,t){t._detacher.detach()},delegate:function(e,t,n,r){t.args===null?t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,{actions:!1}):t._delegateDetacher=e.delegate(this._event,this._keyHandler,r,this,n,t.args[0])},detachDelegate:function(e,t){t._delegateDetacher.detach()}}),f=function(){f.superclass.constructor.apply(this,arguments)},f.prototype={contentplaceholder:null,contentskipanchor:null,cachedcontentnode:null,skipsetposition:!0,dockitem:null,initializer:function(){var t=e.one("#inst"+this.get("id")),n;return t?(M.core.dock.ensureMoveToIconExists(t),t.hasClass(i.dockonload)&&(t.removeClass(i.dockonload),n=t.one(".header .title .commands"),n||(n=e.Node.create('
'),t.one(".header .title")&&t.one(".header .title").append(n)),this.moveToDock(null,n)),this.skipsetposition=!1,!0):!1},_getBlockClass:function(t){var n=t.getData("block"),r,i;return e.Lang.isString +(n)&&n!==""?n:(r=t.getAttribute("className").toString(),i=/(^| )block_([^ ]+)/.exec(r),i?i[2]:i)},moveToDock:function(t){t&&t.halt(!0);var n=M.core.dock.get(),r=this.get("id"),i=e.one("#inst"+r).one(".content"),s=right_to_left()?"t/dock_to_block_rtl":"t/dock_to_block",o=location.href.match(/\?/)?"&":"?",u,a,f,c;if(!i)return;this.recordBlockState(),u=this.cachedcontentnode.one(".title h2").cloneNode(!0),a=this.cachedcontentnode.one(".title .commands").cloneNode(!0),f=e.Node.create("").setAttrs({alt:e.Escape.html(M.str.block.undockitem),title:e.Escape.html(M.util.get_string("undockblock","block",u.get("innerHTML"))),src:M.util.image_url(s,"moodle")}),c=e.Node.create('').setAttrs({href:e.config.win.location.href+o+"dock="+r}),c.append(f),a.append(c.append(f)),this.dockitem=new l({block:this,dock:n,blockinstanceid:r,title:u,contents:i,commands:a,blockclass:this._getBlockClass(e.one("#inst"+r))}),n.add(this.dockitem),this.skipsetposition||M.util.set_user_preference("docked_block_instance_"+r,1),this.set("isDocked",!0)},recordBlockState:function(){var t=this.get("id"),n=M.core.dock.get(),r=e.one("#inst"+t),i=r.previous();i.hasClass("skip-block")&&(this.contentskipanchor=i,this.contentskipanchor.hide()),this.cachedcontentnode=r,this.contentplaceholder=e.Node.create('
'),r.replace(this.contentplaceholder),n.addToHoldingArea(r),r=null,this.cachedcontentnode.one(".title .commands")||this.cachedcontentnode.one(".title").append(e.Node.create('
'))},returnToPage:function(){var t=this.get("id"),n;return this.contentskipanchor&&this.contentskipanchor.show(),this.cachedcontentnode.one(".header")?this.cachedcontentnode.one(".header").insert(this.dockitem.get("contents"),"after"):this.cachedcontentnode.insert(this.dockitem.get("contents")),this.contentplaceholder.replace(this.cachedcontentnode),this.cachedcontentnode=e.one("#"+this.cachedcontentnode.get("id")),n=this.dockitem.get("commands"),n&&(n.all(".hidepanelicon").remove(),n.all(".moveto").remove(),n.remove()),this.cachedcontentnode=null,M.util.set_user_preference("docked_block_instance_"+t,0),this.set("isDocked",!1),!0}},e.extend(f,e.Base,f.prototype,{NAME:"moodle-core-dock-block",ATTRS:{id:{writeOnce:"initOnly",setter:function(e){return parseInt(e,10)}},isDocked:{value:!1}}}),l=function(){l.superclass.constructor.apply(this,arguments)},l.prototype={active:!1,initializer:function(){var t=this.get("title"),n,r;this.publish("dockeditem:drawstart",{prefix:"dockeditem"}),this.publish("dockeditem:drawcomplete",{prefix:"dockeditem"}),this.publish("dockeditem:showstart",{prefix:"dockeditem"}),this.publish("dockeditem:showcomplete",{prefix:"dockeditem"}),this.publish("dockeditem:hidestart",{prefix:"dockeditem"}),this.publish("dockeditem:hidecomplete",{prefix:"dockeditem"}),this.publish("dockeditem:itemremoved",{prefix:"dockeditem"}),t&&(r=t.get("nodeName"),n=t.cloneNode(!0),t=e.Node.create("<"+r+">"),t=M.core.dock.fixTitleOrientation(t,n.get("text")),this.set("title",t),this.set("titlestring",n))},draw:function(){var t=e.Node.create,n=this.get("dock"),r=n.count,s,o,u,a,f=this.get("id");return this.fire("dockeditem:drawstart"),s=t(''),s.append(this.get("title")),o=t('
'),r===1&&o.addClass("firstdockitem"),o.append(s),n.append(o),a=t(''+M.str.block.hidepanel+''),a.setAttribute("src",M.util.image_url("t/dockclose","moodle")),u=t('').append(a),u.on("forceclose|click",this.hide,this),u.on("dock:actionkey",this.hide,this,{actions:{enter:!0,toggle:!0}}),this.get("commands").append(u),this.set("dockTitleNode",s),this.set("dockItemNode",o),this.fire("dockeditem:drawcomplete"),!0},show:function(){var t=this.get("dock"),n=t.getPanel(),r=this.get("dockTitleNode");return t.hideActive(),this.fire("dockeditem:showstart"),n.setHeader(this.get("titlestring"),this.get("commands")),n.setBody(e.Node.create('
').append(this.get("contents"))),n.show(),n.correctWidth(),this.active=!0,r.addClass(i.activeitem),r.set("aria-expanded","true"),this.fire("dockeditem:showcomplete"),t.resize(),!0},hide:function(){this.fire("dockeditem:hidestart"),this.active&&(this.active=!1,this.get("dock").getPanel().hide()),this.get("dockTitleNode").removeClass(i.activeitem).set("aria-expanded","false"),this.fire("dockeditem:hidecomplete")},toggle:function(e){var t=this.get("dockTitleNode");t.hasClass(i.activeitem)&&e!=="expand"?this.hide():!t.hasClass(i.activeitem)&&e!=="collapse"&&this.show()},remove:function(){this.hide(),this.get("block").returnToPage(),this.get("dockItemNode").remove(),this.fire("dockeditem:itemremoved")},_getLogDescription:function(){return this.get("titlestring").get("innerHTML")+" ("+this.get("blockinstanceid")+")"}},e.extend(l,e.Base,l.prototype,{NAME:"moodle-core-dock-dockeditem",ATTRS:{block:{writeOnce:"initOnly"},dock:{writeOnce:"initOnly"},id:{},blockinstanceid:{writeOnce:"initOnly",setter:function(e){return parseInt(e,10)}},title:{value:null},titlestring:{value:null},contents:{writeOnce:"initOnly"},commands:{writeOnce:"initOnly"},blockclass:{writeOnce:"initOnly"},dockTitleNode:{value:null},dockItemNode:{value:null},dockcontainerNode:{value:null}}}),e.augment(l,e.EventTarget)},"@VERSION@",{requires:["base","node","event-custom","event-mouseenter","event-resize","escape","moodle-core-dock-loader"]}); diff --git a/lib/yui/build/moodle-core-dock/moodle-core-dock.js b/lib/yui/build/moodle-core-dock/moodle-core-dock.js index 674039ff3b9..528e73b1fc3 100644 --- a/lib/yui/build/moodle-core-dock/moodle-core-dock.js +++ b/lib/yui/build/moodle-core-dock/moodle-core-dock.js @@ -743,7 +743,9 @@ DOCK.prototype = { BODY.addClass('used-region-'+regionname); BODY.removeClass('empty-region-'+regionname); BODY.removeClass('docked-region-'+regionname); - } else { + } else if (region.all('.block_dock_placeholder').size() > 0) { + // There are no blocks in the region but there are placeholders. + // All blocks in this region have been docked. BODY.addClass('empty-region-'+regionname); BODY.addClass('docked-region-'+regionname); BODY.removeClass('used-region-'+regionname); diff --git a/lib/yui/src/blocks/js/blocks.js b/lib/yui/src/blocks/js/blocks.js index f01d00661b6..90a10fb7c4b 100644 --- a/lib/yui/src/blocks/js/blocks.js +++ b/lib/yui/src/blocks/js/blocks.js @@ -349,7 +349,7 @@ M.core.blockdraganddrop.is_using_blocks_render_method = function() { var goodregions = Y.all('.block-region[data-blockregion]').size(); var allregions = Y.all('.block-region').size(); this._isusingnewblocksmethod = (allregions === goodregions); - if (goodregions > 0 && allregions > 0) { + if (goodregions > 0 && allregions > 0 && goodregions !== allregions) { Y.log('Both core_renderer::blocks and core_renderer::blocks_for_region have been used.', 'warn', 'moodle-core_blocks'); } } diff --git a/lib/yui/src/blocks/js/manager.js b/lib/yui/src/blocks/js/manager.js index 50e02dadeaf..f5f3c92017a 100644 --- a/lib/yui/src/blocks/js/manager.js +++ b/lib/yui/src/blocks/js/manager.js @@ -109,7 +109,7 @@ MANAGER.prototype = { dragdelegation.dd.plug(Y.Plugin.DDWinScroll); // On the mouse down event we will enable all block regions so that they can be dragged to. // This is VERY important as without it dnd won't work for empty block regions. - dragdelegation.on('drag:mouseDown', this.enable_all_regions, this); + dragdelegation.on('drag:start', this.enable_all_regions, this); region.change_block_move_icons(this); } diff --git a/lib/yui/src/dock/js/dock.js b/lib/yui/src/dock/js/dock.js index e76152c989e..1a7edfc736d 100644 --- a/lib/yui/src/dock/js/dock.js +++ b/lib/yui/src/dock/js/dock.js @@ -748,7 +748,9 @@ DOCK.prototype = { BODY.addClass('used-region-'+regionname); BODY.removeClass('empty-region-'+regionname); BODY.removeClass('docked-region-'+regionname); - } else { + } else if (region.all('.block_dock_placeholder').size() > 0) { + // There are no blocks in the region but there are placeholders. + // All blocks in this region have been docked. BODY.addClass('empty-region-'+regionname); BODY.addClass('docked-region-'+regionname); BODY.removeClass('used-region-'+regionname);