HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: /var/www/html/ielts-store/wp-content/plugins/automatewoo/admin/assets/js/min/rules.min.js.map
{"version":3,"sources":["rules.js"],"names":["$","data","AW","Rules","Backbone","Model","extend","initialize","app","this","ruleOptions","get","_","each","rawRuleGroup","group","RuleGroup","rules","rawRule","rule","Rule","set","name","resetOptions","compare","value","selected","push","resetAvailableRules","defaults","allRules","availableRules","trigger","workflow","filter","supplied_data_items","indexOf","data_item","groupedRules","isRuleAvailable","rule_name","names","pluck","clearIncompatibleRules","rulesToRemove","ruleGroup","clear","createGroup","groups","createRule","removeGroup","id","index","map","destroy","splice","uniqueId","getRuleObject","ruleObject","loadSelectOptions","self","type","select_choices","getJSON","ajaxurl","action","response","success","removeRule","length","RuleView","View","className","template","wp","events","change .js-rule-select","change .js-rule-compare-field","change .js-rule-value-field","click .js-remove-rule","change .js-rule-value-from","listenTo","model","render","remove","$el","html","toJSON","fieldNameBase","getFieldNameBase","setName","setCompare","setValue","maybeToggleValueDisplay","initDatepicker","document","body","find","val","$compareField","$option","optionValue","prop","$value_field","selected_title","selected_id","is","isArray","i","append","text","attr","$fields","thisModel","hasMultipleValueFields","el","isObject","Object","keys","forEach","key","updatedName","e","target","updatedCompare","updatedValue","object","has_multiple_value_fields","$valueFields","addClass","removeClass","datepicker","dateFormat","showButtonPanel","updateMinFromValueDate","$from","$to","RuleGroupView","click .js-add-rule","refreshRules","empty","view","addRule","undelegateEvents","RulesView","$meta_box","click .js-add-rule-group","maybeShowEmptyMessage","$groups","addEmptyMessage","addGroup","removeEmptyMessage","rawRuleOptions","rulesView","jQuery","automatewooWorkflowLocalizeScript"],"mappings":"CAAA,SAAWA,EAAGC,GAIVC,GAAGC,MAAQC,SAASC,MAAMC,OAAO,CAG7BC,WAAY,WAER,IAAIC,EAAMC,KACNC,EAAc,GAEbD,KAAKE,IAAK,mBAIXC,EAAEC,KAAMJ,KAAKE,IAAK,mBAAoB,SAAUG,GAE5C,IAAIC,EAAQ,IAAIb,GAAGc,UAAWR,GAC1BS,EAAQ,GAEZL,EAAEC,KAAMC,GAAc,SAAUI,GAE5B,IAAIC,EAAO,IAAIjB,GAAGkB,KAAML,GAExBI,EAAKE,IAAI,OAAQH,EAAQI,MACzBH,EAAKI,eACLJ,EAAKE,IAAI,UAAWH,EAAQM,SAC5BL,EAAKE,IAAI,QAASH,EAAQO,OAGrBP,EAAQQ,UACTP,EAAKE,IAAK,WAAYH,EAAQQ,UAGlCT,EAAMU,KAAMR,MAGhBJ,EAAMM,IAAK,QAASJ,GACpBP,EAAYiB,KAAMZ,MAM1BN,KAAKY,IAAI,cAAeX,GAExBD,KAAKmB,uBAITC,SAAU,WACN,MAAO,CAEHC,SAAU,GACVC,eAAgB,GAGhBrB,YAAa,KAMrBkB,oBAAqB,WAGjB,IAAII,EAAU9B,GAAG+B,SAAStB,IAAI,WAE9BF,KAAKY,IAAI,iBAAkBT,EAAEsB,OAAQzB,KAAKE,IAAI,aAAa,SAASQ,GAChE,OAAOa,IAAoE,IAAzDA,EAAQG,oBAAoBC,QAAQjB,EAAKkB,eAK/D,IAAIC,EAAe,GAEnB1B,EAAEC,KAAMJ,KAAKE,IAAI,mBAAmB,SAAUQ,GAEnCmB,EAAanB,EAAKJ,SAASuB,EAAanB,EAAKJ,OAAS,IAC7DuB,EAAanB,EAAKJ,OAAOY,KAAKR,MAIlCV,KAAKY,IAAK,eAAgBiB,IAI9BC,gBAAiB,SAAUC,GACvB,IAAIT,EAAiB7B,GAAGe,MAAMN,IAAI,kBAC9B8B,EAAQ7B,EAAE8B,MAAOX,EAAgB,QACrC,OAA0C,IAAnCnB,EAAEwB,QAASK,EAAOD,IAI7BG,uBAAwB,WAEpB,IAAIC,EAAgB,GAEpBhC,EAAEC,KAAMX,GAAGe,MAAMN,IAAK,gBAAiB,SAAUkC,GAC7CjC,EAAEC,KAAMgC,EAAUlC,IAAK,UAAW,SAAUQ,GACnCA,IAAUjB,GAAGe,MAAMsB,gBAAiBpB,EAAKR,IAAI,UAC9CiC,EAAcjB,KAAMR,SAMhCP,EAAEC,KAAM+B,GAAe,SAAUzB,GAC7BA,EAAK2B,YAMbC,YAAa,WAET,IAAIC,EAASvC,KAAKE,IAAI,eAElBI,EAAQ,IAAIb,GAAGc,UAAWP,MAO9B,OANAM,EAAMkC,aACND,EAAOrB,KAAMZ,GAEbN,KAAKY,IAAK,cAAe2B,GACzBvC,KAAKuB,QAAQ,mBAENjB,GAIXmC,YAAa,SAAUC,GAEnB,IAAIH,EAASvC,KAAKE,IAAI,eAGlByC,EAAQJ,EAAOK,KAAK,SAAUtC,GAC9B,OAAOA,EAAMoC,MACdf,QAASe,GAEZH,EAAOI,GAAOE,UACdN,EAAOO,OAAQH,EAAO,GACtB3C,KAAKY,IAAK,cAAe2B,GACzBvC,KAAKuB,QAAQ,sBAOrB9B,GAAGkB,KAAOhB,SAASC,MAAMC,OAAO,CAE5BC,WAAY,SAAUQ,GAClBN,KAAKY,IAAK,KAAMT,EAAE4C,SAAU,UAC5B/C,KAAKY,IAAK,QAASN,GAEnBN,KAAKc,gBAITkC,cAAe,WACX,OAAOxD,EAAK6B,SAAUrB,KAAKE,IAAI,UAInCY,aAAc,WAEV,IAAID,EAAOb,KAAKE,IAAI,QAChB+C,EAAajD,KAAKgD,gBActB,OAZKnC,EACDb,KAAKY,IAAK,SAAUqC,GAGpBjD,KAAKY,IAAK,SAAU,IAGxBZ,KAAKY,IAAK,WAAW,GACrBZ,KAAKY,IAAK,SAAS,GAEnBZ,KAAKkD,oBAEElD,MAQXkD,kBAAmB,WAEf,IAAIC,EAAOnD,KACPiD,EAAajD,KAAKgD,gBAEtB,OAAOC,GAAkC,WAApBA,EAAWG,MAAqBH,EAAWI,iBAIhEF,EAAKvC,IAAK,kBAAkB,GAE5BrB,EAAE+D,QAASC,QAAS,CAChBC,OAAQ,6BACRzB,UAAWkB,EAAWpC,OACvB,SAAU4C,GAEFA,EAASC,UAGhBT,EAAWI,eAAiBI,EAASjE,KAAK6D,eAE1CF,EAAKvC,IAAK,kBAAkB,GAC5BuC,EAAKvC,IAAK,SAAUqC,GACpBE,EAAK5B,QAAQ,sBAjBNvB,MAwBfqC,MAAO,WACSrC,KAAKE,IAAI,SACfyD,WAAY3D,KAAK0C,KAI3BG,QAAS,WACL7C,KAAKuB,QAAQ,cAOrB9B,GAAGc,UAAYZ,SAASC,MAAMC,OAAO,CAEjCC,WAAY,SAAUC,GAClBC,KAAKY,IAAK,KAAMT,EAAE4C,SAAS,gBAC3B/C,KAAKY,IAAK,MAAOb,GACjBC,KAAKY,IAAK,QAAS,KAIvB4B,WAAY,WACR,IAAIhC,EAAQR,KAAKE,IAAI,SACjBQ,EAAO,IAAIjB,GAAGkB,KAAMX,MAGxB,OAFAQ,EAAMU,KAAMR,GACZV,KAAKY,IAAK,QAASJ,GACZE,GAIXiD,WAAY,SAAUjB,GAElB,IAAIlC,EAAQR,KAAKE,IAAI,SAGjByC,EAAQnC,EAAMoC,KAAK,SAAUlC,GAC7B,OAAOA,EAAKgC,MACbf,QAASe,GAGPlC,EAAMoD,OAAS,GAChBpD,EAAMmC,GAAOE,UACbrC,EAAMsC,OAAQH,EAAO,GACrB3C,KAAKY,IAAK,QAASJ,KAGnBA,EAAMmC,GAAOE,UACb7C,KAAKqC,UAKbA,MAAO,WACOrC,KAAKE,IAAI,OACfuC,YAAazC,KAAK0C,KAI1BG,QAAS,WACL7C,KAAKuB,QAAQ,cASrB9B,GAAGoE,SAAWlE,SAASmE,KAAKjE,OAAO,CAE/BkE,UAAW,6BAEXC,SAAUC,GAAGD,SAAU,WAEvBE,OAAQ,CACJC,yBAA0B,cAC1BC,gCAAiC,iBACjCC,8BAA+B,eAC/BC,wBAAyB,QACzBC,6BAA8B,0BAIlCzE,WAAY,WACRE,KAAKwE,SAAUxE,KAAKyE,MAAO,YAAazE,KAAK0E,QAC7C1E,KAAKwE,SAAUxE,KAAKyE,MAAO,eAAgBzE,KAAK0E,QAChD1E,KAAKwE,SAAUxE,KAAKyE,MAAO,gBAAiBzE,KAAK0E,QACjD1E,KAAKwE,SAAUxE,KAAKyE,MAAO,UAAWzE,KAAK2E,SAI/CD,OAAQ,WAkBJ,OAhBW1E,KAEN4E,IAAIC,KAFE7E,KAESgE,SAAS,CACzBtD,KAHOV,KAGIyE,MAAMK,SACjBjD,aAAcpC,GAAGe,MAAMN,IAAI,gBAC3B6E,cALO/E,KAKagF,sBALbhF,KAQNiF,UARMjF,KASNkF,aATMlF,KAUNmF,WAVMnF,KAWNoF,0BAXMpF,KAYNqF,iBAEL9F,EAAE+F,SAASC,MAAMhE,QAAQ,2BAElBvB,MAIXiF,QAAS,WACLjF,KAAK4E,IAAIY,KAAK,mBAAmBC,IAAKzF,KAAKyE,MAAMvE,IAAI,UAIzDgF,WAAY,WACR,IAAIQ,EAAgB1F,KAAK4E,IAAIY,KAAM,0BAC/BzE,EAAUf,KAAKyE,MAAMvE,IAAK,WAG9B,GAAKwF,EAAcjE,OAAQ,UAAWmC,SAAY7C,EAAU,CACxD,IAAI4E,EAAUD,EAAcF,KAAM,sBAC9BI,EAAcF,EAAcF,KAAM,sBAAuBK,KAAM,SAEnEF,EAAQE,KAAM,YAAY,GAC1BH,EAAcD,IAAKG,GACnB5F,KAAKyE,MAAM7D,IAAK,UAAWgF,GAG1B7E,IACD2E,EAAcD,IAAK1E,GACnB2E,EAAcF,KAAM,kBAAoBzE,EAAU,MAAO8E,KAAM,YAAY,KAKnFV,SAAU,WACN,IAEIW,EAFAC,EAAiB/F,KAAKyE,MAAMvE,IAAI,YAChC8F,EAAchG,KAAKyE,MAAMvE,IAAI,SA6BjC,GA1BK6F,KAEDD,EAAe9F,KAAK4E,IAAIY,KAAK,yBAEXS,GAAG,UAEZ9F,EAAE+F,QAASF,GACZ7F,EAAEC,KAAM4F,GAAa,SAAUtD,EAAIyD,GAC/BL,EAAaM,OAAQ7G,EAAE,WAAY,CAC/ByB,MAAO0B,EACP2D,KAAMN,EAAeI,SAI7BL,EAAaM,OAAQ7G,EAAE,WAAY,CAC/ByB,MAAOgF,EACPK,KAAMN,KAMdD,EAAaQ,KAAM,gBAAiBP,IAIvCC,EAAc,CAEf,IAAIO,EAAUvG,KAAK4E,IAAIY,KAAK,wBACxBgB,EAAYxG,KAEXA,KAAKyG,0BACDtG,EAAE+F,QAASF,IACZO,EAAQnG,MAAK,SAAU+F,EAAGO,GACtBnH,EAAEmH,GAAIjB,IAAKO,EAAYG,OAI1BhG,EAAEwG,SAAUX,IACbY,OAAOC,KAAMb,GAAcc,SAAS,SAAUC,GAC1CxH,EAAG,kBAAoBwH,EAAKP,EAAU5B,KAAMa,IAAKO,EAAYe,QAKrER,EAAQd,IAAKO,KAMzBgB,YAAa,SAASC,GAClBjH,KAAKyE,MAAM7D,IAAK,OAAQqG,EAAEC,OAAOlG,OAAQF,eACzCd,KAAK0E,UAITyC,eAAgB,SAASF,GACrBjH,KAAKyE,MAAM7D,IAAK,UAAWqG,EAAEC,OAAOlG,OACpChB,KAAK0E,UAOT0C,aAAc,SAASH,GAEnB,IAAIjG,EAEChB,KAAKyG,0BACNzF,EAAQ,GAERhB,KAAK4E,IAAIY,KAAK,wBAAwBpF,MAAK,WACvCY,EAAME,KAAM3B,EAAES,MAAMyF,WAIxBzE,EAAQiG,EAAEC,OAAOlG,MAGrBhB,KAAKyE,MAAM7D,IAAK,QAASI,IAI7BgE,iBAAkB,WACd,IAAItC,EAAK1C,KAAKyE,MAAMvE,IAAK,MAEzB,MAAO,kCADKF,KAAKyE,MAAMvE,IAAK,SACmBwC,GAAG,KAAKA,EAAG,KAI9DL,MAAO,WACHrC,KAAKyE,MAAMpC,SAOfoE,uBAAwB,WACpB,IAAIY,EAASrH,KAAKyE,MAAMvE,IAAI,UAC5B,OAAOmH,GAAUA,EAAOC,2BAI5BlC,wBAAyB,WACrB,IAAIrE,EAAUf,KAAKyE,MAAMvE,IAAK,WAC1BqH,EAAevH,KAAK4E,IAAIY,KAAM,qBAE7B+B,EAAa3D,SAEd2D,EAAaC,SAAU,aAAc3B,KAAM,YAAY,GAAQL,KAAM,iBAAkBK,KAAM,YAAY,GAGzG0B,EAAa9F,OAAQ,sBAAwBV,EAAU,MAAO0G,YAAa,aAAc5B,KAAM,YAAY,GAAOL,KAAM,iBAAkBK,KAAM,YAAY,KAIpKR,eAAgB,WACZrF,KAAK4E,IAAIY,KAAM,mBAAoBkC,WAAY,CAC3CC,WAAY,WACZC,iBAAiB,KAIzBC,uBAAwB,WACpB,IAAIC,EAAQ9H,KAAK4E,IAAIY,KAAM,uBACvBuC,EAAM/H,KAAK4E,IAAIY,KAAM,qBAEpBsC,EAAMlE,QAAUmE,EAAInE,QACrBmE,EAAIL,WAAY,SAAU,UAAWI,EAAMrC,UAQvDhG,GAAGuI,cAAgBrI,SAASmE,KAAKjE,OAAO,CAEpCkE,UAAW,gBAEXC,SAAUC,GAAGD,SAAU,iBAEvBE,OAAQ,CACJ+D,qBAAsB,WAI1BnI,WAAY,WACRE,KAAKwE,SAAUxE,KAAKyE,MAAO,eAAgBzE,KAAKkI,cAChDlI,KAAKwE,SAAUxE,KAAKyE,MAAO,YAAazE,KAAKkI,cAC7ClI,KAAKwE,SAAUxE,KAAKyE,MAAO,UAAWzE,KAAK2E,SAI/CD,OAAQ,WAEJ,IAAIvB,EAAOnD,KAeX,OAbKmD,EAAKsB,MAAMvE,IAAI,SAAS0D,SACzBT,EAAKyB,IAAIC,KAAM1B,EAAKa,SAAUb,EAAKsB,MAAMK,WAEzC3B,EAAKyB,IAAIY,KAAK,UAAU2C,QAExBhI,EAAEC,KAAM+C,EAAKsB,MAAMvE,IAAI,UAAU,SAAUQ,GACvC,IAAI0H,EAAO,IAAI3I,GAAGoE,SAAS,CAAEY,MAAO/D,IACpCyC,EAAKyB,IAAIY,KAAM,UAAWY,OAAQgC,EAAK1D,SAASgC,QAIxDnH,EAAE+F,SAASC,MAAMhE,QAAQ,2BAElBvB,MAIXqI,QAAS,WACL,IAAI5D,EAAQzE,KAAKyE,MAAMjC,aACnB4F,EAAO,IAAI3I,GAAGoE,SAAS,CAAEY,MAAOA,IAMpC,OAJAzE,KAAK4E,IAAIY,KAAM,UAAUY,OAAQgC,EAAK1D,SAASgC,IAE/CnH,EAAE+F,SAASC,MAAMhE,QAAQ,2BAElBvB,MAIXkI,aAAc,WACV/H,EAAEC,KAAKJ,KAAKyE,MAAMvE,IAAI,UAAU,SAAUQ,GACtCA,EAAKa,QAAQ,oBAKrBc,MAAO,WACHrC,KAAKsI,mBACLtI,KAAKyE,MAAMpC,WAOnB5C,GAAG8I,UAAY5I,SAASmE,KAAKjE,OAAO,CAKhC6G,GAAInH,EAAG,uBAEPiJ,UAAWjJ,EAAG,iBAEdyE,SAAUC,GAAGD,SAAU,sBAEvBE,OAAQ,CACJuE,2BAA4B,YAIhC3I,WAAY,WACRE,KAAKwE,SAAUxE,KAAKyE,MAAO,kBAAmBzE,KAAK0I,uBACnD1I,KAAKwE,SAAUxE,KAAKyE,MAAO,sBAAuBzE,KAAKkI,cAEvDlI,KAAK0E,UAITA,OAAQ,WAEJ,IACInD,EAAU9B,GAAG+B,SAAStB,IAAI,WADnBF,KAGN4E,IAAIC,KAHE7E,KAGSgE,SAAS,CACzBjE,IAJOC,KAKPuB,QAASA,KAGb,IAAIoH,EARO3I,KAQQ4E,IAAIY,KAAM,mBACzBjD,EATOvC,KASOyE,MAAMvE,IAAI,eAe5B,OAbKqC,EAAOqB,OACRzD,EAAEC,KAAMmC,GAAQ,SAAUjC,GACtB,IAAI8H,EAAO,IAAI3I,GAAGuI,cAAc,CAAEvD,MAAOnE,IACzCqI,EAAQvC,OAAQgC,EAAK1D,SAASgC,OAIlC1G,KAAK4I,kBAITrJ,EAAE+F,SAASC,MAAMhE,QAAQ,2BAElBvB,MAIX6I,SAAU,WACN,IAAIpE,EAAQzE,KAAKyE,MAAMnC,cACnB8F,EAAO,IAAI3I,GAAGuI,cAAc,CAAEvD,MAAOA,IAMzC,OAJAzE,KAAK4E,IAAIY,KAAM,mBAAmBY,OAAQgC,EAAK1D,SAASgC,IAExDnH,EAAE+F,SAASC,MAAMhE,QAAQ,2BAElBvB,MAIX0I,sBAAuB,WACd1I,KAAKyE,MAAMvE,IAAI,eAAe0D,OAC/B5D,KAAK8I,qBAGL9I,KAAK4I,mBAIbA,gBAAiB,WACb5I,KAAK4E,IAAIY,KAAM,mBAAoBX,KAAMZ,GAAGD,SAAU,0BAI1D8E,mBAAoB,WAChB9I,KAAK4E,IAAIY,KAAK,2BAA2Bb,UAI7CuD,aAAc,WACV/H,EAAEC,KAAMJ,KAAKyE,MAAMvE,IAAI,gBAAgB,SAAUI,GAC7CA,EAAMiB,QAAQ,sBAQ1BhC,GAAE,WAEEE,GAAGe,MAAQ,IAAIf,GAAGC,MAAM,CACpB2B,SAAU7B,EAAK6B,SACf0H,eAAgBvJ,EAAKS,cAGzBR,GAAGuJ,UAAY,IAAIvJ,GAAG8I,UAAU,CAC5B9D,MAAOhF,GAAGe,WAlqBtB,CAyqBIyI,OAAQC","file":"rules.min.js","sourcesContent":["(function( $, data ) {\n\n    // MODELS\n\n    AW.Rules = Backbone.Model.extend({\n\n\n        initialize: function() {\n\n            var app = this;\n            var ruleOptions = [];\n\n            if ( this.get( 'rawRuleOptions' ) ) {\n\n                // convert rule options from json to models\n\n                _.each( this.get( 'rawRuleOptions' ), function( rawRuleGroup ) {\n\n                    var group = new AW.RuleGroup( app );\n                    var rules = [];\n\n                    _.each( rawRuleGroup, function( rawRule ) {\n\n                        var rule = new AW.Rule( group );\n\n                        rule.set('name', rawRule.name );\n                        rule.resetOptions();\n                        rule.set('compare', rawRule.compare );\n                        rule.set('value', rawRule.value );\n\n                        // for objects\n                        if ( rawRule.selected ) {\n                            rule.set( 'selected', rawRule.selected );\n                        }\n\n                        rules.push( rule );\n                    });\n\n                    group.set( 'rules', rules );\n                    ruleOptions.push( group );\n\n                });\n\n            }\n\n            this.set('ruleOptions', ruleOptions );\n\n            this.resetAvailableRules();\n        },\n\n\n        defaults: function() {\n            return {\n\n                allRules: {},\n                availableRules: {},\n\n                // array of condition group models\n                ruleOptions: []\n\n            };\n        },\n\n\n        resetAvailableRules: function(){\n            // calculate available conditions based on the selected trigger\n\n            var trigger = AW.workflow.get('trigger');\n\n            this.set('availableRules', _.filter( this.get('allRules'), function(rule) {\n                return trigger && trigger.supplied_data_items.indexOf(rule.data_item) !== -1;\n            }));\n\n\n            // put rules into groups for select\n            var groupedRules = {};\n\n            _.each( this.get('availableRules'), function( rule ){\n\n                if ( ! groupedRules[rule.group] ) groupedRules[rule.group] = [];\n                groupedRules[rule.group].push(rule);\n\n            });\n\n            this.set( 'groupedRules', groupedRules );\n        },\n\n\n        isRuleAvailable: function( rule_name ) {\n            var availableRules = AW.rules.get('availableRules');\n            var names = _.pluck( availableRules, 'name' );\n            return _.indexOf( names, rule_name ) !== -1;\n        },\n\n\n        clearIncompatibleRules: function() {\n\n            var rulesToRemove = [];\n\n            _.each( AW.rules.get( 'ruleOptions' ), function( ruleGroup ) {\n                _.each( ruleGroup.get( 'rules' ), function( rule ) {\n                    if ( rule && ! AW.rules.isRuleAvailable( rule.get('name') ) ) {\n                        rulesToRemove.push( rule );\n                    }\n                });\n            });\n\n            // clear out of initial loop to avoid index changing issues, when rules are cleared\n            _.each( rulesToRemove, function( rule ) {\n                rule.clear();\n            });\n        },\n\n\n\n        createGroup: function() {\n\n            var groups = this.get('ruleOptions');\n\n            var group = new AW.RuleGroup( this );\n            group.createRule();\n            groups.push( group );\n\n            this.set( 'ruleOptions', groups );\n            this.trigger('ruleGroupChange');\n\n            return group;\n        },\n\n\n        removeGroup: function( id ) {\n\n            var groups = this.get('ruleOptions');\n\n            // find index - note we cant use _.findIndex due to backwards compatibility\n            var index = groups.map( function( group ) {\n                return group.id;\n            }).indexOf( id );\n\n            groups[index].destroy();\n            groups.splice( index, 1 );\n            this.set( 'ruleOptions', groups );\n            this.trigger('ruleGroupChange');\n        }\n\n    });\n\n\n\n    AW.Rule = Backbone.Model.extend({\n\n        initialize: function( group ) {\n            this.set( 'id', _.uniqueId( 'rule_' ) );\n            this.set( 'group', group );\n\n            this.resetOptions();\n        },\n\n\n        getRuleObject: function() {\n            return data.allRules[ this.get('name') ];\n        },\n\n\n        resetOptions: function() {\n\n            var name = this.get('name');\n            var ruleObject = this.getRuleObject();\n\n            if ( name ) {\n                this.set( 'object', ruleObject );\n            }\n            else {\n                this.set( 'object', {} );\n            }\n\n            this.set( 'compare', false );\n            this.set( 'value', false );\n\n            this.loadSelectOptions();\n\n            return this;\n        },\n\n\n\n        /**\n         * async gather rule select choices, if not already loaded\n         */\n        loadSelectOptions: function() {\n\n            var self = this;\n            var ruleObject = this.getRuleObject();\n\n            if ( ! ruleObject || ruleObject.type !== 'select' || ruleObject.select_choices ) {\n                return this;\n            }\n\n            self.set( 'isValueLoading', true );\n\n            $.getJSON( ajaxurl, {\n                action: 'aw_get_rule_select_choices',\n                rule_name: ruleObject.name\n            }, function( response ) {\n\n                if ( ! response.success )\n                    return;\n\n                ruleObject.select_choices = response.data.select_choices;\n\n                self.set( 'isValueLoading', false );\n                self.set( 'object', ruleObject );\n                self.trigger('optionsLoaded');\n            });\n\n            return this;\n        },\n\n\n        clear: function() {\n            var group = this.get('group');\n            group.removeRule( this.id );\n        },\n\n\n        destroy: function() {\n            this.trigger('destroy');\n        }\n\n    });\n\n\n\n    AW.RuleGroup = Backbone.Model.extend({\n\n        initialize: function( app ) {\n            this.set( 'id', _.uniqueId('rule_group_') );\n            this.set( 'app', app );\n            this.set( 'rules', [] );\n        },\n\n\n        createRule: function() {\n            var rules = this.get('rules');\n            var rule = new AW.Rule( this );\n            rules.push( rule );\n            this.set( 'rules', rules );\n            return rule;\n        },\n\n\n        removeRule: function( id ) {\n\n            var rules = this.get('rules');\n\n            // find rule index - note we cant use _.findIndex due to backwards compatibility\n            var index = rules.map( function( rule ) {\n                return rule.id;\n            }).indexOf( id );\n\n            // if only 1 rule left delete the whole group object\n            if ( rules.length > 1 ) {\n                rules[index].destroy();\n                rules.splice( index, 1 );\n                this.set( 'rules', rules );\n            }\n            else {\n                rules[index].destroy(); // destroy the last rule\n                this.clear();\n            }\n        },\n\n\n        clear: function() {\n            var app = this.get('app');\n            app.removeGroup( this.id );\n        },\n\n\n        destroy: function() {\n            this.trigger('destroy');\n        }\n\n    });\n\n\n    // VIEWS\n\n\n    AW.RuleView = Backbone.View.extend({\n\n        className: 'automatewoo-rule-container',\n\n        template: wp.template( 'aw-rule' ),\n\n        events: {\n            'change .js-rule-select': 'updatedName',\n            'change .js-rule-compare-field': 'updatedCompare',\n            'change .js-rule-value-field': 'updatedValue',\n            'click .js-remove-rule': 'clear',\n            'change .js-rule-value-from': 'updateMinFromValueDate',\n        },\n\n\n        initialize: function() {\n            this.listenTo( this.model, 'change:id', this.render );\n            this.listenTo( this.model, 'change:group', this.render );\n            this.listenTo( this.model, 'optionsLoaded', this.render );\n            this.listenTo( this.model, 'destroy', this.remove );\n        },\n\n\n        render: function() {\n\n            var self = this;\n\n            self.$el.html( self.template({\n                rule: self.model.toJSON(),\n                groupedRules: AW.rules.get('groupedRules'),\n                fieldNameBase: self.getFieldNameBase()\n            }));\n\n            self.setName();\n            self.setCompare();\n            self.setValue();\n            self.maybeToggleValueDisplay();\n            self.initDatepicker();\n\n            $(document.body).trigger('wc-enhanced-select-init');\n\n            return this;\n        },\n\n\n        setName: function() {\n            this.$el.find('.js-rule-select').val( this.model.get('name') );\n        },\n\n\n        setCompare: function() {\n            var $compareField = this.$el.find( '.js-rule-compare-field' );\n            var compare = this.model.get( 'compare' );\n\n            // Default selected value to first option.\n            if ( $compareField.filter( 'select' ).length && ! compare ) {\n                var $option = $compareField.find( 'option:first-child' );\n                var optionValue = $compareField.find( 'option:first-child' ).prop( 'value' );\n\n                $option.prop( 'selected', true );\n                $compareField.val( optionValue );\n                this.model.set( 'compare', optionValue );\n            }\n\n            if ( compare ) {\n                $compareField.val( compare );\n                $compareField.find( 'option[value~=\"' + compare + '\"]' ).prop( 'selected', true );\n            }\n        },\n\n\n        setValue: function() {\n            var selected_title = this.model.get('selected');\n            var selected_id = this.model.get('value');\n            var $value_field;\n\n            if ( selected_title ) {\n\n                $value_field = this.$el.find('.js-rule-value-field');\n\n                if ( $value_field.is('select') ) {\n\n                    if ( _.isArray( selected_id ) ) {\n                        _.each( selected_id, function( id, i ){\n                            $value_field.append( $('<option>', {\n                                value: id,\n                                text: selected_title[i],\n                            }) );\n                        });\n                    } else {\n                        $value_field.append( $('<option>', {\n                            value: selected_id,\n                            text: selected_title\n                        }) );\n                    }\n                }\n                else {\n                    // wc 3.0\n                    $value_field.attr( 'data-selected', selected_title );\n                }\n            }\n\n            if ( selected_id ) {\n\n                var $fields = this.$el.find('.js-rule-value-field');\n                var thisModel = this;\n\n                if ( this.hasMultipleValueFields() ) {\n                    if ( _.isArray( selected_id ) ) {\n                        $fields.each(function( i, el ){\n                            $(el).val( selected_id[i] );\n                        });\n                    }\n\n                    if ( _.isObject( selected_id ) ) {\n                        Object.keys( selected_id ).forEach( function (key) {\n                            $( '.js-rule-value-' + key, thisModel.$el ).val( selected_id[key] );\n                        } );\n                    }\n                }\n                else {\n                    $fields.val( selected_id );\n                }\n            }\n        },\n\n\n        updatedName: function(e) {\n            this.model.set( 'name', e.target.value ).resetOptions();\n            this.render();\n        },\n\n\n        updatedCompare: function(e) {\n            this.model.set( 'compare', e.target.value );\n            this.render();\n        },\n\n\n        /**\n         * there can be more than one value field\n         */\n        updatedValue: function(e) {\n\n            var value;\n\n            if ( this.hasMultipleValueFields() ) {\n                value = [];\n\n                this.$el.find('.js-rule-value-field').each(function() {\n                    value.push( $(this).val() );\n                });\n            }\n            else {\n                value = e.target.value;\n            }\n\n            this.model.set( 'value', value );\n        },\n\n\n        getFieldNameBase: function() {\n            var id = this.model.get( 'id' );\n            var group = this.model.get( 'group' );\n            return 'aw_workflow_data[rule_options]['+group.id+']['+id+']';\n        },\n\n\n        clear: function() {\n            this.model.clear();\n        },\n\n\n        /**\n         * @return boolean\n         */\n        hasMultipleValueFields: function() {\n            var object = this.model.get('object');\n            return object && object.has_multiple_value_fields;\n        },\n\n\n        maybeToggleValueDisplay: function () {\n            var compare = this.model.get( 'compare' );\n            var $valueFields = this.$el.find( '[data-aw-compare]' );\n\n            if ( $valueFields.length ) {\n                // Hide value fields.\n                $valueFields.addClass( 'aw-hidden' ).prop( 'required', false ).find( 'select, input' ).prop( 'required', false );\n\n                // Show our selected rules.\n                $valueFields.filter( '[data-aw-compare~=\"' + compare + '\"]' ).removeClass( 'aw-hidden' ).prop( 'required', true ).find( 'select, input' ).prop( 'required', true );\n            }\n        },\n\n        initDatepicker: function() {\n            this.$el.find( '.js-date-picker' ).datepicker( {\n                dateFormat: 'yy-mm-dd',\n                showButtonPanel: true,\n            } );\n        },\n\n        updateMinFromValueDate: function () {\n            var $from = this.$el.find( '.js-rule-value-from' );\n            var $to = this.$el.find( '.js-rule-value-to' );\n\n            if ( $from.length && $to.length ) {\n                $to.datepicker( 'option', 'minDate', $from.val() );\n            }\n        }\n    });\n\n\n\n\n    AW.RuleGroupView = Backbone.View.extend({\n\n        className: 'aw-rule-group',\n\n        template: wp.template( 'aw-rule-group' ),\n\n        events: {\n            'click .js-add-rule': 'addRule'\n        },\n\n\n        initialize: function() {\n            this.listenTo( this.model, 'refreshRules', this.refreshRules );\n            this.listenTo( this.model, 'change:id', this.refreshRules );\n            this.listenTo( this.model, 'destroy', this.remove );\n        },\n\n\n        render: function() {\n\n            var self = this;\n\n            if ( self.model.get('rules').length ) {\n                self.$el.html( self.template( self.model.toJSON() ) );\n\n                self.$el.find('.rules').empty();\n\n                _.each( self.model.get('rules'), function( rule ) {\n                    var view = new AW.RuleView({ model: rule } );\n                    self.$el.find( '.rules' ).append( view.render().el );\n                });\n            }\n\n            $(document.body).trigger('wc-enhanced-select-init');\n\n            return this;\n        },\n\n\n        addRule: function() {\n            var model = this.model.createRule();\n            var view = new AW.RuleView({ model: model } );\n\n            this.$el.find( '.rules').append( view.render().el );\n\n            $(document.body).trigger('wc-enhanced-select-init');\n\n            return this;\n        },\n\n\n        refreshRules: function() {\n            _.each(this.model.get('rules'), function( rule ) {\n                rule.trigger('change:group');\n            });\n        },\n\n\n        clear: function() {\n            this.undelegateEvents();\n            this.model.clear();\n        }\n\n    });\n\n\n\n    AW.RulesView = Backbone.View.extend({\n\n        /**\n         * Element\n         */\n        el: $( '#aw-rules-container' ),\n\n        $meta_box: $( '#aw_rules_box' ),\n\n        template: wp.template( 'aw-rules-container' ),\n\n        events: {\n            'click .js-add-rule-group': 'addGroup'\n        },\n\n\n        initialize: function(){\n            this.listenTo( this.model, 'ruleGroupChange', this.maybeShowEmptyMessage );\n            this.listenTo( this.model, 'change:groupedRules', this.refreshRules );\n\n            this.render();\n        },\n\n\n        render: function() {\n\n            var self = this,\n                trigger = AW.workflow.get('trigger');\n\n            self.$el.html( self.template({\n                app: self,\n                trigger: trigger\n            }));\n\n            var $groups = self.$el.find( '.aw-rule-groups' );\n            var groups = self.model.get('ruleOptions');\n\n            if ( groups.length ) {\n                _.each( groups, function( group ){\n                    var view = new AW.RuleGroupView({ model: group } );\n                    $groups.append( view.render().el );\n                });\n            }\n            else {\n                this.addEmptyMessage();\n            }\n\n\n            $(document.body).trigger('wc-enhanced-select-init');\n\n            return this;\n        },\n\n\n        addGroup: function() {\n            var model = this.model.createGroup();\n            var view = new AW.RuleGroupView({ model: model } );\n\n            this.$el.find( '.aw-rule-groups').append( view.render().el );\n\n            $(document.body).trigger('wc-enhanced-select-init');\n\n            return this;\n        },\n\n\n        maybeShowEmptyMessage: function() {\n            if ( this.model.get('ruleOptions').length ) {\n                this.removeEmptyMessage();\n            }\n            else {\n                this.addEmptyMessage();\n            }\n        },\n\n        addEmptyMessage: function() {\n            this.$el.find( '.aw-rule-groups' ).html( wp.template( 'aw-rule-groups-empty' ) );\n        },\n\n\n        removeEmptyMessage: function() {\n            this.$el.find('.aw-rules-empty-message').remove();\n        },\n\n\n        refreshRules: function() {\n            _.each( this.model.get('ruleOptions'), function( group ) {\n                group.trigger('refreshRules');\n            });\n        },\n\n\n    });\n\n\n    $(function(){\n\n        AW.rules = new AW.Rules({\n            allRules: data.allRules,\n            rawRuleOptions: data.ruleOptions\n        });\n\n        AW.rulesView = new AW.RulesView({\n            model: AW.rules\n        });\n\n    });\n\n\n\n})( jQuery, automatewooWorkflowLocalizeScript );\n"]}