;(function ( GFRoutingSetting, $, undefined ) { "use strict"; // Create the defaults once var pluginName = "gfRoutingSetting", defaults = { prefix: "", allowMultiple: true, imagesURL: "", operatorStrings: {"is":"is","isnot":"isNot", ">":"greaterThan", "<":"lessThan", "contains":"contains", "starts_with":"startsWith", "ends_with":"endsWith"}, items: [ { target: '', fieldId: '0', operator: 'is', value: '', type: '', } ], callbacks: { addNewTarget: function() { }, header: function() { return 'Assign ToCondition';} } }; // The plugin constructor function Plugin( element, options ) { this.element = element; this.$element = $(element); this.options = $.extend( true, {}, defaults, options) ; this.prefix = options.prefix; this.settings = options.settings; this.accounts = options.accounts; this._defaults = defaults; this._name = pluginName; this.init(); } Plugin.prototype = { init: function() { var t = this; var routingsMarkup, headerMarkup; headerMarkup = this.getHeaderMarkup(); routingsMarkup = '{0}{1}
'.format(headerMarkup, this.getNewRoutingRow()); var $routings = $(routingsMarkup); $routings.find('.repeater').repeater({ limit: 0, items: this.options.items, addButtonMarkup: ''.format(gf_vars.baseUrl), removeButtonMarkup: ''.format(gf_vars.baseUrl), callbacks: { save: function( obj, data ) { $('#' + t.options.fieldId).val( $.toJSON( data ) ); }, beforeAdd: function( obj, $elem, item){ var $target = $elem.find('.gform-routing-target'); $target.val(item.target); var $field = $elem.find('.gform-routing-field').first(); $field.value = item.fieldId; t.changeField($field); var $operator = $elem.find('.gform-routing-operator').first(); $operator.value = item.operator; t.changeOperator($operator); var $value = $elem.find('.gform-routing-value'); $value.val(item.value); }, } }) .on('change', '.gform-routing-field', function(e){ t.changeField(this); }) .on('click', '.gform-no-filters', function(e){ var $this = $(this); var $row = $this.find('.gform-routing'); if($row.length == 0){ t.addNewRouting(this); } $this.remove(); e.preventDefault(); }) .on('change', '.gform-routing-operator', function(){ t.changeOperator(this); }); this.$element.append($routings); /* if (typeof filters == 'undefined' || filters.length == 0){ t.displayNoRoutingsMessage(); return; } t.$element.find(".gform-routing-field").each(function (i) { var fieldId = filters[i].field; $(this).val(fieldId); t.changeField(this); }); t.$element.find(".gform-routing-operator").each(function (i) { var operator = filters[i].operator; $(this).val(operator); t.changeOperator(this, this.value); }); t.$element.find(".gform-routing-value").each(function (i) { var value = filters[i].value; $(this).val(value); $(this).change(); }); var i; for (i = 0; i < filters.length; i++) { t.$element.find(".gform-routings").append(this.getNewRoutingRow(filters[i].routeId)); } */ }, getHeaderMarkup: function() { var header = this.options.callbacks.header( this, '' ); return header; }, getNewRoutingRow: function () { var r = []; r.push( '{0}'.format( this.getRoutingTarget() ) ); r.push( '{0}'.format( this.getRoutingFields() ) ); r.push( '{0}'.format( this.getRoutingOperators( this.options.settings[0] ) ) ); r.push( '{0}'.format( this.getRoutingValues() ) ); r.push( '{buttons}' ); return '{0}'.format( r.join('') ); }, getRoutingTarget: function () { var target = ''; target = this.options.callbacks.addNewTarget( this, target ); return target; }, getRoutingFields: function () { var i, j, key, val, label, groupLabel, options, numRows, select = [], settings = this.settings; select.push('"); select.push(''); return select.join(''); }, changeOperator: function (operatorSelect) { var $select = $(operatorSelect), $buttons = $select.closest('tr').find('.repeater-buttons'); var index = $buttons.find('.add-item ').data('index'); var $fieldSelect = $select.closest('tr').find('.gform-routing-field'); var filter = this.getFilter($fieldSelect.value); if (filter) { $select.closest('tr').find(".gform-routing-value").replaceWith(this.getRoutingValues(filter, operatorSelect.value, index)); } }, changeField: function (fieldSelect) { var filter = this.getFilter(fieldSelect.value); if (filter) { var $select = $(fieldSelect), $buttons = $select.closest('tr').find('.repeater-buttons'); var index = $buttons.find('.add-item ').data('index'); $select.closest('tr').find(".gform-routing-value").replaceWith(this.getRoutingValues(filter, null, index)); $select.closest('tr').find(".gform-filter-type").val(filter.type).change(); var $newOperators = $(this.getRoutingOperators(filter, index)); $select.closest('tr').find(".gform-routing-operator").replaceWith($newOperators); $select.closest('tr').find(".gform-routing-operator").change(); } }, getRoutingOperators: function (filter, index) { if ( typeof index == 'undefined' || index === null ){ index = '{i}'; } var i, operator, operatorStrings = this.options.operatorStrings, str = '"; return str; }, getRoutingValues: function (filter, selectedOperator, index) { var i, val, text, str, options = ""; if ( typeof index == 'undefined' || index === null ){ index = '{i}'; } if ( filter && filter.values && selectedOperator != 'contains' ) { for (i = 0; i < filter.values.length; i++) { val = filter.values[i].value; text = filter.values[i].text; options += ''.format(val, text); } str = ''.format(index, options); } else { str = ''.format(index); } return str; }, getFilter: function (key) { var settings = this.settings; 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]; } } } }, selected: function (selected, current){ return selected == current ? 'selected="selected"' : ""; }, }; // A really lightweight plugin wrapper around the constructor, // preventing against multiple instantiations $.fn[pluginName] = function ( options ) { return this.each(function () { if (!$.data(this, "plugin_" + pluginName)) { $.data(this, "plugin_" + pluginName, new Plugin( this, options )); } }); }; String.prototype.format = function () { var args = arguments; return this.replace(/{(\d+)}/g, function (match, number) { return typeof args[number] != 'undefined' ? args[number] : match; }); }; })( window.GFRoutingSetting = window.GFRoutingSetting || {}, jQuery );