103 lines
4.1 KiB
JavaScript
103 lines
4.1 KiB
JavaScript
(function($, Chosen, AbstractChosen) {
|
|
$.fn.jchosen = function (options) {
|
|
if (!AbstractChosen.browser_is_supported()) {
|
|
return this;
|
|
}
|
|
return this.each(function (input_field) {
|
|
var $this, chosen;
|
|
$this = $(this);
|
|
chosen = $this.data('chosen');
|
|
if (options === 'destroy') {
|
|
if (chosen instanceof JoomlaChosen) {
|
|
chosen.destroy();
|
|
}
|
|
return;
|
|
}
|
|
if (!(chosen instanceof JoomlaChosen)) {
|
|
$this.data('chosen', new JoomlaChosen(this, options));
|
|
}
|
|
});
|
|
};
|
|
|
|
JoomlaChosen = (function (_super) {
|
|
var __hasProp = {}.hasOwnProperty,
|
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
|
|
__extends(JoomlaChosen, _super);
|
|
|
|
function JoomlaChosen() {
|
|
_ref = JoomlaChosen.__super__.constructor.apply(this, arguments);
|
|
return _ref;
|
|
}
|
|
|
|
JoomlaChosen.prototype.setup = function () {
|
|
var return_value;
|
|
return_value = JoomlaChosen.__super__.setup.apply(this, arguments);
|
|
this.allow_custom_value = this.form_field_jq.hasClass("chosen-custom-value") || this.options.allow_custom_value;
|
|
this.custom_value_prefix = this.form_field_jq.attr("data-custom_value_prefix") || this.custom_value_prefix;
|
|
|
|
return return_value;
|
|
};
|
|
|
|
JoomlaChosen.prototype.set_default_text = function () {
|
|
this.custom_group_text = this.form_field.getAttribute("data-custom_group_text") || this.options.custom_group_text || "Custom Value";
|
|
|
|
return JoomlaChosen.__super__.set_default_text.apply(this, arguments);
|
|
};
|
|
|
|
JoomlaChosen.prototype.result_select = function (evt) {
|
|
var group, option, value;
|
|
|
|
if (!this.result_highlight && (!this.is_multiple) && this.allow_custom_value) {
|
|
value = this.search_field.val();
|
|
group = this.add_unique_custom_group();
|
|
option = $('<option value="' + this.custom_value_prefix + value + '">' + value + '</option>');
|
|
group.append(option);
|
|
this.form_field_jq.append(group);
|
|
this.form_field.options[this.form_field.options.length - 1].selected = true;
|
|
if (!evt.metaKey) {
|
|
this.results_hide();
|
|
}
|
|
return this.results_build();
|
|
}
|
|
|
|
return JoomlaChosen.__super__.result_select.apply(this, arguments);
|
|
};
|
|
|
|
JoomlaChosen.prototype.find_custom_group = function () {
|
|
var found, group, _i, _len, _ref;
|
|
_ref = $('optgroup', this.form_field);
|
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
|
group = _ref[_i];
|
|
if (group.getAttribute('label') === this.custom_group_text) {
|
|
found = group;
|
|
}
|
|
}
|
|
return found;
|
|
};
|
|
|
|
JoomlaChosen.prototype.add_unique_custom_group = function () {
|
|
var group;
|
|
group = this.find_custom_group();
|
|
if (!group) {
|
|
group = $('<optgroup label="' + this.custom_group_text + '"></optgroup>');
|
|
}
|
|
return $(group);
|
|
};
|
|
|
|
/**
|
|
* We choose to override this function so deliberately don't call super
|
|
*/
|
|
JoomlaChosen.prototype.container_width = function () {
|
|
if (this.options.width != null) {
|
|
return this.options.width;
|
|
} else {
|
|
// Original: return "" + this.form_field.offsetWidth + "px";
|
|
return this.form_field_jq.css("width") || "" + this.form_field.offsetWidth + "px";
|
|
}
|
|
};
|
|
|
|
return JoomlaChosen;
|
|
|
|
})(Chosen);
|
|
})(jQuery, document.Chosen, document.AbstractChosen);
|