Get the link entry app selection menu working again

This commit is contained in:
nathan 2021-08-12 11:21:49 -06:00
parent 1d0772a064
commit 54e5826fc7

View File

@ -102,7 +102,8 @@ export class et2_link_to extends et2_inputWidget
*
* @memberOf et2_link_to
*/
constructor(_parent : et2_widget, _attrs? : WidgetConfig, _child? : object) {
constructor(_parent: et2_widget, _attrs?: WidgetConfig, _child?: object)
{
super(_parent, _attrs, ClassWithAttributes.extendAttributes(et2_link_to._attributes, _child || {}));
this.div = jQuery(document.createElement("div")).addClass("et2_link_to et2_toolbar");
@ -143,13 +144,20 @@ export class et2_link_to extends et2_inputWidget
*/
getDOMNode(_sender)
{
if(_sender == this) {
if (_sender == this)
{
return this.div[0];
} else if (_sender._type == 'link-entry') {
}
else if (_sender._type == 'link-entry')
{
return this.link_div[0];
} else if (_sender._type == 'file') {
}
else if (_sender._type == 'file')
{
return this.file_div[0];
} else if (_sender._type == 'vfs-select') {
}
else if (_sender._type == 'vfs-select')
{
return this.filemanager_button[0];
}
}
@ -203,8 +211,16 @@ export class et2_link_to extends et2_inputWidget
only_app: this.options.only_app,
application_list: this.options.application_list,
blur: this.options.search_label ? this.options.search_label : this.egw().lang('Search...'),
query: function() { self.link_button.hide(); return true;},
select: function() {self.link_button.show(); return true;},
query: function ()
{
self.link_button.hide();
return true;
},
select: function ()
{
self.link_button.show();
return true;
},
readonly: this.options.readonly
};
this.link_entry = <et2_link_entry>et2_createWidget("link-entry", link_entry_attrs, this);
@ -246,7 +262,8 @@ export class et2_link_to extends et2_inputWidget
};
// only set server-side callback, if we have a real application-id (not null or array)
// otherwise it only gives an error on server-side
if (self.options.value && self.options.value.to_id && typeof self.options.value.to_id != 'object') {
if (self.options.value && self.options.value.to_id && typeof self.options.value.to_id != 'object')
{
select_attrs.method = 'EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link_existing';
select_attrs.method_id = self.options.value.to_app + ':' + self.options.value.to_id;
}
@ -267,9 +284,11 @@ export class et2_link_to extends et2_inputWidget
{
// Find the tab widget, if there is one
var tabs: et2_widget = self;
do {
do
{
tabs = tabs.getParent();
} while (tabs != self.getRoot() && tabs.getType() != 'tabbox');
}
while (tabs != self.getRoot() && tabs.getType() != 'tabbox');
if (tabs != self.getRoot())
{
(<et2_tabbox><unknown>tabs).activateTab(self);
@ -325,7 +344,8 @@ export class et2_link_to extends et2_inputWidget
// Files
if (!self.options.no_files)
{
for(var file in self.file_upload.options.value) {
for (var file in self.file_upload.options.value)
{
links.push({
app: 'file',
@ -333,7 +353,10 @@ export class et2_link_to extends et2_inputWidget
name: self.file_upload.options.value[file].name,
type: self.file_upload.options.value[file].type,
remark: jQuery("li[file='" + self.file_upload.options.value[file].name.replace(/'/g, '&quot') + "'] > input", self.file_upload.progress)
.filter(function() { return jQuery(this).attr("placeholder") != jQuery(this).val();}).val()
.filter(function ()
{
return jQuery(this).attr("placeholder") != jQuery(this).val();
}).val()
});
}
}
@ -366,7 +389,8 @@ export class et2_link_to extends et2_inputWidget
this.status_span.fadeIn().delay(1000).fadeOut();
delete this.options.value.app;
delete this.options.value.id;
for(var file in this.file_upload.options.value) {
for (var file in this.file_upload.options.value)
{
delete this.file_upload.options.value[file];
}
this.file_upload.progress.empty();
@ -407,8 +431,10 @@ export class et2_link_to extends et2_inputWidget
var self = this;
var list_widget = null;
this.getRoot().iterateOver(
function(widget) {
if(widget.id == self.id) {
function (widget)
{
if (widget.id == self.id)
{
list_widget = widget;
if (success === true)
{
@ -433,7 +459,8 @@ export class et2_link_to extends et2_inputWidget
if (typeof link.title == 'undefined')
{
// Callback to server for title
egw.link_title(link.app, link.id, function(title) {
egw.link_title(link.app, link.id, function (title)
{
link.title = title;
list_widget._add_link(link);
});
@ -470,6 +497,7 @@ export class et2_link_to extends et2_inputWidget
this.options.no_files = no_files;
}
}
et2_register_widget(et2_link_to, ["link-to"]);
/**
@ -510,7 +538,8 @@ export class et2_link_apps extends et2_selectbox
}
// Register to update preference
var self = this;
this.input.bind("click",function() {
this.input.bind("click", function ()
{
if (typeof self.options.value != 'undefined') var appname = self.options.value.to_app;
egw.set_preference(appname || self.egw().getAppName(), 'link_app', self.getValue());
});
@ -547,6 +576,7 @@ export class et2_link_apps extends et2_selectbox
super.transformAttributes(_attrs);
}
}
et2_register_widget(et2_link_apps, ["link-apps"]);
/**
@ -641,7 +671,8 @@ export class et2_link_entry extends et2_inputWidget
this.createInputWidget();
var self = this;
jQuery(this.getInstanceManager().DOMContainer).on('clear', function(){
jQuery(this.getInstanceManager().DOMContainer).on('clear', function ()
{
// We need to unbind events to prevent a second triggerd event handler
// (eg. setting a project in infolog edit dialog) when the widget gets cleared.
jQuery(self.getDOMNode()).off();
@ -670,40 +701,17 @@ export class et2_link_entry extends et2_inputWidget
// Application selection
jQuery.widget("custom.iconselectmenu", jQuery.ui.selectmenu, {
_setText: function(element, value)
_renderButtonItem: function (value)
{
if(element === this.buttonText)
{
this._setButtonText(value);
}
else
{
this._superApply(element, value);
}
},
_setButtonText: function( value )
{
var _value = this.focusIndex;
if(typeof this.focusIndex === 'undefined')
{
_value = this.element.find( "option:selected" ).val();
}
else
{
var selected = this.items[_value] || {};
_value = selected.value;
}
var _value = value.value;
var url = self.egw().image('navbar', _value);
var buttonItem = jQuery("<span>", {
"class": "ui-selectmenu-text",
title: value
title: value.label
});
jQuery('.ui-selectmenu-text', this.button).replaceWith(buttonItem);
buttonItem.css('background-image', 'url(' + url + ')');
return buttonItem;
},
_renderItem: function (ul, item)
{
@ -772,7 +780,10 @@ export class et2_link_entry extends et2_inputWidget
// Search input
this.search = jQuery(document.createElement("input"))
// .attr("type", "search") // Fake it for all browsers below
.focus(function(){if(!self.options.only_app) {
.focus(function ()
{
if (!self.options.only_app)
{
// Adjust width, leave room for app select & link button
self.div.removeClass("no_app");
if (self.options.app_icons)
@ -783,8 +794,10 @@ export class et2_link_entry extends et2_inputWidget
{
self.app_select.show();
}
}})
.blur(function(e) {
}
})
.blur(function (e)
{
if (self.div.has(e.relatedTarget).length) return;
if (self.options.app_icons)
{
@ -794,7 +807,8 @@ export class et2_link_entry extends et2_inputWidget
}
else if (self.search.val())
{
if(self.options.only_app) {
if (self.options.only_app)
{
// Adjust width, leave room for app select & link button
self.div.addClass("no_app");
}
@ -843,7 +857,8 @@ export class et2_link_entry extends et2_inputWidget
var extra: any = {};
// Extra stuff
if(typeof item.label == 'object') {
if (typeof item.label == 'object')
{
extra = item.label;
item.label = extra.label ? extra.label : extra;
if (extra['style.backgroundColor'] || extra.color)
@ -867,7 +882,10 @@ export class et2_link_entry extends et2_inputWidget
// Normal stuff
li.append(jQuery("<a></a>").text(item.label))
.appendTo(ul);
window.setTimeout(function(){ul.css('max-width', jQuery('.et2_container').width()-ul.offset().left);}, 300);
window.setTimeout(function ()
{
ul.css('max-width', jQuery('.et2_container').width() - ul.offset().left);
}, 300);
return li;
};
@ -1032,11 +1050,14 @@ export class et2_link_entry extends et2_inputWidget
}
if (!_value.app) _value.app = this.options.only_app || this.app_select.val();
if(_value.id) {
if (_value.id)
{
// Remove specific display and revert to CSS file
// show() would use inline, should be inline-block
this.clear.css('display', '');
} else {
}
else
{
this.clear.hide();
return;
}
@ -1045,7 +1066,8 @@ export class et2_link_entry extends et2_inputWidget
console.warn("Bad value for link widget. Need an object with keys 'app', 'id', and optionally 'title'", _value);
return;
}
if(!_value.title) {
if (!_value.title)
{
var title = this.egw().link_title(_value.app, _value.id);
if (title != null)
{
@ -1156,7 +1178,8 @@ export class et2_link_entry extends et2_inputWidget
if (!this.options.query(request, this)) return false;
}
if((typeof request.no_cache == 'undefined' && !request.no_cache) && request.term in this.cache) {
if ((typeof request.no_cache == 'undefined' && !request.no_cache) && request.term in this.cache)
{
return response(this.cache[request.term]);
}
@ -1210,7 +1233,10 @@ export class et2_link_entry extends et2_inputWidget
this.search.change();
// Turn off processing flag when done
window.setTimeout(jQuery.proxy(function() {delete this.processing;},event.data));
window.setTimeout(jQuery.proxy(function ()
{
delete this.processing;
}, event.data));
}
/**
@ -1226,7 +1252,8 @@ export class et2_link_entry extends et2_inputWidget
}
this.search.removeClass("loading");
var result = [];
for(var id in data) {
for (var id in data)
{
result.push({"value": id, "label": data[id]});
}
this.cache[this.search.val()] = result;
@ -1256,7 +1283,8 @@ export class et2_link_entry extends et2_inputWidget
}
// Links to other entries
if(values.id) {
if (values.id)
{
links.push({
app: values.app,
id: values.id
@ -1285,13 +1313,15 @@ export class et2_link_entry extends et2_inputWidget
*/
_link_result(success)
{
if(success) {
if (success)
{
this.status_span.fadeIn().delay(1000).fadeOut();
delete this.options.value.app;
delete this.options.value.id;
}
}
}
et2_register_widget(et2_link_entry, ["link-entry"]);
/**
@ -1363,17 +1393,22 @@ export class et2_link extends et2_valueWidget implements et2_IDetachedDOM
if (this.options['class']) this.label_span.addClass(this.options['class']);
this.setDOMNode(this.label_span[0]);
}
destroy()
{
if (this.link) this.link.unbind();
this.link = null;
super.destroy.apply(this, arguments);
}
set_label(label)
{
// Remove current label
this.label_span.contents()
.filter(function(){ return this.nodeType == 3; }).remove();
.filter(function ()
{
return this.nodeType == 3;
}).remove();
var parts = et2_csvSplit(label, 2, "%s");
this.label_span.prepend(parts[0]);
@ -1383,6 +1418,7 @@ export class et2_link extends et2_valueWidget implements et2_IDetachedDOM
// add class if label is empty
this.label_span.toggleClass('et2_label_empty', !label || !parts[0]);
}
set_value(_value)
{
if (typeof _value != 'object' && _value && !this.options.only_app)
@ -1421,7 +1457,8 @@ export class et2_link extends et2_valueWidget implements et2_IDetachedDOM
{
// try to fetch value.title if it wasn't fetched during initiation.
if (!_value.title) _value.title = self.egw().link_title(_value.app, _value.id);
if( !self.options.target_app ){
if (!self.options.target_app)
{
self.options.target_app = _value.app;
}
const target = self.options.extra_link_target || _value.app;
@ -1439,7 +1476,10 @@ export class et2_link extends et2_valueWidget implements et2_IDetachedDOM
var node = this.link[0];
if (_value.app && _value.id)
{
var title = this.egw().link_title(_value.app, _value.id, function(title) {self.set_title(node, title);}, this);
var title = this.egw().link_title(_value.app, _value.id, function (title)
{
self.set_title(node, title);
}, this);
if (title != null)
{
_value.title = title;
@ -1522,6 +1562,7 @@ export class et2_link extends et2_valueWidget implements et2_IDetachedDOM
}
}
et2_register_widget(et2_link, ["link", "link-entry_ro"]);
/**
@ -1584,7 +1625,8 @@ export class et2_link_string extends expose(class et2_link_string extends et2_va
destroy()
{
super.destroy.apply(this, arguments);
if (this.node != null) {
if (this.node != null)
{
jQuery(this.node).children().unbind();
}
}
@ -1649,6 +1691,7 @@ export class et2_link_string extends expose(class et2_link_string extends et2_va
this.egw().jsonq('EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_link_list', [_value], this.set_value, this);
return;
}
/**
* Function to get media content to feed the expose
* @param {type} _value
@ -1680,13 +1723,15 @@ export class et2_link_string extends expose(class et2_link_string extends et2_va
if (mediaContent[0].href && mediaContent[0].href.match(/\/webdav.php/, 'ig')) mediaContent[0]["download_href"] = mediaContent[0].href + '?download';
return mediaContent;
}
_add_link(_link_data)
{
var self = this;
var link = jQuery(document.createElement("li"))
.appendTo(this.list)
.addClass("et2_link loading")
.click( function(e){
.click(function (e)
{
var fe = egw_get_file_editor_prefered_mimes(_link_data.type);
if (self.options.expose_view && typeof _link_data.type != 'undefined'
&& _link_data.type.match(self.mime_regexp, 'ig') && !_link_data.type.match(self.mime_audio_regexp, 'ig'))
@ -1719,7 +1764,8 @@ export class et2_link_string extends expose(class et2_link_string extends et2_va
// Now that link is created, get title from server & update
else
{
this.egw().link_title(_link_data.app, _link_data.id, function(title) {
this.egw().link_title(_link_data.app, _link_data.id, function (title)
{
if (title)
this.removeClass("loading").text(title);
else
@ -1791,7 +1837,9 @@ export class et2_link_string extends expose(class et2_link_string extends et2_va
this._labelContainer.contents().not(this.list).remove();
}
}
}){};
})
{
};
et2_register_widget(et2_link_string, ["link-string"]);
/**
@ -1991,7 +2039,10 @@ export class et2_link_list extends et2_link_string
var link_id = isNaN(self.context.data.link_id) ? self.context.data : self.context.data.link_id;
var row = jQuery('#link_' + (self.context.data.dom_id ? self.context.data.dom_id : self.context.data.link_id), self.list);
et2_dialog.show_dialog(
function(button) { if(button == et2_dialog.YES_BUTTON) self._delete_link(link_id,row);},
function (button)
{
if (button == et2_dialog.YES_BUTTON) self._delete_link(link_id, row);
},
egw.lang('Delete link?')
);
});
@ -2128,7 +2179,8 @@ export class et2_link_list extends et2_link_string
//Bind the click handler if there is download_url
if (_link_data && (typeof _link_data.download_url != 'undefined' || _link_data.app != 'egw-data'))
{
$td.click( function(){
$td.click(function ()
{
var fe_mime = egw_get_file_editor_prefered_mimes(_link_data.type);
// Check if the link entry is mime with media type, in order to open it in expose view
if (typeof _link_data.type != 'undefined' &&
@ -2183,7 +2235,8 @@ export class et2_link_list extends et2_link_string
.bind('click', function ()
{
et2_dialog.show_dialog(
function(button) {
function (button)
{
if (button == et2_dialog.YES_BUTTON)
{
self._delete_link(
@ -2222,7 +2275,8 @@ export class et2_link_list extends et2_link_string
{
row.on("dragstart", _link_data, function (event)
{
if(event.dataTransfer == null) {
if (event.dataTransfer == null)
{
return;
}
var data = event.data || {};
@ -2275,6 +2329,7 @@ export class et2_link_list extends et2_link_string
});
}
}
_delete_link(link_id, row)
{
if (row)
@ -2290,7 +2345,13 @@ export class et2_link_list extends et2_link_string
if (typeof link_id != "object")
{
egw.json("EGroupware\\Api\\Etemplate\\Widget\\Link::ajax_delete", [link_id],
function(data) { if(data) {row.slideUp(row.remove);}}
function (data)
{
if (data)
{
row.slideUp(row.remove);
}
}
).sendRequest();
}
else if (row)
@ -2305,7 +2366,8 @@ export class et2_link_list extends et2_link_string
var self = this;
var _widget = link_id.widget || null;
this.getRoot().iterateOver(
function(widget) {
function (widget)
{
if (widget.id == self.id)
{
_widget = widget;
@ -2379,6 +2441,7 @@ export class et2_link_list extends et2_link_string
}
}
}
et2_register_widget(et2_link_list, ["link-list"]);
@ -2404,6 +2467,7 @@ export class et2_link_add extends et2_inputWidget
private div: JQuery;
private app_select: et2_link_apps;
private button: et2_button;
/**
* Constructor
*/
@ -2418,6 +2482,7 @@ export class et2_link_add extends et2_inputWidget
this.div = jQuery(document.createElement("div")).append(this.span);
this.setDOMNode(this.div[0]);
}
doLoadingFinished()
{
super.doLoadingFinished.apply(this, arguments);
@ -2432,7 +2497,10 @@ export class et2_link_add extends et2_inputWidget
application_list: this.options.application ? this.options.application : null
}), this);
this.div.append(this.app_select.getDOMNode());
this.button = <et2_button>et2_createWidget("button", {id:this.options.id+"_add",label: this.egw().lang("add")}, this);
this.button = <et2_button>et2_createWidget("button", {
id: this.options.id + "_add",
label: this.egw().lang("add")
}, this);
this.button.set_label(this.egw().lang("add"));
var self = this;
this.button.click = function ()
@ -2444,6 +2512,7 @@ export class et2_link_add extends et2_inputWidget
return true;
}
/**
* Should be handled client side.
* Return null to avoid overwriting other link values, in case designer used the same ID for multiple widgets
@ -2453,4 +2522,5 @@ export class et2_link_add extends et2_inputWidget
return null;
}
}
et2_register_widget(et2_link_add, ["link-add"]);