Add actions (Add) for blank parts of planner view

This commit is contained in:
nathangray 2016-08-22 09:39:09 -06:00
parent 82e4696e21
commit b3a71be4a2
2 changed files with 68 additions and 45 deletions

View File

@ -848,51 +848,54 @@ function egwPopupActionImplementation()
} }
// Add into links so it's included in menu // Add into links so it's included in menu
if(typeof _links[paste_action.id] == 'undefined') if(paste_action && paste_action.enabled.exec())
{ {
_links[paste_action.id] = { if(typeof _links[paste_action.id] == 'undefined')
"actionObj": paste_action,
"enabled": false,
"visible": clipboard != null,
"cnt": 0
};
}
while(paste_action.children.length > 0)
{
paste_action.children[0].remove();
}
// If nothing [valid] in the clipboard, don't bother with children
if(clipboard == null || typeof clipboard.type != 'object')
{
return;
}
// Add in actual actions as children
for(var k in drop)
{
// Add some choices - need to be a copy, or they interfere with
// the original
var drop_clone = jQuery.extend({},drop[k].actionObj);
drop_clone.parent = paste_action;
drop_clone.onExecute = new egwFnct(this, null, []);
drop_clone.set_onExecute(paste_exec);
paste_action.children.push(drop_clone);
paste_action.allowOnMultiple = paste_action.allowOnMultiple && drop_clone.allowOnMultiple;
_links[k] = jQuery.extend({},drop[k]);
_links[k].actionObj = drop_clone;
// Drop is allowed if clipboard types intersect drop types
_links[k].enabled = false;
_links[k].visible = false;
for (var i = 0; i < drop_clone.acceptedTypes.length; i++)
{ {
if (clipboard.type.indexOf(drop_clone.acceptedTypes[i]) != -1) _links[paste_action.id] = {
"actionObj": paste_action,
"enabled": false,
"visible": clipboard != null,
"cnt": 0
};
}
while(paste_action.children.length > 0)
{
paste_action.children[0].remove();
}
// If nothing [valid] in the clipboard, don't bother with children
if(clipboard == null || typeof clipboard.type != 'object')
{
return;
}
// Add in actual actions as children
for(var k in drop)
{
// Add some choices - need to be a copy, or they interfere with
// the original
var drop_clone = jQuery.extend({},drop[k].actionObj);
drop_clone.parent = paste_action;
drop_clone.onExecute = new egwFnct(this, null, []);
drop_clone.set_onExecute(paste_exec);
paste_action.children.push(drop_clone);
paste_action.allowOnMultiple = paste_action.allowOnMultiple && drop_clone.allowOnMultiple;
_links[k] = jQuery.extend({},drop[k]);
_links[k].actionObj = drop_clone;
// Drop is allowed if clipboard types intersect drop types
_links[k].enabled = false;
_links[k].visible = false;
for (var i = 0; i < drop_clone.acceptedTypes.length; i++)
{ {
_links[paste_action.id].enabled = true; if (clipboard.type.indexOf(drop_clone.acceptedTypes[i]) != -1)
_links[k].enabled = true; {
_links[k].visible = true; _links[paste_action.id].enabled = true;
break; _links[k].enabled = true;
_links[k].visible = true;
break;
}
} }
} }
} }

View File

@ -1389,7 +1389,7 @@ var et2_calendar_planner = (function(){ "use strict"; return et2_calendar_view.e
this._init_links_dnd(widget_object.manager, action_links); this._init_links_dnd(widget_object.manager, action_links);
//widget_object.updateActionLinks(action_links); widget_object.updateActionLinks(action_links);
this._actionObject = widget_object; this._actionObject = widget_object;
}, },
@ -1409,6 +1409,14 @@ var et2_calendar_planner = (function(){ "use strict"; return et2_calendar_view.e
var drop_change_participant = mgr.getActionById('change_participant'); var drop_change_participant = mgr.getActionById('change_participant');
var drop_invite = mgr.getActionById('invite'); var drop_invite = mgr.getActionById('invite');
var drag_action = mgr.getActionById('egw_link_drag'); var drag_action = mgr.getActionById('egw_link_drag');
var paste_action = mgr.getActionById('egw_paste');
// Disable paste action
if(paste_action == null)
{
paste_action = mgr.addAction('popup', 'egw_paste', egw.lang('Paste'), egw.image('editpaste'), function(){},true);
}
paste_action.set_enabled(false);
// Check if this app supports linking // Check if this app supports linking
if(!egw.link_get_registry(this.dataStorePrefix || 'calendar', 'query') || if(!egw.link_get_registry(this.dataStorePrefix || 'calendar', 'query') ||
@ -1583,15 +1591,24 @@ var et2_calendar_planner = (function(){ "use strict"; return et2_calendar_view.e
_get_action_links: function(actions) _get_action_links: function(actions)
{ {
var action_links = []; var action_links = [];
// TODO: determine which actions are allowed without an action (empty actions)
// Only these actions are allowed without a selection (empty actions)
var empty_actions = ['add'];
for(var i in actions) for(var i in actions)
{ {
var action = actions[i]; var action = actions[i];
if(action.type === 'drop') if(empty_actions.indexOf(action.id) !== -1 || action.type === 'drop')
{ {
action_links.push(typeof action.id !== 'undefined' ? action.id : i); action_links.push(typeof action.id !== 'undefined' ? action.id : i);
} }
} }
// Disable automatic paste action, it doesn't have what is needed to work
action_links.push({
"actionObj": 'egw_paste',
"enabled": false,
"visible": false
});
return action_links; return action_links;
}, },
@ -2129,6 +2146,9 @@ var et2_calendar_planner = (function(){ "use strict"; return et2_calendar_view.e
*/ */
_mouse_down: function(event) _mouse_down: function(event)
{ {
// Only left mouse button
if(event.which !== 1) return;
// Ignore headers // Ignore headers
if(this.headers.has(event.target).length !== 0) return false; if(this.headers.has(event.target).length !== 0) return false;