@c8y/ng1-modules 1020.28.1 → 1020.28.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/core/ui/services/util.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(){function e(l,
|
|
1
|
+
"use strict";!function(){function e(u,l,o,t,e,n,r,i,F,a){var c,p,d="",s="",E={blue:{blue_1:"#08293F",blue_2:"#0B385B",blue_3:"#0F4C7B",blue_4:"#14629F",blue_5:"#1776BF",blue_6:"#1C8CE3",blue_7:"#5FAEEC",blue_8:"#96CAF3",blue_9:"#CDE6F9",blue_10:"#F6FAFE"},purple:{purple_1:"#230052",purple_2:"#310070",purple_3:"#4B00AD",purple_4:"#6800F0",purple_5:"#801FFF",purple_6:"#9A4DFF",purple_7:"#B780FF",purple_8:"#D1ADFF",purple_9:"#E8D6FF",purple_10:"#F9F5FF"},pink:{pink_1:"#570030",pink_2:"#7A0045",pink_3:"#B30065",pink_4:"#E0007F",pink_5:"#FF1F9E",pink_6:"#FF61BA",pink_7:"#FF8FCE",pink_8:"#FFBDE2",pink_9:"#FFE0F1",pink_10:"#FFF5FB"},red:{red_1:"#520005",red_2:"#6B0006",red_3:"#8F0009",red_4:"#BD000C",red_5:"#E0000E",red_6:"#FF1F2D",red_7:"#FF5C66",red_8:"#FF8F96",red_9:"#FFCCCF",red_10:"#FFF0F0"},orange:{orange_1:"#5C2800",orange_2:"#753200",orange_3:"#9E4400",orange_4:"#C25400",orange_5:"#E66400",orange_6:"#FF801F",orange_7:"#FFA057",orange_8:"#FFC89E",orange_9:"#FFE8D6",orange_10:"#FFF6F0"},yellow:{yellow_1:"#474200",yellow_2:"#5C5500",yellow_3:"#807700",yellow_4:"#ADA200",yellow_5:"#D6C800",yellow_6:"#F0DF00",yellow_7:"#FFF01F",yellow_8:"#FFF794",yellow_9:"#FFFBC7",yellow_10:"#FFFEE6"},green:{green_1:"#3B4503",green_2:"#4C5705",green_3:"#657506",green_4:"#829707",green_5:"#A0B909",green_6:"#BAD80A",green_7:"#CDEF0B",green_8:"#EAFA8F",green_9:"#F5FCCA",green_10:"#FAFEE7"},teal:{teal_1:"#063733",teal_2:"#094845",teal_3:"#0C6A64",teal_4:"#108E86",teal_5:"#15B0A6",teal_6:"#19D2C7",teal_7:"#64EDE3",teal_8:"#A9F4F0",teal_9:"#DBFAF9",teal_10:"#F1FDFC"}},g={DEVICE:"device",GROUP:"group",REPORT:"report",EXPORT_CONFIGURATION:"exportConfiguration",APPLICATION:"application"};function C(e){var t,n=(e||"").match(/^\/apps\/([^/]*\/[^/]*)/),n=n&&n[1],r=n&&n.split("/").pop(),i=n&&-1<(c||[]).indexOf(n);return e=e&&!o.get(e)&&!i&&(t=new RegExp("/".concat(r,"$")),i=_.find(c||[],function(e){return t.test(e)}))?e.replace(n,i):e}function f(e){return l.when(t.invoke(e.showIf,e))}function w(e){return r.isAllowed(e)}function A(e){e=Object.keys(e);return e[Math.floor(Math.random()*e.length)]}return{CONTEXT:g,getContext:function(){var e=u.deviceId,t=u.groupId,n=u.reportId,r=u.exportId,i=u.applicationId,o=null,l=null;return e&&(o=g.DEVICE,l=e),t&&(o=g.GROUP,l=t),n&&(o=g.REPORT,l=n),r&&(o=g.EXPORT_CONFIGURATION,l=r),{context:o=i?g.APPLICATION:o,id:l}},getContextPath:function(e){return{group:"/group/".concat(e.id),device:"/device/".concat(e.id)}[e.context]},verifyPluginViewPath:function(e){var t,e=e&&e.replace(/\/\//g,"/");return c?l.when(C(e)):(t=p||n.getCurrent().then(n.listPluginsByApplication).then(function(e){return c=_.map(e,"contextPath")}),(p=t).then(_.partial(C,e)))},intersectionObjects:function(e){for(var t=arguments.length,n=new Array(1<t?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return _.filter(_.uniq(e),function(t){return _.every(n,function(e){return _.some(e,function(e){return e.id===t.id})})})},editUserUI:function(){return i({templateUrl:":::PLUGIN_PATH:::/ui/user/editUser.modal.html",title:a("Edit user"),controller:"EditUserCtrl"})},editRetentionRule:function(e){var t=e&&e.id?a("Edit retention rule"):a("Create retention rule");return i({templateUrl:":::PLUGIN_PATH:::/ui/views/editRetentionRuleModal.html",title:t,controller:"editRetentionRuleCtrl",resolve:{rule:function(){return e}}})},configureVisibility:function(t,e,n){var r=l.when(!0),i=e||"show",o=n?_.negate(_.identity):_.identity;return t.showIfPermissions&&(r=r.then(_.partial(w,t.showIfPermissions)).then(function(e){return e?l.when(!0):l.reject()})),(r=t.showIf?r.then(_.partial(f,t)):r).catch(_.constant(!1)).then(function(e){return _.set(t,i,o(e))})},instanceOptions:function(){return _.merge({},window.C8Y_APP&&window.C8Y_APP.C8Y_INSTANCE_OPTIONS,window.C8Y_INSTANCE_OPTIONS)},escapeForRegex:function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")},shouldShowSmartRules:F.shouldShowLocalSmartRules,emitWindowResize:function(){var e;Event.prototype.initEvent?((e=window.document.createEvent("UIEvents")).initUIEvent("resize",!0,!1,window,0),window.dispatchEvent(e)):window.dispatchEvent(new Event("resize"))},waitForPropertyResolve:function(e,t){var n=l.defer(),r=e.$watch(function(){return _.get(e,t)},function(e){r(),n.resolve(e)});return n.promise},stripHtmlTags:function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:"",t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""},generateColor:function(){for(var e="",t="";(e=A(E))===d;);d=e;for(var n=E[e];(t=A(n))===s;);return n[s=t]},getCookieValue:function(e){return(e=document.cookie.match("(^|;)\\s*".concat(e,"\\s*=\\s*([^;]+)")))?e.pop():""}}}e.$inject=["$routeParams","$q","$templateCache","$injector","$http","c8yApplication","c8yPermissions","c8yModal","c8ySmartRulesAvailability","gettext"],angular.module("c8y.ui").factory("c8yUiUtil",e)}();
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(){function e(i,r,e,o,t,n,a,P,c,u,l,s,d,f,h,g,v
|
|
1
|
+
"use strict";!function(){function e(i,r,e,o,t,n,a,P,c,u,l,s,d,f,h,g,m,v){var p,S=r.deviceId||r.groupId,C={},A={},R={done:!1,inProgress:!1},y={true:{text:m("Enabled`rule`"),icon:"check-circle",cls:"text-success"},false:{text:m("Disabled`rule`"),icon:"ban",cls:"text-danger"}},E=s.getContext(),b=m("Global smart rules");function x(){return o.when().then(T).then(k).then(D).then(w).then(I).catch(j)}function T(){R.inProgress=!0}function I(){R.inProgress=!1,R.done=!0,R.error=!1}function j(e){e.data&&e.data.message&&l.danger(e.data.message),R.inProgress=!1,R.done=!0,R.error=!0}function k(){return h.list().then($)}function $(e){_.forEach(e||[],function(e){C[e.name]=e})}function D(){var e=S?g.listByContext(S):o.resolve([]),t=f.hasPermissions().then(function(e){return e?g.list():o.when([])});return o.all({listByContext:e,list:t}).then(function(e){i.rules=function(e){var t=e;S&&(t=_.reject(e,function(e){var n=new RegExp("".concat(e,"/dashboard"));return function(e){var t=_.get(e,"config.url","");return N(e)&&!n.test(t)}}(S)));return t}(_.concat(e.listByContext,e.list))})}function N(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function O(e){return g.hasSource(e,S)}function w(){var e,t;return!(Array.isArray(i.rules)&&0<i.rules.length)||null===(t=s.getContext()).context?o.resolve():(e=a.childAssets(t.id,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}),t=a.childDevices(t.id,{params:{pageSize:2e3,withChildren:!1}}),o.all([e,t]).then(_.flatten).then(function(e){i.children=e}).then(function(){i.ruleChildren={},_.forEach(i.rules,function(e){i.ruleChildren[e.id]=M(e)})}))}function M(t){return _.filter(i.children,function(e){return g.hasSource(t,e)})}function U(e){var t=_.get(C,"".concat(_.get(e,"ruleTemplateName"),"._active")),n=A.canAddRules;return e&&!t&&(n=!1),_.isUndefined(n)&&(e=i.context?c.isAllowed({adminMOs:[i.context.id]}):o.all({isAllowedInventory:c.isAllowed({anyRole:["ROLE_INVENTORY_ADMIN","ROLE_MANAGED_OBJECT_ADMIN"]}),isAllowedSmartRules:c.isAllowed({anyRole:["ROLE_SMARTRULE_ADMIN","ROLE_CEP_MANAGEMENT_ADMIN"]})}).then(function(e){var t=e.isAllowedInventory,e=e.isAllowedSmartRules;return t&&e}),A.canAddRules=e.then(function(e){return A.canAddRules=e,A.canAddRules}),n=!1),n}function G(t){A.rules=A.rules||{};var n=A.rules,e=n[t.id];return _.isUndefined(e)&&(n[t.id]=c.isAllowed({adminMOs:[t.id]}).then(function(e){return n[t.id]=e,n[t.id]}),e=!1),e}function L(e){var t=!0;return t=E.context!==s.CONTEXT.DEVICE&&E.context!==s.CONTEXT.GROUP?t:t&&e&&"c8y_SmartRule"!==e.type}_.assign(i,{isOpen:{},moId:S,loadingStatus:R,refresh:x,paging:{refresh:x},ruleTemplates:C,getLinkToDM:function(){var e={deviceId:S};return t(p||"")(e)},add:function(){g.addNewWithUI().then(x)},edit:function(e){g.editWithUI(e).then(x)},clone:function(e){g.cloneWithUI(e).then(x)},remove:function(e){u({title:m("Delete smart rule"),body:v.getString('You are about to delete smart rule "{{name}}". Do you want to proceed?',e),labels:{ok:m("Delete")},status:"danger"}).then(angular.bind(g,g.remove,e)).then(function(){return _.pull(i.rules,e)}).then(function(){return l.success(m("Smart rule deleted."))})},hasSource:O,getChildrenEnabledForSmartRule:M,toggleRuleActivationForContextMO:function(e){if(O(e))return g.deactivate(e,S,!1).then(function(){l.success(v.getString('Smart rule "{{name}}" deactivated.',e))});return g.activate(e,S,!1).then(function(){l.success(v.getString('Smart rule "{{name}}" activated.',e))})},toggleRuleActivationForChildrenMOs:function(e,n){var t=_.filter(n,function(t){return!_.find(i.ruleChildren[e.id],function(e){return e.id===t.id})}),r=_.filter(i.ruleChildren[e.id],function(t){return!_.find(n,function(e){return t.id===e.id})});return g.updateSources(e,t,r,!1).then(D).then(w).then(function(){l.success(v.getString('Smart rule "{{name}}" activated/deactivated for children.',e))})},tooltip:function(e){var t={activate:{"for group":m("Activate for this group"),"for device":m("Activate for this device"),"for object":m("Activate for this object")},deactivate:{"for group":m("Deactivate for this group"),"for device":m("Deactivate for this device"),"for object":m("Deactivate for this object")}},e=e.enabled&&O(e)?"deactivate":"activate",n=r.groupId?s.CONTEXT.GROUP:"object";return n=r.deviceId?s.CONTEXT.DEVICE:n,t[e]["for ".concat(n)]},type:function(e){var t,e=C[e.ruleTemplateName];e&&(t=e.label.full?v.getString(e.label.full):"".concat(v.getString(e.label.input)," ").concat(v.getString(e.label.output)));return t},status:function(e){return y[e.enabled].text},statusIcon:function(e){return y[e.enabled].icon},statusClass:function(e){return y[e.enabled].cls},showTitle:function(){return null!==s.getContext().context},title:b,context:E,inputIcon:function(e){var t,e=C[e.ruleTemplateName];e&&(t=e.paramGroups.input.icon);return t},outputIcon:function(e){var t,e=C[e.ruleTemplateName];e&&(t=e.paramGroups.output.icon);return t},canAddRules:U,canDuplicate:function(e){return U(e)&&L(e)},canEdit:function(e){return G(e)&&L(e)},canRemove:G,canModify:G,canApplyOnChildren:function(e){return!N(e)},canSeeSection:function(){var e=A.canSeeSection;_.isUndefined(e)&&(A.canSeeSection=(n.checkIfModulesExist(["c8y.cockpit.config"])?f.shouldShowLocalSmartRules():o.when(!1)).then(function(e){return A.canSeeSection=e,A.canSeeSection}),e=!1);return e},isConfigurationGlobalSmartRulesContext:void 0,getRuleCardTitle:function(e){return"c8y_SmartRule"===e.type?m("Global smart rule"):m("Local smart rule")}}),i.isConfigurationGlobalSmartRulesContext=e.path().includes("/rules"),x(),null===s.getContext().context&&d.changeTitle({title:b}),E.context===s.CONTEXT.DEVICE&&n.getStaticLinkTemplate("devicemanagementDeviceDetails").then(function(e){p=e})}e.$inject=["$scope","$routeParams","$location","$q","$interpolate","c8yBase","c8yInventory","c8yApplication","c8yPermissions","c8yModal","c8yAlert","c8yUiUtil","c8yTitle","c8ySmartRulesAvailability","smartRuleTemplatesSvc","smartRulesSvc","gettext","gettextCatalog"],angular.module("c8y.smartRules").controller("SmartRulesListCtrl",e)}();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(){function e(e,r,i,t,n,o,a,
|
|
1
|
+
"use strict";!function(){function e(e,r,i,t,n,o,c,a,u,l,s,d,f,h){var m=this,v={},g={},p={done:!1,inProgress:!1},A={true:{text:f("Active`rule`"),icon:"check-circle",cls:"text-success"},false:{text:f("Inactive`rule`"),icon:"ban",cls:"text-warning"}};function R(){return i.when().then(S).then(x).then(b).then(N).then(C).catch(E)}function S(){p.inProgress=!0}function C(){p.inProgress=!1,p.done=!0,p.error=!1}function E(e){e.data&&e.data.message&&a.danger(e.data.message),p.inProgress=!1,p.done=!0,p.error=!0}function x(){return s.list().then(y)}function y(e){_.forEach(e,function(e){v[e.name]=e})}function b(){var e=m.mo?d.listByContext(m.mo):i.resolve([]),t=l.hasPermissions().then(function(e){return e?d.list():i.when([])});return i.all({listByContext:e,list:t}).then(function(e){m.rules=function(e){m.mo&&(e=_.reject(e,function(e){var n=new RegExp("".concat(e,"/dashboard"));return function(e){var t=_.get(e,"config.url","");return I(e)&&!n.test(t)}}(m.mo)));m.filter&&(e=_.filter(e,m.filter));return e}(_.concat(e.listByContext,e.list)),"function"==typeof m.onRules&&m.onRules()(m.rules)})}function I(e){return"sendDashboardsViaEmail"===e.ruleTemplateName}function T(e){return d.hasSource(e,m.mo)}function N(){var e,t;return Array.isArray(m.rules)&&0<m.rules.length&&(e=u.getContext(),t=function(e){e=e.id;return m.mo?_.get(m,"mo.id")||m.mo:e}(e),null!==e.context)?n.childAssets(t,{skipDetail:!0,params:{pageSize:2e3,withChildren:!1}}).then(function(e){m.children=e}).then(function(){m.ruleChildren={},_.forEach(m.rules,function(e){m.ruleChildren[e.id]=O(e)})}):i.resolve()}function O(t){return _.filter(m.children,function(e){return t.enabled&&d.hasSource(t,e)})}function w(){var e,t=g.canAddRules;return _.isUndefined(t)&&(e=m.context?c.isAllowed({adminMOs:[m.context.id]}):i.all({isAllowedInventory:c.isAllowed({anyRole:["ROLE_INVENTORY_ADMIN","ROLE_MANAGED_OBJECT_ADMIN"]}),isAllowedSmartRules:c.isAllowed({anyRole:["ROLE_SMARTRULE_ADMIN","ROLE_CEP_MANAGEMENT_ADMIN"]})}).then(function(e){var t=e.isAllowedInventory,e=e.isAllowedSmartRules;return t&&e}),g.canAddRules=e.then(function(e){return g.canAddRules=e,g.canAddRules}),t=!1),t}function D(t){g.rules=g.rules||{};var n=g.rules,e=n[t.id];return _.isUndefined(e)&&(n[t.id]=c.isAllowed({adminMOs:[t.id]}).then(function(e){return n[t.id]=e,n[t.id]}),e=!1),e}function M(e){var t=!0;return t=m.context.context!==u.CONTEXT.DEVICE&&m.context.context!==u.CONTEXT.GROUP&&m.context.context!==u.CONTEXT.APPLICATION&&"ecosystem/microservice/microservices"!==m.context.context?t:t&&e&&"c8y_SmartRule"!==e.type}_.assign(m,{ruleTemplates:v,loadingStatus:p,isOpen:{},listClass:"interact-list",$onInit:function(){m.context=u.getContext(),e.$on("smartRulesListReload",R),R()},add:function(){d.addNewWithUI().then(R)},edit:function(e){d.editWithUI(e,m.mo).then(R)},clone:function(e){d.cloneWithUI(e,m.mo).then(R)},remove:function(e){t({title:f("Delete smart rule"),body:h.getString('You are about to delete smart rule "{{name}}". Do you want to proceed?',e),status:"danger",labels:{ok:f("Delete")}}).then(d.remove.bind(d,e)).then(function(){return _.pull(m.rules,e)}).then(function(){return a.success(f("Smart rule deleted."))})},hasSource:T,getChildrenEnabledForSmartRule:O,toggleRuleActivationForContextMO:function(e){if(e.enabled&&T(e))return d.deactivate(e,m.mo,!1).then(function(){a.success(h.getString('Smart rule "{{name}}" deactivated.',e))});return d.activate(e,m.mo,!1).then(function(){a.success(h.getString('Smart rule "{{name}}" activated.',e))})},toggleRuleActivationForChildrenMOs:function(t,n){var r=[];return _.forEach(n,function(e){_.find(m.ruleChildren[t.id],{id:e.id})||r.push(d.activate(t,e,!1))}),_.forEach(m.ruleChildren[t.id],function(e){_.find(n,{id:e.id})||r.push(d.deactivate(t,e,!1))}),i.all(r).then(b).then(N).then(function(){a.success(h.getString('Smart rule "{{name}}" activated/deactivated for children.',t))})},tooltip:function(e){var t,n={activate:{"for group":f("Activate for this group."),"for device":f("Activate for this device."),"for object":f("Activate for this object.")},deactivate:{"for group":f("Deactivate for this group."),"for device":f("Deactivate for this device."),"for object":f("Deactivate for this object.")}},e=e.enabled&&T(e)?"deactivate":"activate";t=r.deviceId?u.CONTEXT.DEVICE:r.groupId?u.CONTEXT.GROUP:"object";return n[e]["for ".concat(t)]},type:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.label.full?h.getString(e.label.full):"".concat(h.getString(e.label.input)," ").concat(h.getString(e.label.output)));return t},status:function(e){e=e.enabled&&T(e);return A[e].text},statusIcon:function(e){e=e.enabled&&T(e);return A[e].icon},statusClass:function(e){e=e.enabled&&T(e);return A[e].cls},context:u.getContext(),inputIcon:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.paramGroups.input.icon);return t},outputIcon:function(e){var t,e=v[e.ruleTemplateName];e&&(t=e.paramGroups.output.icon);return t},canDuplicate:function(e){return w()&&M(e)},canEdit:function(e){return D(e)&&M(e)},canRemove:D,canAddRules:w,canModify:D,canApplyOnChildren:function(e){return!I(e)},canSeeSection:function(){var e=g.canSeeSection;_.isUndefined(e)&&(g.canSeeSection=l.shouldShowLocalSmartRules().then(function(e){return g.canSeeSection=e,g.canSeeSection}),e=!1);return e}}),_.assign(e,{refresh:R,paging:{refresh:R}})}e.$inject=["$scope","$routeParams","$q","c8yModal","c8yInventory","c8yApplication","c8yPermissions","c8yAlert","c8yUiUtil","c8ySmartRulesAvailability","smartRuleTemplatesSvc","smartRulesSvc","gettext","gettextCatalog"],angular.module("c8y.smartRules").component("smartRulesList",{bindings:{mo:"<?",filter:"<?",disableEditAndCreate:"<?",onRules:"&?"},templateUrl:":::PLUGIN_PATH:::/list/smartRulesList.html",controller:e,controllerAs:"vm"})}();
|
|
@@ -119,7 +119,7 @@
|
|
|
119
119
|
class="dropdown-menu dropdown-menu-right"
|
|
120
120
|
uib-dropdown-menu
|
|
121
121
|
>
|
|
122
|
-
<li ng-if="vm.
|
|
122
|
+
<li ng-if="vm.canEdit(rule) && !vm.disableEditAndCreate">
|
|
123
123
|
<button
|
|
124
124
|
title="{{ 'Edit smart rule' | translate }}"
|
|
125
125
|
type="button"
|
|
@@ -129,7 +129,7 @@
|
|
|
129
129
|
{{ 'Edit' | translate }}
|
|
130
130
|
</button>
|
|
131
131
|
</li>
|
|
132
|
-
<li ng-if="vm.
|
|
132
|
+
<li ng-if="vm.canDuplicate(rule) && !vm.disableEditAndCreate">
|
|
133
133
|
<button
|
|
134
134
|
title="{{ 'Duplicate smart rule' | translate }}"
|
|
135
135
|
type="button"
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
{{ 'Duplicate' | translate }}
|
|
140
140
|
</button>
|
|
141
141
|
</li>
|
|
142
|
-
<li ng-if="vm.
|
|
142
|
+
<li ng-if="vm.canRemove(rule)">
|
|
143
143
|
<button
|
|
144
144
|
title="{{ 'Delete smart rule' | translate }}"
|
|
145
145
|
ng-click="vm.remove(rule)"
|
|
@@ -177,7 +177,7 @@
|
|
|
177
177
|
role="list"
|
|
178
178
|
uib-dropdown-menu
|
|
179
179
|
>
|
|
180
|
-
<li ng-if="
|
|
180
|
+
<li ng-if="canEdit(rule)">
|
|
181
181
|
<button
|
|
182
182
|
title="{{ 'Edit smart rule' | translate }}"
|
|
183
183
|
type="button"
|
|
@@ -187,7 +187,7 @@
|
|
|
187
187
|
{{ 'Edit' | translate }}
|
|
188
188
|
</button>
|
|
189
189
|
</li>
|
|
190
|
-
<li ng-if="
|
|
190
|
+
<li ng-if="canDuplicate(rule)">
|
|
191
191
|
<button
|
|
192
192
|
title="{{ 'Duplicate smart rule' | translate }}"
|
|
193
193
|
type="button"
|
|
@@ -197,7 +197,7 @@
|
|
|
197
197
|
{{ 'Duplicate' | translate }}
|
|
198
198
|
</button>
|
|
199
199
|
</li>
|
|
200
|
-
<li ng-if="
|
|
200
|
+
<li ng-if="canRemove(rule)">
|
|
201
201
|
<button
|
|
202
202
|
title="{{ 'Delete smart rule' | translate }}"
|
|
203
203
|
type="button"
|