- MagicSuggest update

- Fix setting taglist value via js
This commit is contained in:
Nathan Gray 2013-10-11 14:38:04 +00:00
parent f73f8fea89
commit b77ce6a8dc
8 changed files with 56 additions and 29 deletions

View File

@ -14,7 +14,7 @@
/*egw:uses
et2_core_inputWidget;
/phpgwapi/js/jquery/magicsuggest/src/magicsuggest-1.3.0.js;
/phpgwapi/js/jquery/magicsuggest/src/magicsuggest-1.3.1.js;
*/
/**
@ -142,7 +142,6 @@ var et2_taglist = et2_selectbox.extend(
var options = jQuery.extend( {
data: this.options.select_options && !jQuery.isEmptyObject(this.options.select_options) ? this._options2data(this.options.select_options) : this.options.autocomplete_url,
dataUrlParams: this.options.autocomplete_params,
value: this.options.value,
method: 'GET',
displayField: "label",
invalidCls: 'invalid ui-state-error',
@ -160,6 +159,8 @@ var et2_taglist = et2_selectbox.extend(
}, this.lib_options);
this.taglist = this.taglist.magicSuggest(options);
this.set_value(this.options.value);
// Display / hide a loading icon while fetching
$j(this.taglist)
.on("beforeload", function() {this.container.prepend('<div class="ui-icon loading"/>');})
@ -281,24 +282,27 @@ var et2_taglist = et2_selectbox.extend(
*/
set_value: function(value)
{
this.options.value = value;
if(this.taglist == null) return;
this.taglist.clear(true);
if(!value) return;
var values = jQuery.isArray(value) ? value : [value];
if (value && this.options.allowFreeEntries)
{
var need_setdata = false;
for(var i=0; i < values.length; ++i)
{
var v = values[i];
if (typeof this.options.select_options[v] == 'undefined')
{
this.options.select_options[v] = v;
need_setdata = true;
values[i] = {
id: v,
label: v
}
}
}
if (this.taglist && need_setdata) this.taglist.setData(this._options2data(this.options.select_options));
}
if(this.taglist == null) return;
this.taglist.clear(true);
this.taglist.setValue(values);
this.taglist.addToSelection(values);
},
getValue: function()
@ -335,13 +339,13 @@ var et2_taglist_email = et2_taglist.extend(
minChars: 3
},
// PREG for client-side validation copied from etemplate_widget_url
EMAIL_PREG: new RegExp(/^[^\x00-\x20()<>@,;:\".\[\]]+@([a-z0-9ÄÖÜäöüß](|[a-z0-9ÄÖÜäöüß_-]*[a-z0-9ÄÖÜäöüß])\.)+[a-z]{2,6}/),
// PREG for validation comes from et2_url
//EMAIL_PREG: new RegExp(/^[^\x00-\x20()<>@,;:\".\[\]]+@([a-z0-9ÄÖÜäöüß](|[a-z0-9ÄÖÜäöüß_-]*[a-z0-9ÄÖÜäöüß])\.)+[a-z]{2,6}/),
selectionRenderer: function(item)
{
// We check free entries for valid email, and render as invalid if it's not.
var valid = item.id != item.label || this.EMAIL_PREG.test(item.id || '');
var valid = item.id != item.label || et2_url.prototype.EMAIL_PREG.test(item.id || '');
var label = jQuery('<span>').text(item.label);
if (typeof item.title != 'undefined') label.attr('title', item.title);
@ -354,4 +358,4 @@ et2_register_widget(et2_taglist_email, ["taglist-email"]);
// Require css
// TODO: merge into etemplate2.css with all other widgets when done
if(typeof egw != 'undefined') egw(window).includeCSS(egw.webserverUrl + "/phpgwapi/js/jquery/magicsuggest/src/magicsuggest-1.3.0.css");
if(typeof egw != 'undefined') egw(window).includeCSS(egw.webserverUrl + "/phpgwapi/js/jquery/magicsuggest/src/magicsuggest-1.3.1.css");

View File

@ -5,6 +5,15 @@ Check out full documentation and examples here: http://nicolasbize.github.com/ma
Milestone change log:
v1.3.1 BugFixing again! (Minor Tagged Milestone - August 17th, 2013)
====================================================================
- (fix) enable after disable now works (credits to amanokerim - https://github.com/amanokerim)
- (fix) trigger icon now takes full height (credits to DioVayne - https://github.com/DioVayne)
- (fix) clear now compatible with isSilent (credits to Coywolf - https://github.com/Coywolf)
- (fix) groupBy was broken by 1.3.0
- (fea) compatibility with latest jQuery 1.10.2 (credits to RafaelMalgor - https://github.com/RafaelMalgor)
- (fea) resulted JSON objects can now have a custom result property resultsField (credits to RafaelMalgor - https://github.com/RafaelMalgor)
v1.3.0 Some more features and bugfixing (Minor Tagged Milestone - May 25th, 2013)
=================================================================================
- (fea) combo component can now be fetched through the same div element (credits to meghuizen - https://github.com/meghuizen)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -74,7 +74,9 @@
.ms-ctn .ms-trigger{
float: right;
width: 27px;
height: 28px;
height:100%;
position:absolute;
right:0;
border-left: 1px solid #CCC;
background: #EEE;
cursor: pointer;
@ -162,6 +164,7 @@
.ms-sel-ctn{
overflow: auto;
line-height: 22px;
padding-right:27px;
}
.ms-sel-ctn .ms-sel-item{
background: #555;

View File

@ -6,7 +6,7 @@
*
* Author: Nicolas Bize
* Date: Feb. 8th 2013
* Version: 1.3.0
* Version: 1.3.1
* Licence: MagicSuggest is licenced under MIT licence (http://www.opensource.org/licenses/mit-license.php)
*/
(function($)
@ -298,6 +298,13 @@
*/
resultAsString: false,
/**
* @cfg {String} resultsField
* <p>Name of JSON object property that represents the list of suggested objets</p>
* Defaults to <code>results</code>
*/
resultsField: 'results',
/**
* @cfg {String} selectionCls
* <p>A custom CSS class to add to a selected item</p>
@ -469,7 +476,7 @@
*/
this.clear = function(isSilent)
{
this.removeFromSelection(_selection.slice(0)); // clone array to avoid concurrency issues
this.removeFromSelection(_selection.slice(0), isSilent); // clone array to avoid concurrency issues
};
/**
@ -500,7 +507,6 @@
this.empty = function(){
this.input.removeClass(cfg.emptyTextCls);
this.input.val('');
ms.input.attr('disabled', false);
};
/**
@ -510,6 +516,7 @@
{
this.container.removeClass('ms-ctn-disabled');
cfg.disabled = false;
ms.input.attr('disabled', false);
};
/**
@ -825,7 +832,7 @@
url: data,
data: params,
success: function(asyncData){
json = typeof(asyncData)==='string'?JSON.parse(asyncData):asyncData;
json = typeof(asyncData) === 'string' ? JSON.parse(asyncData) : asyncData;
self._processSuggestions(json);
$(ms).trigger('load', [ms, json]);
},
@ -840,7 +847,7 @@
if(data.length > 0 && typeof(data[0]) === 'string') { // results from array of strings
_cbData = self._getEntriesFromStringArray(data);
} else { // regular json array or json object with results property
_cbData = data.results || data;
_cbData = data[cfg.resultsField] || data;
}
}
self._displaySuggestions(self._sortAndTrim(_cbData));
@ -979,7 +986,7 @@
resultItemEl.mouseover($.proxy(handlers._onComboItemMouseOver, ref));
html += $('<div/>').append(resultItemEl).html();
});
ms.combobox.html(html);
ms.combobox.append(html);
_comboItemHeight = ms.combobox.find('.ms-res-item:first').outerHeight();
},
@ -1017,7 +1024,7 @@
// small cross img
delItemEl = $('<span/>', {
'class': 'ms-close-btn'
}).data('json', value).prependTo(selectedItemEl);
}).data('json', value).appendTo(selectedItemEl);
delItemEl.click($.proxy(handlers._onTagTriggerClick, ref));
}
@ -1037,7 +1044,7 @@
if(cfg.selectionPosition === 'inner') {
ms.input.width(0);
inputOffset = ms.input.offset().left - ms.selectionContainer.offset().left;
w = ms.container.width() - inputOffset - (cfg.hideTrigger === true ? 16 : 42);
w = ms.container.width() - inputOffset - 42;
ms.input.width(w);
ms.container.height(ms.selectionContainer.height());
}
@ -1281,8 +1288,9 @@
e.preventDefault();
}
break;
case 188: // comma
if(e.shiftKey) break; // Shift + , = < on some keyboards
case 9: // tab
case 188: // esc
case 13: // enter
e.preventDefault();
break;
@ -1337,7 +1345,8 @@
e.preventDefault();
break;
case 13:case 9:case 188:// enter, tab, comma
if(e.keyCode !== 188 || cfg.useCommaKey === true) {
// Shift + comma = < on English keyboard
if(e.keyCode !== 188 || (cfg.useCommaKey === true && !e.shiftKey)) {
e.preventDefault();
if(cfg.expanded === true){ // if a selection is performed, select it and reset field
selected = ms.combobox.find('.ms-res-item-active:first');
@ -1471,4 +1480,6 @@
}
return obj;
};
// $.fn.magicSuggest.defaults = {};
})(jQuery);