Revert "MDL-36002 core: Make drag and drop keyboard friendly"

This reverts commit 7c271b9, 313e585, ade4695, and 70b4027

Conflicts:
	theme/bootstrapbase/style/moodle.css
This commit is contained in:
Sam Hemelryk 2013-08-15 13:59:06 +12:00
parent ae19c68c9c
commit 702d1f853e
16 changed files with 14 additions and 312 deletions

View File

@ -2977,9 +2977,6 @@ function include_course_ajax($course, $usedmodules = array(), $enabledmodules =
'markedthistopic',
'move',
'movesection',
'movecontent',
'aftercontent',
'emptydragdropregion'
), 'moodle');
// Include format-specific strings

View File

@ -295,7 +295,6 @@ YUI.add('moodle-course-dragdrop', function(Y) {
resources.addClass(CSS.SECTION);
sectionnode.one('.'+CSS.CONTENT+' div.'+CSS.SUMMARY).insert(resources, 'after');
}
resources.setAttribute('data-draggroups', this.groups.join(' '));
// Define empty ul as droptarget, so that item could be moved to empty list
var tar = new Y.DD.Drop({
node: resources,

View File

@ -115,7 +115,6 @@ $string['administratorsandteachers'] = 'Administrators and teachers';
$string['advanced'] = 'Advanced';
$string['advancedfilter'] = 'Advanced search';
$string['advancedsettings'] = 'Advanced settings';
$string['aftercontent'] = 'After {$a}';
$string['again'] = 'again';
$string['aimid'] = 'AIM ID';
$string['ajaxuse'] = 'AJAX and Javascript';
@ -646,7 +645,6 @@ $string['emailpasswordsent'] = 'Thank you for confirming the change of password.
An email containing your new password has been sent to your address at<br /><b>{$a->email}</b>.<br />
The new password was automatically generated - you might like to
<a href="{$a->link}">change your password</a> to something easier to remember.';
$string['emptydragdropregion'] = 'empty region';
$string['enable'] = 'Enable';
$string['encryptedcode'] = 'Encrypted code';
$string['english'] = 'English';
@ -1082,7 +1080,6 @@ $string['moreinformation'] = 'More information about this error';
$string['moreprofileinfoneeded'] = 'Please tell us more about yourself';
$string['mostrecently'] = 'most recently';
$string['move'] = 'Move';
$string['movecontent'] = 'Move {$a}';
$string['movecategorycontentto'] = 'Move into';
$string['movecategoryto'] = 'Move category to:';
$string['movecontentstoanothercategory'] = 'Move contents to another category';

View File

@ -300,11 +300,6 @@ class page_requirements_manager {
if (!empty($page->cm->id)) {
$params['cmid'] = $page->cm->id;
}
// Strings for drag and drop.
$this->strings_for_js(array('movecontent',
'aftercontent',
'emptydragdropregion'),
'moodle');
$page->requires->yui_module('moodle-core-blocks', 'M.core_blocks.init_dragdrop', array($params), null, true);
}
}

View File

@ -115,7 +115,7 @@ Y.extend(DRAGBLOCK, M.core.dragdrop, {
blocklist.each(function(blocknode) {
var move = blocknode.one('a.'+CSS.EDITINGMOVE);
if (move) {
move.replace(this.get_drag_handle(move.getAttribute('title'), '', 'icon', true));
move.remove();
blocknode.one('.'+CSS.HEADER).setStyle('cursor', 'move');
}
}, this);
@ -379,8 +379,7 @@ M.core.blockdraganddrop.init = function(params) {
M.core_blocks = M.core_blocks || {};
M.core_blocks.init_dragdrop = function(params) {
M.core.blockdraganddrop.init(params);
};
/**
};/**
* This file contains the drag and drop manager class.
*
* Provides drag and drop functionality for blocks.

File diff suppressed because one or more lines are too long

View File

@ -115,7 +115,7 @@ Y.extend(DRAGBLOCK, M.core.dragdrop, {
blocklist.each(function(blocknode) {
var move = blocknode.one('a.'+CSS.EDITINGMOVE);
if (move) {
move.replace(this.get_drag_handle(move.getAttribute('title'), '', 'icon', true));
move.remove();
blocknode.one('.'+CSS.HEADER).setStyle('cursor', 'move');
}
}, this);
@ -379,8 +379,7 @@ M.core.blockdraganddrop.init = function(params) {
M.core_blocks = M.core_blocks || {};
M.core_blocks.init_dragdrop = function(params) {
M.core.blockdraganddrop.init(params);
};
/**
};/**
* This file contains the drag and drop manager class.
*
* Provides drag and drop functionality for blocks.

View File

@ -128,9 +128,6 @@ Y.extend(DIALOGUE, Y.Panel, {
this.render();
this.show();
this.after('visibleChange', this.visibilityChanged, this);
if (config.center) {
this.centerDialogue();
}
if (!config.visible) {
this.hide();
}

View File

@ -1 +1 @@
YUI.add("moodle-core-notification-dialogue",function(e,t){var n,r,i,s,o,u,a,f;n="moodle-dialogue",r="notificationBase",i=0,s="yesLabel",o="noLabel",u="title",a="question",f={BASE:"moodle-dialogue-base",WRAP:"moodle-dialogue-wrap",HEADER:"moodle-dialogue-hd",BODY:"moodle-dialogue-bd",CONTENT:"moodle-dialogue-content",FOOTER:"moodle-dialogue-ft",HIDDEN:"hidden",LIGHTBOX:"moodle-dialogue-lightbox"},M.core=M.core||{};var l="Moodle dialogue",c,h,p,d,v;DIALOGUE_MODAL_CLASS="yui3-widget-modal",h=n+"-fullscreen",p=n+"-hidden",d="[role=dialog]",v="no-scrolling",c=function(t){i++;var n="moodle-dialogue-"+i;t.notificationBase=e.Node.create('<div class="'+f.BASE+'">').append(e.Node.create('<div id="'+n+'" role="dialog" aria-labelledby="'+n+'-header-text" class="'+f.WRAP+'"></div>').append(e.Node.create('<div id="'+n+'-header-text" class="'+f.HEADER+' yui3-widget-hd"></div>')).append(e.Node.create('<div class="'+f.BODY+' yui3-widget-bd"></div>')).append(e.Node.create('<div class="'+f.FOOTER+' yui3-widget-ft"></div>'))),e.one(document.body).append(t.notificationBase),t.additionalBaseClass&&t.notificationBase.addClass(t.additionalBaseClass),t.srcNode="#"+n,t.width=t.width||"400px",t.visible=t.visible||!1,t.center=t.centered||!0,t.centered=!1,t.COUNT=i,t.width==="auto"&&delete t.width,t.lightbox!==!1&&(t.modal=!0),delete t.lightbox,t.closeButton===!1?t.buttons=null:t.buttons=[{section:e.WidgetStdMod.HEADER,classNames:"closebutton",action:function(){this.hide()}}],c.superclass.constructor.apply(this,[t]),t.closeButton!==!1&&this.get("buttons").header[0].setAttribute("title",this.get("closeButtonTitle"))},e.extend(c,e.Panel,{_resizeevent:null,_orientationevent:null,initializer:function(t){var n;this.render(),this.show(),this.after("visibleChange",this.visibilityChanged,this),t.center&&this.centerDialogue(),t.visible||this.hide(),this.set("COUNT",i),n=this.get("boundingBox"),t.extraClasses&&e.Array.each(t.extraClasses,n.addClass,n),t.visible&&this.applyZIndex()},applyZIndex:function(){var t=0,n,r;r=this.get("boundingBox"),this.get("zIndex")?r.setStyle("zIndex",this.get("zIndex")):(e.all(d).each(function(e){n=e.getStyle("zIndex"),n||(n=e.get("parentNode").getStyle("zIndex")),n&&(n=parseInt(n,10),n>t&&(t=n))}),t>0&&r.setStyle("zIndex",t+1))},toggleDocumentScrolling:function(){var t=e.one(e.config.doc.body),n=!0,r;r="."+h+", ."+DIALOGUE_MODAL_CLASS,e.all(r).each(function(e){e.hasClass(p)||(n=!1)}),e.UA.ie>0&&(t=e.one("html")),n?t.hasClass(v)&&t.removeClass(v):t.addClass(v)},visibilityChanged:function(t){var n;t.attrName==="visible"&&(this.get("maskNode").addClass(f.LIGHTBOX),t.prevVal&&!t.newVal&&(this._resizeevent&&(this._resizeevent.detach(),this._resizeevent=null),this._orientationevent&&(this._orientationevent.detach(),this._orientationevent=null)),!t.prevVal&&t.newVal&&(this.applyZIndex(),this.makeResponsive(),this.shouldResizeFullscreen()||this.get("draggable")&&(n="#"+this.get("id")+" ."+f.HEADER,this.plug(e.Plugin.Drag,{handles:[n]}),e.one(n).setStyle("cursor","move"))),this.get("center")&&!t.prevVal&&t.newVal&&this.centerDialogue(),this.toggleDocumentScrolling())},makeResponsive:function(){var t=this.get("boundingBox"),r;this.shouldResizeFullscreen()?(t.addClass(n+"-fullscreen"),t.setStyles({left:null,top:null,width:null,height:null}),r=e.one("#"+this.get("id")+" ."+f.BODY),r.setStyle("overflow","auto")):this.get("responsive")&&(t.removeClass(n+"-fullscreen").setStyles({overflow:"inherit",width:this.get("width"),height:this.get("height")}),r=e.one("#"+this.get("id")+" ."+f.BODY),r.setStyle("overflow","inherit"))},centerDialogue:function(){var t=this.get("boundingBox"),n=t.hasClass(p),r,i;if(this.shouldResizeFullscreen())return;n&&t.setStyle("top","-1000px").removeClass(p),r=Math.max(Math.round((t.get("winWidth")-t.get("offsetWidth"))/2),15),i=Math.max(Math.round((t.get("winHeight")-t.get("offsetHeight"))/2),15)+e.one(window).get("scrollTop"),t.setStyles({left:r,top:i}),n&&t.addClass(p)},shouldResizeFullscreen:function(){return window===window.parent&&this.get("responsive")&&Math.floor(e.one(document.body).get("winWidth"))<this.get("responsiveWidth")}},{NAME:l,CSS_PREFIX:n,ATTRS:{notificationBase:{},lightbox:{validator:e.Lang.isBoolean,value:!0},closeButton:{validator:e.Lang.isBoolean,value:!0},closeButtonTitle:{validator:e.Lang.isString,value:"Close"},center:{validator:e.Lang.isBoolean,value:!0},draggable:{validator:e.Lang.isBoolean,value:!1},COUNT:{value:0},responsive:{validator:e.Lang.isBoolean,value:!0},responsiveWidth:{value:768}}}),M.core.dialogue=c},"@VERSION@",{requires:["base","node","panel","event-key","dd-plugin"]});
YUI.add("moodle-core-notification-dialogue",function(e,t){var n,r,i,s,o,u,a,f;n="moodle-dialogue",r="notificationBase",i=0,s="yesLabel",o="noLabel",u="title",a="question",f={BASE:"moodle-dialogue-base",WRAP:"moodle-dialogue-wrap",HEADER:"moodle-dialogue-hd",BODY:"moodle-dialogue-bd",CONTENT:"moodle-dialogue-content",FOOTER:"moodle-dialogue-ft",HIDDEN:"hidden",LIGHTBOX:"moodle-dialogue-lightbox"},M.core=M.core||{};var l="Moodle dialogue",c,h,p,d,v;DIALOGUE_MODAL_CLASS="yui3-widget-modal",h=n+"-fullscreen",p=n+"-hidden",d="[role=dialog]",v="no-scrolling",c=function(t){i++;var n="moodle-dialogue-"+i;t.notificationBase=e.Node.create('<div class="'+f.BASE+'">').append(e.Node.create('<div id="'+n+'" role="dialog" aria-labelledby="'+n+'-header-text" class="'+f.WRAP+'"></div>').append(e.Node.create('<div id="'+n+'-header-text" class="'+f.HEADER+' yui3-widget-hd"></div>')).append(e.Node.create('<div class="'+f.BODY+' yui3-widget-bd"></div>')).append(e.Node.create('<div class="'+f.FOOTER+' yui3-widget-ft"></div>'))),e.one(document.body).append(t.notificationBase),t.additionalBaseClass&&t.notificationBase.addClass(t.additionalBaseClass),t.srcNode="#"+n,t.width=t.width||"400px",t.visible=t.visible||!1,t.center=t.centered||!0,t.centered=!1,t.COUNT=i,t.width==="auto"&&delete t.width,t.lightbox!==!1&&(t.modal=!0),delete t.lightbox,t.closeButton===!1?t.buttons=null:t.buttons=[{section:e.WidgetStdMod.HEADER,classNames:"closebutton",action:function(){this.hide()}}],c.superclass.constructor.apply(this,[t]),t.closeButton!==!1&&this.get("buttons").header[0].setAttribute("title",this.get("closeButtonTitle"))},e.extend(c,e.Panel,{_resizeevent:null,_orientationevent:null,initializer:function(t){var n;this.render(),this.show(),this.after("visibleChange",this.visibilityChanged,this),t.visible||this.hide(),this.set("COUNT",i),n=this.get("boundingBox"),t.extraClasses&&e.Array.each(t.extraClasses,n.addClass,n),t.visible&&this.applyZIndex()},applyZIndex:function(){var t=0,n,r;r=this.get("boundingBox"),this.get("zIndex")?r.setStyle("zIndex",this.get("zIndex")):(e.all(d).each(function(e){n=e.getStyle("zIndex"),n||(n=e.get("parentNode").getStyle("zIndex")),n&&(n=parseInt(n,10),n>t&&(t=n))}),t>0&&r.setStyle("zIndex",t+1))},toggleDocumentScrolling:function(){var t=e.one(e.config.doc.body),n=!0,r;r="."+h+", ."+DIALOGUE_MODAL_CLASS,e.all(r).each(function(e){e.hasClass(p)||(n=!1)}),e.UA.ie>0&&(t=e.one("html")),n?t.hasClass(v)&&t.removeClass(v):t.addClass(v)},visibilityChanged:function(t){var n;t.attrName==="visible"&&(this.get("maskNode").addClass(f.LIGHTBOX),t.prevVal&&!t.newVal&&(this._resizeevent&&(this._resizeevent.detach(),this._resizeevent=null),this._orientationevent&&(this._orientationevent.detach(),this._orientationevent=null)),!t.prevVal&&t.newVal&&(this.applyZIndex(),this.makeResponsive(),this.shouldResizeFullscreen()||this.get("draggable")&&(n="#"+this.get("id")+" ."+f.HEADER,this.plug(e.Plugin.Drag,{handles:[n]}),e.one(n).setStyle("cursor","move"))),this.get("center")&&!t.prevVal&&t.newVal&&this.centerDialogue(),this.toggleDocumentScrolling())},makeResponsive:function(){var t=this.get("boundingBox"),r;this.shouldResizeFullscreen()?(t.addClass(n+"-fullscreen"),t.setStyles({left:null,top:null,width:null,height:null}),r=e.one("#"+this.get("id")+" ."+f.BODY),r.setStyle("overflow","auto")):this.get("responsive")&&(t.removeClass(n+"-fullscreen").setStyles({overflow:"inherit",width:this.get("width"),height:this.get("height")}),r=e.one("#"+this.get("id")+" ."+f.BODY),r.setStyle("overflow","inherit"))},centerDialogue:function(){var t=this.get("boundingBox"),n=t.hasClass(p),r,i;if(this.shouldResizeFullscreen())return;n&&t.setStyle("top","-1000px").removeClass(p),r=Math.max(Math.round((t.get("winWidth")-t.get("offsetWidth"))/2),15),i=Math.max(Math.round((t.get("winHeight")-t.get("offsetHeight"))/2),15)+e.one(window).get("scrollTop"),t.setStyles({left:r,top:i}),n&&t.addClass(p)},shouldResizeFullscreen:function(){return window===window.parent&&this.get("responsive")&&Math.floor(e.one(document.body).get("winWidth"))<this.get("responsiveWidth")}},{NAME:l,CSS_PREFIX:n,ATTRS:{notificationBase:{},lightbox:{validator:e.Lang.isBoolean,value:!0},closeButton:{validator:e.Lang.isBoolean,value:!0},closeButtonTitle:{validator:e.Lang.isString,value:"Close"},center:{validator:e.Lang.isBoolean,value:!0},draggable:{validator:e.Lang.isBoolean,value:!1},COUNT:{value:0},responsive:{validator:e.Lang.isBoolean,value:!0},responsiveWidth:{value:768}}}),M.core.dialogue=c},"@VERSION@",{requires:["base","node","panel","event-key","dd-plugin"]});

View File

@ -128,9 +128,6 @@ Y.extend(DIALOGUE, Y.Panel, {
this.render();
this.show();
this.after('visibleChange', this.visibilityChanged, this);
if (config.center) {
this.centerDialogue();
}
if (!config.visible) {
this.hide();
}

View File

@ -2,8 +2,7 @@ YUI.add('moodle-core-dragdrop', function(Y) {
var MOVEICON = {
pix: "i/move_2d",
largepix: "i/dragdrop",
component: 'moodle',
cssclass: 'moodle-core-dragdrop-draghandle'
component: 'moodle'
};
/*
@ -34,8 +33,6 @@ YUI.add('moodle-core-dragdrop', function(Y) {
Y.DD.DDM.on('drop:hit', this.global_drop_hit, this);
// Listen for all drop:miss events
Y.DD.DDM.on('drag:dropmiss', this.global_drag_dropmiss, this);
Y.on('key', this.global_keydown, window, 'down:32,enter,esc', this);
},
get_drag_handle: function(title, classname, iconclass, large) {
@ -56,19 +53,17 @@ YUI.add('moodle-core-dragdrop', function(Y) {
var dragelement = Y.Node.create('<span></span>')
.addClass(classname)
.setAttribute('title', title)
.setAttribute('tabIndex', 0)
.setAttribute('data-draggroups', this.groups);
dragelement.appendChild(dragicon);
dragelement.addClass(MOVEICON.cssclass);
return dragelement;
},
lock_drag_handle: function(drag, classname) {
// Disable dragging
drag.removeHandle('.'+classname);
},
unlock_drag_handle: function(drag, classname) {
// Enable dragging
drag.addHandle('.'+classname);
},
@ -199,264 +194,6 @@ YUI.add('moodle-core-dragdrop', function(Y) {
this.drop_hit(e);
},
/**
* This is used to build the text for the heading of the keyboard
* drag drop menu and the text for the nodes in the list.
* @method find_element_text
* @param {Node} n The node to start searching for a valid text node.
* @returns {string} The text of the first text-like child node of n.
*/
find_element_text : function(n) {
// The valid node types to get text from.
var nodes = n.all('h2, h3, h4, h5, span, p');
var text = '';
nodes.each(function () {
if (text == '') {
if (Y.Lang.trim(this.get('text')) != '') {
text = this.get('text');
}
}
});
if (text != '') {
return text;
}
return M.util.get_string('emptydragdropregion', 'moodle');
},
/**
* This is used to initiate a keyboard version of a drag and drop.
* A dialog will open listing all the valid drop targets that can be selected
* using tab, tab, tab, enter.
* @method global_start_keyboard_drag
* @param {Event} e The keydown / click event on the grab handle.
* @param {Node} dragcontainer The resolved draggable node (an ancestor of the drag handle).
* @param {Node} draghandle The node that triggered this action.
*/
global_start_keyboard_drag : function(e, draghandle, dragcontainer) {
M.core.dragdrop.keydragcontainer = dragcontainer;
M.core.dragdrop.keydraghandle = draghandle;
// Indicate to a screenreader the node that is selected for drag and drop.
dragcontainer.setAttribute('aria-grabbed', 'true');
// Get the name of the thing to move.
var nodetitle = this.find_element_text(dragcontainer);
var dialogtitle = M.util.get_string('movecontent', 'moodle', nodetitle);
// Build the list of drop targets.
var droplist = Y.Node.create('<ul></ul>');
droplist.addClass('dragdrop-keyboard-drag');
var listitem;
var listitemtext;
// Search for possible drop targets.
var droptargets = Y.all('.' + this.samenodeclass + ', .' + this.parentnodeclass);
droptargets.each(function (node) {
var validdrop = false, labelroot = node;
if (node.drop && node.drop.inGroup(this.groups) && node.drop.get('node') != dragcontainer) {
// This is a drag and drop target with the same class as the grabbed node.
validdrop = true;
} else {
var elementgroups = node.getAttribute('data-draggroups').split(' ');
var i, j;
for (i = 0; i < elementgroups.length; i++) {
for (j = 0; j < this.groups.length; j++) {
if (elementgroups[i] == this.groups[j]) {
// This is a parent node of the grabbed node (used for dropping in empty sections).
validdrop = true;
// This node will have no text - so we get the first valid text from the parent.
labelroot = node.get('parentNode');
break;
}
}
if (validdrop) {
break;
}
}
}
if (validdrop) {
// It is a valid drop target - create a list item for it.
listitem = Y.Node.create('<li></li>');
listlink = Y.Node.create('<a></a>');
nodetitle = this.find_element_text(labelroot);
listitemtext = M.util.get_string('aftercontent', 'moodle', nodetitle);
listlink.setContent(listitemtext);
// Add a data attribute so we can get the real drop target.
listlink.setAttribute('data-drop-target', node.get('id'));
// Notify the screen reader this is a valid drop target.
listlink.setAttribute('aria-dropeffect', 'move');
// Allow tabbing to the link.
listlink.setAttribute('tabindex', '0');
// Set the event listeners for enter, space or click.
listlink.on('click', this.global_keyboard_drop, this);
listlink.on('key', this.global_keyboard_drop, 'down:enter,32', this);
// Add to the list or drop targets.
listitem.append(listlink);
droplist.append(listitem);
}
}, this);
// Create the dialog for the interaction.
M.core.dragdrop.dropui = new M.core.dialogue({
headerContent : dialogtitle,
bodyContent : droplist,
draggable : true,
visible : true
});
// Focus the first drop target.
if (droplist.one('a')) {
droplist.one('a').focus();
}
},
/**
* This is used as a simulated drag/drop event in order to prevent any
* subtle bugs from creating a real instance of a drag drop event. This means
* there are no state changes in the Y.DD.DDM and any undefined functions
* will trigger an obvious and fatal error.
* The end result is that we call all our drag/drop handlers but do not bubble the
* event to anyone else.
*
* The functions/properties implemented in the wrapper are:
* e.target
* e.drag
* e.drop
* e.drag.get('node')
* e.drop.get('node')
* e.drag.addHandle()
* e.drag.removeHandle()
*
* @class simulated_drag_drop_event
* @param {Node} dragnode The drag container node
* @param {Node} dropnode The node to initiate the drop on
*/
simulated_drag_drop_event : function(dragnode, dropnode) {
this.target = dropnode;
// Subclass for wrapping both drag and drop.
var dragdropwrapper = function(node) {
this.node = node;
}
// Method e.drag.get() - get the node.
dragdropwrapper.prototype.get = function(param) {
if (param == 'node' || param == 'dragNode' || param == 'dropNode') {
return this.node;
}
return null;
};
// Method e.drag.inGroup() - we have already run the group checks before triggering the event.
dragdropwrapper.prototype.inGroup = function() {
return true;
};
// Method e.drag.addHandle() - we don't want to run this.
dragdropwrapper.prototype.addHandle = function() {};
// Method e.drag.removeHandle() - we don't want to run this.
dragdropwrapper.prototype.removeHandle = function() {};
// Create instances of the dragdropwrapper.
this.drop = new dragdropwrapper(dropnode);
this.drag = new dragdropwrapper(dragnode);
},
/**
* This is used to complete a keyboard version of a drag and drop.
* A drop event will be simulated based on the drag and drop nodes.
* @method global_keyboard_drop
* @param {Event} e The keydown / click event on the proxy drop node.
*/
global_keyboard_drop : function(e) {
// The drag node was saved.
var dragcontainer = M.core.dragdrop.keydragcontainer;
dragcontainer.setAttribute('aria-grabbed', 'false');
// The real drop node is stored in an attribute of the proxy.
var droptarget = Y.one('#' + e.target.getAttribute('data-drop-target'));
// Close the dialog.
M.core.dragdrop.dropui.hide();
// Cancel the event.
e.preventDefault();
// Convert to a drag drop event.
var dropevent = new this.simulated_drag_drop_event(dragcontainer, droptarget);
this.global_drop_over(dropevent);
this.global_drop_hit(dropevent);
M.core.dragdrop.keydraghandle.focus();
},
/**
* This is used to cancel a keyboard version of a drag and drop.
*
* @method global_cancel_keyboard_drag
*/
global_cancel_keyboard_drag : function() {
if (M.core.dragdrop.keydragcontainer) {
M.core.dragdrop.keydragcontainer.setAttribute('aria-grabbed', 'false');
M.core.dragdrop.keydraghandle.focus();
M.core.dragdrop.keydragcontainer = null;
}
},
/**
* Process key events on the drag handles.
* @method global_keydown
* @param {Event} e The keydown / click event on the drag handle.
*/
global_keydown : function(e) {
var draghandle = e.target,
dragcontainer,
draggroups;
if (e.keyCode == 27 ) {
// Escape to cancel from anywhere.
this.global_cancel_keyboard_drag();
e.preventDefault();
return;
}
// Only process events on a drag handle.
if (!draghandle.hasClass(MOVEICON.cssclass)) {
return;
}
// Do nothing if not space or enter.
if (e.keyCode != 13 && e.keyCode != 32) {
return;
}
// Check the drag groups to see if we are the handler for this node.
draggroups = e.target.getAttribute('data-draggroups').split(' ');
var i, j, validgroup = false;
for (i = 0; i < draggroups.length; i++) {
for (j = 0; j < this.groups.length; j++) {
if (draggroups[i] == this.groups[j]) {
validgroup = true;
break;
}
}
if (validgroup) {
break;
}
}
if (!validgroup) {
return;
}
// Valid event - start the keyboard drag.
dragcontainer = draghandle.ancestor('.yui3-dd-drop');
this.global_start_keyboard_drag(e, draghandle, dragcontainer);
e.preventDefault();
},
/*
* Abstract functions definitions
*/
@ -474,4 +211,4 @@ YUI.add('moodle-core-dragdrop', function(Y) {
M.core = M.core || {};
M.core.dragdrop = DRAGDROP;
}, '@VERSION@', {requires:['base', 'node', 'io', 'dom', 'dd', 'event-key', 'event-focus', 'moodle-core-notification']});
}, '@VERSION@', {requires:['base', 'node', 'io', 'dom', 'dd', 'moodle-core-notification']});

View File

@ -113,7 +113,7 @@ Y.extend(DRAGBLOCK, M.core.dragdrop, {
blocklist.each(function(blocknode) {
var move = blocknode.one('a.'+CSS.EDITINGMOVE);
if (move) {
move.replace(this.get_drag_handle(move.getAttribute('title'), '', 'icon', true));
move.remove();
blocknode.one('.'+CSS.HEADER).setStyle('cursor', 'move');
}
}, this);
@ -377,4 +377,4 @@ M.core.blockdraganddrop.init = function(params) {
M.core_blocks = M.core_blocks || {};
M.core_blocks.init_dragdrop = function(params) {
M.core.blockdraganddrop.init(params);
};
};

View File

@ -97,9 +97,6 @@ Y.extend(DIALOGUE, Y.Panel, {
this.render();
this.show();
this.after('visibleChange', this.visibilityChanged, this);
if (config.center) {
this.centerDialogue();
}
if (!config.visible) {
this.hide();
}

View File

@ -1470,6 +1470,3 @@ div.badge .expireimage { width: 100px; height: 100px; left: 20px; top: 0px; }
.dir-rtl .menu.align-tr-tr {right: auto;left: 0;}
.dir-rtl .menu.align-bl-tr {right: 100%;left: auto;}
.dir-rtl .menu.align-br-tr {right: auto;left: 0;}
ul.dragdrop-keyboard-drag li { list-style-type: none; }
.block-control-actions .moodle-core-dragdrop-draghandle img { width: 12px; height: 12px; }

View File

@ -2095,12 +2095,3 @@ div.badge .expireimage {
text-align: right;
}
}
ul.dragdrop-keyboard-drag li {
list-style-type: none;
}
.block-control-actions .moodle-core-dragdrop-draghandle img {
width: 12px;
height: 12px;
}

File diff suppressed because one or more lines are too long