mirror of
https://github.com/EGroupware/egroupware.git
synced 2025-04-02 03:57:03 +02:00
Integrate filemanager clipboard and new system clipboard
This commit is contained in:
parent
23f029cfcd
commit
cad253627b
@ -150,20 +150,10 @@ class filemanager_ui
|
|||||||
'group' => $group,
|
'group' => $group,
|
||||||
'onExecute' => 'javaScript:app.filemanager.mail',
|
'onExecute' => 'javaScript:app.filemanager.mail',
|
||||||
),
|
),
|
||||||
'copy' => array(
|
|
||||||
'caption' => lang('Copy'),
|
|
||||||
'group' => ++$group,
|
|
||||||
'onExecute' => 'javaScript:app.filemanager.clipboard',
|
|
||||||
),
|
|
||||||
'add' => array(
|
|
||||||
'caption' => lang('Add to clipboard'),
|
|
||||||
'group' => $group,
|
|
||||||
'icon' => 'copy',
|
|
||||||
'onExecute' => 'javaScript:app.filemanager.clipboard',
|
|
||||||
),
|
|
||||||
'cut' => array(
|
'cut' => array(
|
||||||
'caption' => lang('Cut'),
|
'caption' => lang('Cut'),
|
||||||
'group' => $group,
|
// Clipboards are auto-added to group 2.5, but auto select-all pushes things down
|
||||||
|
'group' => '1.5',
|
||||||
'onExecute' => 'javaScript:app.filemanager.clipboard',
|
'onExecute' => 'javaScript:app.filemanager.clipboard',
|
||||||
),
|
),
|
||||||
'documents' => filemanager_merge::document_action(
|
'documents' => filemanager_merge::document_action(
|
||||||
|
@ -21,18 +21,10 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
* path widget
|
* path widget
|
||||||
*/
|
*/
|
||||||
path_widget: null,
|
path_widget: null,
|
||||||
/**
|
|
||||||
* Array of pathes from files in clipboard
|
|
||||||
*/
|
|
||||||
clipboard_files: [],
|
|
||||||
/**
|
/**
|
||||||
* Are files cut into clipboard - need to be deleted at source on paste
|
* Are files cut into clipboard - need to be deleted at source on paste
|
||||||
*/
|
*/
|
||||||
clipboard_is_cut: false,
|
clipboard_is_cut: false,
|
||||||
/**
|
|
||||||
* Key for storing clipboard in browser localstorage
|
|
||||||
*/
|
|
||||||
clipboard_localstore_key: 'filemanager.clipboard',
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
@ -77,10 +69,6 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// get clipboard from browser localstore and update button tooltips
|
// get clipboard from browser localstore and update button tooltips
|
||||||
if (typeof window.localStorage != 'undefined' && typeof window.localStorage[this.clipboard_localstore_key] != 'undefined')
|
|
||||||
{
|
|
||||||
this.clipboard_files = JSON.parse(window.localStorage[this.clipboard_localstore_key]);
|
|
||||||
}
|
|
||||||
this.clipboard_tooltips();
|
this.clipboard_tooltips();
|
||||||
|
|
||||||
if (typeof this.readonly != 'undefined')
|
if (typeof this.readonly != 'undefined')
|
||||||
@ -162,7 +150,7 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
*/
|
*/
|
||||||
open_mail: function(attachments)
|
open_mail: function(attachments)
|
||||||
{
|
{
|
||||||
if (typeof attachments == 'undefined') attachments = this.clipboard_files;
|
if (typeof attachments == 'undefined') attachments = this.get_clipboard_files();
|
||||||
var params = {};
|
var params = {};
|
||||||
if (!(attachments instanceof Array)) attachments = [ attachments ];
|
if (!(attachments instanceof Array)) attachments = [ attachments ];
|
||||||
for(var i=0; i < attachments.length; i++)
|
for(var i=0; i < attachments.length; i++)
|
||||||
@ -309,6 +297,35 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get any files that are in the system clipboard
|
||||||
|
*
|
||||||
|
* @return {string[]} Paths
|
||||||
|
*/
|
||||||
|
get_clipboard_files: function()
|
||||||
|
{
|
||||||
|
var clipboard_files = [];
|
||||||
|
if (typeof window.localStorage != 'undefined' && typeof egw.getSessionItem('phpgwapi', 'egw_clipboard') != 'undefined')
|
||||||
|
{
|
||||||
|
var clipboard = JSON.parse(egw.getSessionItem('phpgwapi', 'egw_clipboard')) || {
|
||||||
|
type:[],
|
||||||
|
selected:[]
|
||||||
|
};
|
||||||
|
if(clipboard.type.indexOf('file') >= 0)
|
||||||
|
{
|
||||||
|
for(var i = 0; i < clipboard.selected.length; i++)
|
||||||
|
{
|
||||||
|
var split = clipboard.selected[i].id.split('::');
|
||||||
|
if(split[0] == 'filemanager')
|
||||||
|
{
|
||||||
|
clipboard_files.push(this.id2path(clipboard.selected[i].id));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return clipboard_files;
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update clickboard tooltips in buttons
|
* Update clickboard tooltips in buttons
|
||||||
*/
|
*/
|
||||||
@ -318,7 +335,7 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
for(var i=0; i < paste_buttons.length; ++i)
|
for(var i=0; i < paste_buttons.length; ++i)
|
||||||
{
|
{
|
||||||
var button = this.et2.getWidgetById(paste_buttons[i]);
|
var button = this.et2.getWidgetById(paste_buttons[i]);
|
||||||
if (button) button.set_statustext(this.clipboard_files.join(",\n"));
|
if (button) button.set_statustext(this.get_clipboard_files().join(",\n"));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -331,21 +348,39 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
clipboard: function(_action, _elems)
|
clipboard: function(_action, _elems)
|
||||||
{
|
{
|
||||||
this.clipboard_is_cut = _action.id == "cut";
|
this.clipboard_is_cut = _action.id == "cut";
|
||||||
if (_action.id != "add") this.clipboard_files = [];
|
var clipboard = JSON.parse(egw.getSessionItem('phpgwapi', 'egw_clipboard')) || {
|
||||||
|
type:[],
|
||||||
this.clipboard_files = this.clipboard_files.concat(this._elems2paths(_elems));
|
selected:[]
|
||||||
|
};
|
||||||
if (_action.id == "add" && this.clipboard_files.length > 1)
|
if(_action.id != "add")
|
||||||
{
|
{
|
||||||
// ToDo: make sure files are unique
|
clipboard = {
|
||||||
|
type:[],
|
||||||
|
selected:[]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// When pasting we need to know the type of data - pull from actions
|
||||||
|
var drag = _elems[0].getSelectedLinks('drag').links;
|
||||||
|
for(var k in drag)
|
||||||
|
{
|
||||||
|
if(drag[k].enabled && drag[k].actionObj.dragType.length > 0)
|
||||||
|
{
|
||||||
|
clipboard.type = clipboard.type.concat(drag[k].actionObj.dragType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
clipboard.type = jQuery.unique(clipboard.type);
|
||||||
|
// egwAction is a circular structure and can't be stringified so just take what we want
|
||||||
|
// Hopefully that's enough for the action handlers
|
||||||
|
for(var k in _elems)
|
||||||
|
{
|
||||||
|
if(_elems[k].id) clipboard.selected.push({id:_elems[k].id, data:_elems[k].data});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Save it in session
|
||||||
|
egw.setSessionItem('phpgwapi', 'egw_clipboard', JSON.stringify(clipboard));
|
||||||
|
|
||||||
this.clipboard_tooltips();
|
this.clipboard_tooltips();
|
||||||
|
|
||||||
// update localstore with files
|
|
||||||
if (typeof window.localStorage != 'undefined')
|
|
||||||
{
|
|
||||||
window.localStorage[this.clipboard_localstore_key] = JSON.stringify(this.clipboard_files);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -355,7 +390,8 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
*/
|
*/
|
||||||
paste: function(_type)
|
paste: function(_type)
|
||||||
{
|
{
|
||||||
if (this.clipboard_files.length == 0)
|
var clipboard_files = this.get_clipboard_files();
|
||||||
|
if (clipboard_files.length == 0)
|
||||||
{
|
{
|
||||||
alert(this.egw.lang('Clipboard is empty!'));
|
alert(this.egw.lang('Clipboard is empty!'));
|
||||||
return;
|
return;
|
||||||
@ -363,22 +399,22 @@ app.classes.filemanager = AppJS.extend(
|
|||||||
switch(_type)
|
switch(_type)
|
||||||
{
|
{
|
||||||
case 'mailpaste':
|
case 'mailpaste':
|
||||||
this.open_mail(this.clipboard_files);
|
this.open_mail(clipboard_files);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'paste':
|
case 'paste':
|
||||||
this._do_action(this.clipboard_is_cut ? 'move' : 'copy', this.clipboard_files);
|
this._do_action(this.clipboard_is_cut ? 'move' : 'copy', clipboard_files);
|
||||||
|
|
||||||
if (this.clipboard_is_cut)
|
if (this.clipboard_is_cut)
|
||||||
{
|
{
|
||||||
this.clipboard_is_cut = false;
|
this.clipboard_is_cut = false;
|
||||||
this.clipboard_files = [];
|
clipboard_files = [];
|
||||||
this.clipboard_tooltips();
|
this.clipboard_tooltips();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'linkpaste':
|
case 'linkpaste':
|
||||||
this._do_action('symlink', this.clipboard_files);
|
this._do_action('symlink', clipboard_files);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -653,7 +653,7 @@ function egwPopupActionImplementation()
|
|||||||
// Save it in session
|
// Save it in session
|
||||||
egw.setSessionItem('phpgwapi', 'egw_clipboard', JSON.stringify(clipboard));
|
egw.setSessionItem('phpgwapi', 'egw_clipboard', JSON.stringify(clipboard));
|
||||||
},true);
|
},true);
|
||||||
copy_action.group = 1.5;
|
copy_action.group = 2.5;
|
||||||
}
|
}
|
||||||
if(add_action == null)
|
if(add_action == null)
|
||||||
{
|
{
|
||||||
@ -684,7 +684,7 @@ function egwPopupActionImplementation()
|
|||||||
// Save it in session
|
// Save it in session
|
||||||
egw.setSessionItem('phpgwapi', 'egw_clipboard', JSON.stringify(clipboard));
|
egw.setSessionItem('phpgwapi', 'egw_clipboard', JSON.stringify(clipboard));
|
||||||
},true);
|
},true);
|
||||||
add_action.group = 1.5;
|
add_action.group = 2.5;
|
||||||
|
|
||||||
}
|
}
|
||||||
if(typeof _links[copy_action.id] == 'undefined')
|
if(typeof _links[copy_action.id] == 'undefined')
|
||||||
@ -729,7 +729,8 @@ function egwPopupActionImplementation()
|
|||||||
if(paste_action == null)
|
if(paste_action == null)
|
||||||
{
|
{
|
||||||
paste_action = mgr.addAction('popup', 'egw_paste', egw.lang('Paste'), egw.image('editpaste'), paste_exec,true);
|
paste_action = mgr.addAction('popup', 'egw_paste', egw.lang('Paste'), egw.image('editpaste'), paste_exec,true);
|
||||||
paste_action.group = 1.5;
|
paste_action.group = 2.5;
|
||||||
|
paste_action.order = 9;
|
||||||
paste_action.canHaveChildren.push('drop');
|
paste_action.canHaveChildren.push('drop');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user