Ctrl-Click in the Organize module
Mike Miller <[email protected]> Sun, 13 Jan 2013 07:11:57 +0200
| Newsgroups | gmane.comp.web.gallery.devel |
|---|---|
| Message-ID | <CAGYq59e=fS-2391BudX2ZLf6A_1RGyBRuu+o80io5OMFvZngfw@mail.gmail.com> |
This is actually almost a word-for-word copy from a forum thread
(http://gallery.menalto.com/node/110656), but there was no response
there, and it seems sufficiently technical (and about a core module)
to be suitable for the development list.
As has been reported in several threads (e.g.,
http://gallery.menalto.com/node/108422 and
http://gallery.menalto.com/node/108101), the organize module supports
shift-clicking to extend the selection, but not ctrl-clicking to add a
single item.
Having looked at it in Chrome's debugger, I can see exactly why this
happens, but I'm not sure I know how to fix it.
I added a console.error message to
Ext.DataView = Ext.extend(Ext.BoxComponent, {selectedClass:
"x-view-selected",emptyText: "",deferEmptyText: true,trackOver:
false,blockRefresh: false,last: false,initComponent: function() {
...
},onItemClick: function(item, index, e) {
if (this.fireEvent("beforeclick", this, index, item, e) === false) {
return false;
}
if (this.multiSelect) {
===> console.error("doMultiSelection"); <===
this.doMultiSelection(item, index, e);
e.preventDefault();
I see that this function is called twice on control click with the
following call stacks (the lines are from the pretty printed version):
doMultiSelection ext-organize-bundle.js:12814
Ext.DataView.Ext.extend.onItemClick ext-organize-bundle.js:12814
Ext.DataView.Ext.extend.onClick ext-organize-bundle.js:12772
v.dragZone.Ext.dd.DragZone.getDragData 8:170
Ext.extend.handleMouseDown ext-organize-bundle.js:20108
h ext-organize-bundle.js:4246
And
doMultiSelection ext-organize-bundle.js:12814
Ext.DataView.Ext.extend.onItemClick ext-organize-bundle.js:12814
Ext.DataView.Ext.extend.onClick ext-organize-bundle.js:12772
h ext-organize-bundle.js:4246
The two calls to doMultiSelection contain the following:
},doMultiSelection: function(item, index, e) {
if (e.shiftKey && this.last !== false) {
var last = this.last;
this.selectRange(last, index, e.ctrlKey);
this.last = last;
} else {
if ((e.ctrlKey || this.simpleSelect) && this.isSelected(index)) {
this.deselect(index);
} else {
this.select(index, e.ctrlKey || e.shiftKey ||
this.simpleSelect);
}
}
},getSelectionCount: function() {
The first one fails the this.isSelected(index) test and calls
this.select(); the second passes and so it calls this.deselect(). This
is also clear in the UI, where while holding down the mouse the image
is highlighted, but once the button is released, the highlight
disappears.
The second call (which, as noted above, actually occurs after mouse
up) is due to views/organize_frame.html.php:170, which reads
if (!v.isSelected(target)) {
v.onClick(e);
}
If I comment out the call to v.onClick(e), Ctrl works to highlight
multiple images!
However, it breaks drag and drop rearranging; I get the following in
my log file, and the page returns a 500:
2013-01-08 13:59:54 +02:00 --- error: ORM_Validation_Exception [ 44 ]:
ORM Validation has failed for items model
/var/www/testing/gallery3/system/libraries/ORM_Validation_Exception.php [ 20 ]
#0 /var/www/testing/gallery3/system/libraries/ORM.php(755):
ORM_Validation_Exception_Core::handle_validation('items',
Object(Validation))
#1 /var/www/testing/gallery3-contrib/3.0/modules/videos/models/item.php(740):
ORM_Core->validate(NULL)
#2 /var/www/testing/gallery3/system/libraries/ORM.php(778):
Item_Model_Core->validate()
#3 /var/www/testing/gallery3/modules/gallery/libraries/MY_ORM.php(34):
ORM_Core->save()
#4 /var/www/testing/gallery3/modules/gallery/libraries/ORM_MPTT.php(76):
ORM->save()
#5 /var/www/testing/gallery3-contrib/3.0/modules/videos/models/item.php(369):
ORM_MPTT_Core->save()
#6 /var/www/testing/gallery3/modules/organize/controllers/organize.php(163):
Item_Model_Core->save()
#7 [internal function]: Organize_Controller->rearrange()
#8 /var/www/testing/gallery3/system/core/Kohana.php(331):
ReflectionMethod->invokeArgs(Object(Organize_Controller), Array)
#9 [internal function]: Kohana_Core::instance(NULL)
#10 /var/www/testing/gallery3/system/core/Event.php(208):
call_user_func_array(Array, Array)
#11 /var/www/testing/gallery3/application/Bootstrap.php(67):
Event_Core::run('system.execute')
#12 /var/www/testing/gallery3/index.php(116): require('/var/www/testin...')
#13 {main}
2013-01-08 13:59:54 +02:00 --- error: Validation errors: Array
(
[name] => required
[title] => required
[type] => invalid
)
This is as far as I can go right now; I don't really understand why
this call is there or how the whole drag-and-drop logic fits together.
Thanks
-- Mike Miller
------------------------------------------------------------------------------
Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS,
MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current
with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft
MVPs and experts. ON SALE this month only -- learn more at:
http://p.sf.net/sfu/learnmore_123012
__[ g a l l e r y - d e v e l ]_________________________
[ list info/archive --> http://gallery.sf.net/lists.php ]
[ gallery info/FAQ/download --> http://gallery.sf.net ]