egroupware/calendar/js/et2_widget_owner.js

161 lines
6.4 KiB
JavaScript
Raw Normal View History

2020-02-27 21:37:36 +01:00
"use strict";
/*
2016-02-09 21:28:57 +01:00
* Egroupware
* @license http://opensource.org/licenses/gpl-license.php GPL - GNU General Public License
* @package
* @subpackage
2016-02-09 21:28:57 +01:00
* @link http://www.egroupware.org
* @author Nathan Gray
* @version $Id$
*/
2020-02-27 21:37:36 +01:00
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
2016-02-09 21:28:57 +01:00
/*egw:uses
2020-02-27 21:37:36 +01:00
et2_widget_taglist;
2016-02-09 21:28:57 +01:00
*/
2020-02-27 21:37:36 +01:00
var et2_core_widget_1 = require("../../api/js/etemplate/et2_core_widget");
2016-02-09 21:28:57 +01:00
/**
* Tag list widget customised for calendar owner, which can be a user
* account or group, or an entry from almost any app, or an email address
*
* A cross between auto complete, selectbox and chosen multiselect
*
* Uses MagicSuggest library
* @see http://nicolasbize.github.io/magicsuggest/
* @augments et2_selectbox
*/
2020-02-27 21:37:36 +01:00
var et2_calendar_owner = /** @class */ (function (_super) {
__extends(et2_calendar_owner, _super);
function et2_calendar_owner() {
var _this = _super !== null && _super.apply(this, arguments) || this;
// Allows sub-widgets to override options to the library
_this.lib_options = {
autoSelect: false,
groupBy: 'app',
minChars: 2,
selectFirst: true,
// This option will also expand when the selection is changed
// via code, which we do not want
//expandOnFocus: true
toggleOnClick: true
};
return _this;
}
et2_calendar_owner.prototype.doLoadingFinished = function () {
_super.prototype.doLoadingFinished.call(this);
var widget = this;
// onChange fired when losing focus, which is different from normal
this._oldValue = this.taglist.getValue();
return true;
};
et2_calendar_owner.prototype.selectionRenderer = function (item) {
if (this && this.options && this.options.allowFreeEntries) {
return _super.prototype.selectionRenderer.call(this, item);
}
else {
var label = jQuery('<span>').text(item.label);
if (item.class)
label.addClass(item.class);
if (typeof item.title != 'undefined')
label.attr('title', item.title);
if (typeof item.data != 'undefined')
label.attr('data', item.data);
if (typeof item.icon != 'undefined') {
var wrapper = jQuery('<div>').addClass('et2_taglist_tags_icon_wrapper');
jQuery('<span/>')
.addClass('et2_taglist_tags_icon')
.css({ "background-image": "url(" + (item.icon.match(/^(http|https|\/)/) ? item.icon : egw.image(item.icon, item.app)) + ")" })
.appendTo(wrapper);
label.appendTo(wrapper);
return wrapper;
}
return label;
}
};
et2_calendar_owner.prototype.getValue = function () {
if (this.taglist == null)
return null;
return this.taglist.getValue();
};
/**
* Override parent to handle our special additional data types (c#,r#,etc.) when they
* are not available client side.
*
* @param {string|string[]} _value array of selected owners, which can be a number,
* or a number prefixed with one character indicating the resource type.
*/
et2_calendar_owner.prototype.set_value = function (_value) {
_super.prototype.set_value.call(this, _value);
// If parent didn't find a label, label will be the same as ID so we
// can find them that way
var missing_labels = [];
2020-02-27 21:37:36 +01:00
for (var i = 0; i < this.options.value.length; i++) {
var value = this.options.value[i];
if (value.id == value.label) {
missing_labels.push(value.id);
2020-02-27 21:37:36 +01:00
}
}
if (Object.keys(missing_labels).length > 0) {
// Proper label was not found by parent - ask directly
egw.json('calendar_owner_etemplate_widget::ajax_owner', [missing_labels], function (data) {
var _loop_1 = function (owner) {
if (!owner || typeof owner == "undefined")
return "continue";
var idx = this_1.options.value.find(function (element) { return element.id == owner; });
if (idx) {
idx = jQuery.extend(idx, data[owner]);
}
// Put it in the list of options for next time
this_1.options.select_options.push(data[owner]);
};
var this_1 = this;
for (var owner in data) {
_loop_1(owner);
}
this.set_value(this.options.value);
}, this, true, this).sendRequest();
}
2020-02-27 21:37:36 +01:00
if (this.taglist) {
this.taglist.clear(true);
this.taglist.addToSelection(this.options.value, true);
}
};
et2_calendar_owner._attributes = {
"autocomplete_url": {
"default": "calendar_owner_etemplate_widget::ajax_owner"
},
"autocomplete_params": {
"name": "Autocomplete parameters",
"type": "any",
"default": {},
"description": "Extra parameters passed to autocomplete URL. It should be a stringified JSON object."
},
allowFreeEntries: {
"default": false,
ignore: true
},
select_options: {
"type": "any",
"name": "Select options",
// Set to empty object to use selectbox's option finding
"default": {},
"description": "Internally used to hold the select options."
}
};
return et2_calendar_owner;
}(et2_taglist_email));
exports.et2_calendar_owner = et2_calendar_owner;
et2_core_widget_1.et2_register_widget(et2_calendar_owner, ["calendar-owner"]);
//# sourceMappingURL=et2_widget_owner.js.map