­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ ­ (function (gfFieldFilterUI, $) { $.fn.gfFilterUI = function(filterSettings, initVars, allowMultiple, minResizeHeight) { init(this, filterSettings, initVars, allowMultiple, minResizeHeight ); return this; }; // private var $container, operatorStrings, settings, filters, mode, imagesURL, isResizable, allowMultiple, height; function init (c, s, initVars, m, h){ $container = $(c); $container .css('position' , 'relative') .html('
'); height = h; isResizable = typeof height != 'undefined' && height > 0; operatorStrings = {"is":"is","isnot":"isNot", ">":"greaterThan", "<":"lessThan", "contains":"contains", "starts_with":"startsWith", "ends_with":"endsWith"}; imagesURL = gf_vars.baseUrl + "/images"; settings = s; filters = initVars && initVars.filters ? initVars.filters : []; mode = initVars && initVars.mode ? initVars.mode : "all"; allowMultiple = typeof m == 'undefined' || m ? true : false ; setUpFilters(filters); } function setUpFilters(filters) { var i; $container.on('change', '.gform-filter-field', function(){ changeField(this); }); $container.on('click', '#gform-no-filters', function(e){ if($('.gform-field-filter').length == 0){ addNewFieldFilter(this); } $(this).remove(); }); $container.on('click', '.gform-add', function(){ addNewFieldFilter(this); }); $container.on('click', '.gform-remove', function(){ removeFieldFilter(this); }); $container.on('change', '.gform-filter-operator', function(){ changeOperator(this, this.value); }); if (typeof filters == 'undefined' || filters.length == 0){ displayNoFiltersMessage(); return; } if(mode != "off"){ $("#gform-field-filters").append(getFilterMode(mode)); } for (i = 0; i < filters.length; i++) { $("#gform-field-filters").append(getNewFilterRow()); } $(".gform-filter-field").each(function (i) { var fieldId = filters[i].field; jQuery(this).val(fieldId); changeField(this); }); $(".gform-filter-operator").each(function (i) { var operator = filters[i].operator; jQuery(this).val(operator); changeOperator(this, this.value); }); $(".gform-filter-value").each(function (i) { var value = filters[i].value; jQuery(this).val(value); jQuery(this).change(); }); maybeMakeResizable() } function getNewFilterRow() { var str; str = "
"; str += getFilterFields() + getFilterOperators() + getFilterValues() + getAddRemoveButtons(); str += "
"; return str; } function getFilterFields() { var i, j, key, val, label, question, options, disabled = "", numRows, select = []; select.push(""); select.push(""); return select.join(''); } function changeOperator (operatorSelect) { var $select = $(operatorSelect); var $fieldSelect = $select.siblings('.gform-filter-field'); var filter = getFilter($fieldSelect.val()); if (filter) { $select.siblings(".gform-filter-value").replaceWith(getFilterValues(filter, operatorSelect.value)); } setDisabledFields(); if(window['gformInitDatepicker']) {gformInitDatepicker();} } function changeField (fieldSelect) { var filter = getFilter(fieldSelect.value); if (filter) { var $select = $(fieldSelect); $select.siblings(".gform-filter-value").replaceWith(getFilterValues(filter)); $select.siblings(".gform-filter-type").val(filter.type); $select.siblings(".gform-filter-operator").replaceWith(getFilterOperators(filter)); $select.siblings(".gform-filter-operator").change(); } setDisabledFields(); } function isFieldSelected (fieldId) { fieldId = fieldId.toString(); var selectedFields = []; $('.gform-filter-field :selected').each(function (i, selected) { selectedFields[i] = $(selected).val(); }); return $.inArray(fieldId, selectedFields) > -1 ? true : false; } function getFilterOperators (filter) { var i, operator, str = ""; return str; } function getFilterValues (filter, selectedOperator) { var i, val, text, str, options = "", placeholder, cssClass, supporterOperators; cssClass = 'gform-filter-value'; if ( filter && typeof filter.cssClass != 'undefined' ) { cssClass += ' ' + filter.cssClass; } if ( filter && filter.values && selectedOperator != 'contains' ) { if ( typeof filter.placeholder != 'undefined' ){ options += ''.format(filter.placeholder); } for (i = 0; i < filter.values.length; i++) { val = filter.values[i].value; text = filter.values[i].text; if ( filter.values[i].operators && $.inArray( selectedOperator, filter.values[i].operators ) === -1 ) { continue; } options += ''.format(val, text); } str = "".format(cssClass, options); } else { placeholder = ( filter && typeof filter.placeholder != 'undefined' ) ? "placeholder='{0}'".format(filter.placeholder) : ''; str = "".format(cssClass, placeholder); } return str; } function getFilter (key) { if (!key) return; for (var i = 0; i < settings.length; i++) { if (key == settings[i].key) return settings[i]; if (settings[i].group) { for (var j = 0; j < settings[i].filters.length; j++) { if (key == settings[i].filters[j].key) return settings[i].filters[j]; } } } } function getAddRemoveButtons () { var str = ""; if(!allowMultiple) return str; str += "{1}".format(imagesURL, gf_vars.addFieldFilter, gf_vars.addFieldFilter); str += "" + gf_vars.removeFieldFilter + ""; return str; } function maybeMakeResizable () { if(!isResizable) return; var $filterBox = $("#gform-field-filters"); var $filters = $(".gform-field-filter"); if ($filters.length <= 1) { if ($($container).hasClass('ui-resizable')) $container.resizable('destroy'); return; } var makeResizable = ($filterBox.get(0).scrollHeight > $container.height()) || $container.height() >= height; if (makeResizable) { $container .css({'min-height': height + 'px' , 'border-bottom': '5px double #DDD'}) .resizable({ handles : 's', minHeight: height }); $filterBox.css("min-height", height); } else { $container.css({'min-height': '', 'border-bottom': ''}); } } function displayNoFiltersMessage () { var str = ""; str += "
" + gf_vars.addFieldFilter; str += "{1}
".format(imagesURL, gf_vars.addFieldFilter, gf_vars.addFieldFilter); $("#gform-field-filters").html(str); if(isResizable){ $container.css({'min-height': '', 'border-bottom': ''}); $container.height(80); $("#gform-field-filters").css("min-height", ''); } } function setDisabledFields () { $("select.gform-filter-field option").removeAttr("disabled"); $("select.gform-filter-field").each(function (i) { var filter = getFilter(this.value); if (typeof(filter) != 'undefined' && filter.preventMultiple && isFieldSelected(this.value)) { $("select.gform-filter-field option[value='" + this.value + "']:not(:selected)").attr('disabled', 'disabled'); } }); } function getFilterMode(mode){ var html; html = ''.format(selected("all", mode), gf_vars.all, selected("any", mode), gf_vars.any); html = gf_vars.filterAndAny.format(html); return html } function selected(selected, current){ return selected == current ? 'selected="selected"' : ""; } function addFilterMode ($filterRow) { $filterRow.after(getFilterMode()); } function addNewFieldFilter (el) { var $el, $filterRow; $el = $(el); if($el.is("img")) $filterRow = $el.parent(); else $filterRow = $el; $filterRow.after(getNewFilterRow()); $filterRow.next("div") .find(".gform-filter-field").change() .find(".gform-filter-operator").change(); if ($(".gform-field-filter").length == 1){ addFilterMode($filterRow); } maybeMakeResizable(); } function removeFieldFilter (img) { $(img).parent().remove(); if ($(".gform-field-filter").length == 0) displayNoFiltersMessage(); setDisabledFields(); maybeMakeResizable(); } String.prototype.format = function () { var args = arguments; return this.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match ; }); }; }(window.gfFilterUI = window.gfFilterUI || {}, jQuery));