@c8y/ng1-modules 1021.81.0 → 1022.4.2

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.
Files changed (127) hide show
  1. package/alarmsEventsExplorer/alarmsEventsTimelinesConfig/alarmsEventsTimelinesConfig.html +1 -1
  2. package/assetPropertyWidget/img/asset-properties-widget-pr.png +0 -0
  3. package/assetPropertyWidget/views/config.html +1 -1
  4. package/assetTable/assetTable2/img/asset-table-widget-pr.png +0 -0
  5. package/assetTable/img/asset-table-widget-pr.png +0 -0
  6. package/core/core/services/audits.js +1 -1
  7. package/core/core/services/deviceShell.js +1 -1
  8. package/core/core/services/retentions.js +1 -1
  9. package/core/core/services/tenant.js +1 -1
  10. package/core/core/services/user.js +1 -1
  11. package/core/cumulocity.json +0 -1
  12. package/core/locales/de.po +481 -720
  13. package/core/locales/es.po +431 -671
  14. package/core/locales/fr.po +510 -751
  15. package/core/locales/ja_JP.po +503 -740
  16. package/core/locales/ko.po +431 -671
  17. package/core/locales/nl.po +433 -672
  18. package/core/locales/pl.po +431 -672
  19. package/core/locales/pt_BR.po +528 -768
  20. package/core/locales/zh_CN.po +431 -671
  21. package/core/locales/zh_TW.po +431 -671
  22. package/core/ui/properties/propertySelector.html +156 -109
  23. package/core/ui/services/measurementsReport.js +1 -1
  24. package/core/ui/views/auditList.html +2 -2
  25. package/core/ui/views/eventList.html +2 -2
  26. package/core/ui/views/filePicker.html +1 -1
  27. package/dataBroker/connectors/connectors.service.js +1 -1
  28. package/dataPointExplorer/img/data-points-graph-widget-pr.png +0 -0
  29. package/dataPointExplorer/views/widgetConfig.html +92 -94
  30. package/device-protocol-canbus/canbus-device.provider.js +1 -1
  31. package/device-protocol-canopen/canopen-device.provider.js +1 -1
  32. package/device-protocol-modbus/modbus-device.provider.js +1 -1
  33. package/device-protocol-opcua/opcua-device.provider.js +1 -1
  34. package/device-protocol-profibus/profibus-device.provider.js +1 -1
  35. package/device-protocols/device-protocol-import-button.component.js +1 -1
  36. package/device-protocols/object-mapping.component.js +1 -1
  37. package/device-protocols/object-mapping.html +1 -1
  38. package/deviceDatabase4/detail/device-type-detail.component.js +1 -1
  39. package/deviceDatabase4/device-database.service.js +1 -1
  40. package/deviceDatabase4/device-type-list.component.js +1 -1
  41. package/deviceDatabase4/modals/configure-discrete-io.html +1 -1
  42. package/deviceDatabase4/modals/configure-register.html +1 -1
  43. package/deviceDatabase4/modals/import-device-type.component.js +1 -1
  44. package/deviceDetail/cumulocity.json +1 -2
  45. package/deviceStatusWidget/deviceStatus.component.js +1 -1
  46. package/deviceStatusWidget/ownerStatus.html +2 -2
  47. package/deviceStatusWidget/requiredAvailabilityIntervalSetting.html +4 -4
  48. package/devicemanagement-eventList/index.js +1 -1
  49. package/enterpriseEdition/cumulocity.json +0 -13
  50. package/enterpriseEdition/enterpriseEdition.module.js +1 -1
  51. package/eventList/img/events-list-widget-pr.png +0 -0
  52. package/eventList/views/eventListConfig.html +39 -32
  53. package/export/cumulocity.json +0 -1
  54. package/export/index.js +1 -1
  55. package/export/services/config.js +1 -1
  56. package/htmlWidget/index.js +1 -1
  57. package/kpi/img/data-points-list-widget-pr.png +0 -0
  58. package/kpi/views/gaugeConfig.html +28 -34
  59. package/kpi/views/listConfig.html +14 -18
  60. package/kpi/views/pieChartConfig.html +30 -36
  61. package/modbusConfiguration4/fieldbus-device-list.component.js +1 -1
  62. package/modbusWidget4/modbus-widget.service.js +1 -1
  63. package/modbusWidget4/widget-config.component.js +1 -1
  64. package/modbusWidget4/widget-config.html +74 -84
  65. package/package.json +11 -13
  66. package/propertiesLibrary/index.js +1 -1
  67. package/roles/list/rolesList.html +0 -2
  68. package/scada/views/componentConfig.html +23 -23
  69. package/scada/views/mapping.html +41 -39
  70. package/smartRules/controllers/add.js +1 -1
  71. package/smartRules/controllers/list.js +1 -1
  72. package/smartRules/list/smartRulesList.component.js +1 -1
  73. package/smartRules/list/smartRulesList.html +2 -2
  74. package/smartRules/services/smartRules.js +1 -1
  75. package/smartRules/views/add.html +32 -10
  76. package/smartRules/views/list.html +4 -3
  77. package/trafficLightWidget/states-mapping.html +82 -69
  78. package/administration-config/administration-config.module.js +0 -1
  79. package/administration-config/cumulocity.json +0 -13
  80. package/asset-notes/assetNotes.component.js +0 -1
  81. package/asset-notes/assetNotes.html +0 -93
  82. package/asset-notes/assetNotes.module.js +0 -1
  83. package/asset-notes/assetNotes.service.js +0 -1
  84. package/asset-notes/cumulocity.json +0 -13
  85. package/core/ui/forms/ssh-key-input.html +0 -33
  86. package/core/ui/forms/ssh-key-input.js +0 -1
  87. package/devicemanagement-deviceListMap/controllers/deviceListMap.js +0 -1
  88. package/devicemanagement-deviceListMap/cumulocity.json +0 -19
  89. package/devicemanagement-deviceListMap/index.js +0 -1
  90. package/devicemanagement-deviceListMap/views/index.html +0 -21
  91. package/enterpriseEdition/customBranding/brandingConfiguration.constants.js +0 -1
  92. package/enterpriseEdition/customBranding/brandingConfiguration.service.js +0 -1
  93. package/enterpriseEdition/customBranding/brandingConfigurationForm.component.js +0 -1
  94. package/enterpriseEdition/customBranding/brandingConfigurationForm.html +0 -141
  95. package/enterpriseEdition/customBranding/brandingConfigurationUi.provider.js +0 -1
  96. package/enterpriseEdition/customBranding/brandingDeploy.service.js +0 -1
  97. package/enterpriseEdition/customBranding/brandingProcessExecution.component.js +0 -1
  98. package/enterpriseEdition/customBranding/brandingProcessExecution.html +0 -120
  99. package/enterpriseEdition/customBranding/custom-branding.module.js +0 -1
  100. package/enterpriseEdition/customBranding/microservice.value.js +0 -1
  101. package/enterpriseEdition/ui-assets/index.js +0 -1
  102. package/enterpriseEdition/ui-assets/public-options.service.js +0 -1
  103. package/enterpriseEdition/ui-assets/static-assets.service.js +0 -1
  104. package/enterpriseEdition/ui-assets/ui-assets.service.js +0 -1
  105. package/export/controllers/list.js +0 -1
  106. package/export/views/list.html +0 -298
  107. package/remoteAccess/clients/remoteAccessClients.service.js +0 -1
  108. package/remoteAccess/clients/terminal/index.html +0 -30
  109. package/remoteAccess/clients/terminal/index.js +0 -1
  110. package/remoteAccess/clients/terminal/shell-adapter.js +0 -1
  111. package/remoteAccess/clients/terminal/style.css +0 -25
  112. package/remoteAccess/clients/terminal/telnet-negotiator.js +0 -1
  113. package/remoteAccess/clients/vnc/vncClient.html +0 -60
  114. package/remoteAccess/clients/vnc/vncClient.js +0 -1
  115. package/remoteAccess/cumulocity.json +0 -69
  116. package/remoteAccess/remoteAccess.module.js +0 -1
  117. package/remoteAccess/remoteAccess.service.js +0 -1
  118. package/remoteAccess/remoteAccessEndpointCard/remoteAccessEndpointCard.component.js +0 -1
  119. package/remoteAccess/remoteAccessEndpointCard/remoteAccessEndpointCard.html +0 -89
  120. package/remoteAccess/remoteAccessEndpointModal/remoteAccessEndpointModal.component.js +0 -1
  121. package/remoteAccess/remoteAccessEndpointModal/remoteAccessEndpointModal.html +0 -484
  122. package/remoteAccess/remoteAccessEndpointModal/suggestedIPAddressTemplate.html +0 -8
  123. package/remoteAccess/remoteAccessEndpointsList/remoteAccessEndpointsList.component.js +0 -1
  124. package/remoteAccess/remoteAccessEndpointsList/remoteAccessEndpointsList.html +0 -75
  125. package/remoteAccess/remoteAccessSettings/remoteAccessSettings.component.js +0 -1
  126. package/remoteAccess/remoteAccessSettings/remoteAccessSettings.html +0 -37
  127. package/remoteAccess/remoteAccessUI.provider.js +0 -1
@@ -1 +0,0 @@
1
- function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function ownKeys(t,e){var o,n=Object.keys(t);return Object.getOwnPropertySymbols&&(o=Object.getOwnPropertySymbols(t),e&&(o=o.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),n.push.apply(n,o)),n}function _objectSpread(t){for(var e=1;e<arguments.length;e++){var o=null!=arguments[e]?arguments[e]:{};e%2?ownKeys(Object(o),!0).forEach(function(e){_defineProperty(t,e,o[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):ownKeys(Object(o)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))})}return t}function _defineProperty(e,t,o){return(t=_toPropertyKey(t))in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function _toPropertyKey(e){e=_toPrimitive(e,"string");return"symbol"==_typeof(e)?e:e+""}function _toPrimitive(e,t){if("object"!=_typeof(e)||!e)return e;var o=e[Symbol.toPrimitive];if(void 0===o)return("string"===t?String:Number)(e);o=o.call(e,t||"default");if("object"!=_typeof(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}(()=>{function e(e,t,o,n){var r=this;function i(e){return _objectSpread(_objectSpread({},e),{},{htmlContent:n(e.htmlContent)})}_.assign(r,{$onInit:function(){return t.get(r.config.device).then(function(e){r.notes=i(e)})},edit:function(){r.editable=!0,r.editedNotes=_.cloneDeep(r.notes)},save:function(){t.save(r.config.device,r.editedNotes).then(function(e){r.editable=!1,r.notes=i(e)}).then(function(){return e.success(o("Notes saved."))})},cancel:function(){r.editable=!1,r.editedNotes=void 0}})}e.$inject=["c8yAlert","assetNotesSvc","gettext","$sanitize"],angular.module("c8y.assetNotes").component("c8yAssetNotes",{bindings:{config:"<"},templateUrl:":::PLUGIN_PATH:::/assetNotes.html",controller:e,controllerAs:"vm"})})();
@@ -1,93 +0,0 @@
1
- <div class="fit-h d-flex flex-wrap a-i-stretch">
2
- <span
3
- class="c8y-icon c8y-icon-duocolor asset-notes-icon"
4
- c8y-icon="c8y-notification"
5
- ></span>
6
- <div
7
- class="asset-notes-content"
8
- ng-if="!vm.editable"
9
- >
10
- <c8y-rectangle-spinner
11
- class="spinner-inline"
12
- ng-show="!vm.notes"
13
- ></c8y-rectangle-spinner>
14
-
15
- <div ng-if="vm.notes && !vm.notes.htmlContent">
16
- {{ 'No notes yet.' | translate }}
17
- <c8y-if-allowed admin-mos="[vm.config.device]">
18
- <button
19
- class="btn btn-link btn-sm"
20
- title="{{ 'Edit' | translate }}"
21
- type="button"
22
- ng-click="vm.edit()"
23
- >
24
- <i c8y-icon="pencil"></i>
25
- {{ 'Edit' | translate }}
26
- </button>
27
- </c8y-if-allowed>
28
- </div>
29
-
30
- <div
31
- class="text-break-word asset-notes-body"
32
- ng-if="vm.notes && vm.notes.htmlContent"
33
- >
34
- <span ng-bind-html="vm.notes.htmlContent | safeLinks"></span>
35
- <c8y-if-allowed admin-mos="[vm.config.device]">
36
- <button
37
- class="btn btn-link btn-sm"
38
- title="{{ 'Edit' | translate }}"
39
- type="button"
40
- ng-click="vm.edit()"
41
- >
42
- <i c8y-icon="pencil"></i>
43
- {{ 'Edit' | translate }}
44
- </button>
45
- </c8y-if-allowed>
46
- </div>
47
-
48
- <div class="asset-notes-footer m-t-8">
49
- <small class="text-muted">
50
- <em
51
- ng-if="vm.notes.lastUpdated"
52
- translate
53
- >
54
- {{ vm.notes.lastUpdated | absoluteDate }} by {{ vm.notes.user }}
55
- </em>
56
- </small>
57
- </div>
58
- </div>
59
- <div
60
- class="fit-h flex-grow"
61
- ng-if="vm.editable"
62
- >
63
- <div class="d-flex a-i-stretch fit-h">
64
- <textarea
65
- class="form-control fit-h"
66
- aria-label="{{ 'Notes' | translate }}"
67
- rows="5"
68
- ng-model="vm.editedNotes.htmlContent"
69
- c8y-code-editor
70
- ></textarea>
71
- <div class="input-group-btn a-s-center">
72
- <button
73
- class="btn btn-dot"
74
- title="{{ 'Save' | translate }}"
75
- type="button"
76
- ng-click="vm.save()"
77
- >
78
- <i c8y-icon="check"></i>
79
- </button>
80
- </div>
81
- <div class="input-group-btn a-s-center">
82
- <button
83
- class="btn btn-dot"
84
- title="{{ 'Cancel' | translate }}"
85
- type="button"
86
- ng-click="vm.cancel()"
87
- >
88
- <i c8y-icon="times"></i>
89
- </button>
90
- </div>
91
- </div>
92
- </div>
93
- </div>
@@ -1 +0,0 @@
1
- (()=>{function e(e,t){e.add({name:"assetNotesWidget",nameDisplay:t("Asset notes"),description:t("Displays editable asset notes."),widgetComponent:"c8yAssetNotes",transformConfigWithContext:["config","context",function(e,t){return _.assign(e,{context:t})}],previewImage:"c8y-style-assets/dm-asset-notes-widget.png",options:{groupsSelectable:!0}})}e.$inject=["c8yComponentsProvider","gettext"],angular.module("c8y.assetNotes",[]).config(e)})();
@@ -1 +0,0 @@
1
- (()=>{function t(r,a,o){var s="c8y_ComponentConfig!assetNotes";return{get:function(t){t=r.getId(t);return a.detail(t,{withChildren:!1}).then(r.getResData).then(_.property(s)).then(function(t){return t||{}})},save:function(t,e){var n={id:r.getId(t)};return o.current().then(function(t){e.user=t.id,e.lastUpdated=moment().format(r.dateFullFormat)}).then(function(){return n[s]=e,n}).then(a.save).then(r.getResData).then(_.property(s))}}}t.$inject=["c8yBase","c8yInventory","c8yUser"],angular.module("c8y.assetNotes").factory("assetNotesSvc",t)})();
@@ -1,13 +0,0 @@
1
- {
2
- "name": "Asset notes widget",
3
- "ngModules": [
4
- "c8y.assetNotes"
5
- ],
6
- "category": "Device",
7
- "description": "Adds dashboard widget to manage asset notes",
8
- "js": [
9
- "assetNotes.module.js",
10
- "assetNotes.component.js",
11
- "assetNotes.service.js"
12
- ]
13
- }
@@ -1,33 +0,0 @@
1
- <div class="form-group">
2
- <div class="tight-grid">
3
- <div class="col-xs-8">
4
- <input
5
- placeholder="{{ 'e.g.' | translate }} {{ vm.getPlaceholder() }}"
6
- type="text"
7
- class="form-control"
8
- ng-model="vm.key"
9
- ng-readonly="vm.readonly"
10
- />
11
- </div>
12
- <div class="col-xs-4">
13
- <div class="input-group" ng-file-select="vm.onKeyFileSelected($files)" ng-if="!vm.readonly">
14
- <input
15
- class="form-control"
16
- ng-model="vm.sshKeyFile.name"
17
- placeholder="{{ 'Or read from a file' | translate }}…"
18
- readonly
19
- ng-if="!vm.readonly"
20
- />
21
- <span class="input-group-btn" ng-if="!vm.readonly">
22
- <button class="btn btn-default" type="button" title="{{ 'Upload' | translate }}">
23
- <span><i c8y-icon="upload"></i></span>
24
- </button>
25
- </span>
26
- </div>
27
- </div>
28
- </div>
29
- <c8y-feedback-panel
30
- feedback="vm.sshKeyFileFeedback"
31
- ng-if="vm.sshKeyFileFeedback"
32
- ></c8y-feedback-panel>
33
- </div>
@@ -1 +0,0 @@
1
- (()=>{function e(c,e){var a=this,l=e.createEnum([{name:"PRIVATE",value:"private",placeholder:"-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAK...VQvopm2xw==----- END RSA PRIVATE KEY-----"},{name:"PUBLIC",value:"public",placeholder:"ssh-rsa AAAAB3NzaC...1kc3MAAACB== user@example.com"},{name:"CERTIFICATE",value:"certificate",placeholder:"ssh-rsa-cert-v01@openssh.com AAAAHHNz...Y9gBU= user@example.com"}]);_.assign(a,{onKeyFileSelected:function(e){e=_.head(e);c.parseSshKeyFile(e).then(function(e){a.key=e}).catch(function(e){e=e.feedback;a.sshKeyFileFeedback=e})},getPlaceholder:function(){return(_.find(l,{value:a.keytype})||{}).placeholder}})}e.$inject=["c8yRemoteAccess","c8yBase"],angular.module("c8y.ui").component("c8ySshKeyInput",{bindings:{key:"=",keytype:"@",readonly:"<"},templateUrl:":::PLUGIN_PATH:::/ui/forms/ssh-key-input.html",controller:e,controllerAs:"vm"})})();
@@ -1 +0,0 @@
1
- angular.module("c8y.parts.deviceListMap").controller("deviceListMapVPCtrl",["$scope","c8yTitle","gettext","gettextCatalog","c8yConfig",function(e,t,a,i,r){var l;e.cssClass="fixedFullArea",e.markerTemplate=r.deviceListMap.markerTemplate||null,e.realtime=r.deviceListMap.realtime||!1,e.legend=r.deviceListMap.legend||!1,e.refresh=function(){e.$broadcast("refresh")},e.paging={refresh:!0},t.changeTitle({title:a("Device map"),subtitle:l?i.getString("{{qty}} markers",{qty:l}):void 0})}]);
@@ -1,19 +0,0 @@
1
- {
2
- "name": "Device list map",
3
- "ngModules": [
4
- "c8y.parts.deviceListMap"
5
- ],
6
- "category": "Device",
7
- "icon": "bell",
8
- "color": "#F2DF0F",
9
- "list": false,
10
- "description": "Map overview of every device.",
11
- "js": [
12
- "index.js",
13
- "controllers/deviceListMap.js"
14
- ],
15
- "folderName": "deviceListMap",
16
- "appsInclude": [
17
- "devicemanagement"
18
- ]
19
- }
@@ -1 +0,0 @@
1
- angular.module("c8y.parts.deviceListMap",[]).constant("c8yMapsConfiguration",{deviceListMap:{},tracking:{}}).config(["$routeProvider","c8yNavigatorProvider","gettext","c8yMapsConfiguration",function(i,a,e,t){a.addNavigation(t.deviceListMap.navigation||{parent:e("Devices"),name:e("Map"),priority:1900,path:"devicemap",icon:"c8y-location"}),i.when("/devicemap",{templateUrl:":::PLUGIN_PATH:::/views/index.html"})}]);
@@ -1,21 +0,0 @@
1
- <c8y-breadcrumbs-set>
2
- <c8y-breadcrumbs-item
3
- label="{{ 'Map' | translate }}"
4
- icon="c8y-location"
5
- ></c8y-breadcrumbs-item>
6
- <c8y-breadcrumbs-item
7
- label="{{ 'Devices' | translate }}"
8
- icon="exchange"
9
- ></c8y-breadcrumbs-item>
10
- </c8y-breadcrumbs-set>
11
-
12
- <div data-ng-controller="deviceListMapVPCtrl" class="fullpage-map">
13
- <c8y-map-internal
14
- marker-template="markerTemplate"
15
- c8y-legend="legend"
16
- control-buttons="true"
17
- multiple-devices="false"
18
- css-class="{{ cssClass }}"
19
- realtime="realtime"
20
- ></c8y-map-internal>
21
- </div>
@@ -1 +0,0 @@
1
- angular.module("c8y.custom-branding").constant("c8yBrandingMapping",{fileProperties:[{key:"appLogo",filename:"logo-nav",cssVar:"navigator-platform-logo"},{key:"brand-logo-img",filename:"logo",cssVar:"brand-logo-img"},{key:"favicon",filename:"favicon",option:"faviconUrl"}],cookieBannerProperties:["cookieBannerDisabled","cookieBannerTitle","cookieBannerText","policyUrl"],nonCssProperties:["__import-font","html_title"],cssVarMapping:{headerColor:"header-color",appLogo:"navigator-platform-logo",navColor:"navigator-bg-color",navColorHeader:"navigator-header-bg","appLogo-height":"navigator-platform-logo-height","font-family-sans-serif":"font-family-base","headings-font-family":"font-family-headings","brand-logo-height":"brand-logo-img-height",html_title:"globalTitle",favicon:"faviconUrl"},fontFamilyCssVars:{"@font-family-sans-serif":"font-family-base","@headings-font-family":"font-family-headings"}});
@@ -1 +0,0 @@
1
- (()=>{function n(t,e,r){var a=e.url("service/".concat("branding","/")),o={"Content-Type":"application/json"};return{update:function(){var n={headers:o};return t.post("".concat(a,"update"),n).then(e.getResData)},state:function(){var n={headers:o,silentError:!0};return t.get("".concat(a,"state"),{},n).then(e.getResData)},wizardPreview:function(){return n({process:_.constant("preview")})},wizardGenerate:function(){return n({process:_.constant("generate")})}};function n(n){return r.open({component:"c8yBrandingProcessExecution",backdrop:"static",keyboard:!1,resolve:n}).result}}n.$inject=["$http","c8yBase","c8yWizardModal"],angular.module("c8y.custom-branding").factory("c8yBrandingConfiguration",n)})();
@@ -1 +0,0 @@
1
- (()=>{function n(r,n,t,e,i,o,a,c,l,s,u,d,g,f){var p,m,b,y,v=f("humanizeAppName"),h=this,f=s("Apply branding"),I=s("Save branding configuration first"),B={html_title:w,favicon:function(n){h.favicon=n?n.fileSrc:"",p&&p.document.querySelector("link[rel=icon]")&&(p.document.querySelector("link[rel=icon]").href=n?n.fileSrc:"")},"navigator-font-family":function(n){k("navigator-font-family",a.getFontFamilyCssVar(n))},appLogo:function(n){return k("navigator-platform-logo",n?"url(".concat(n.fileSrc,")"):"")},"brand-logo-img":function(n){return k("brand-logo-img",n?"url(".concat(n.fileSrc,")"):"")},"__import-font":function(n){var e=document.createElement("style");e.innerText="@import url('".concat(n,"')"),C().contentDocument.head.appendChild(e),p&&p.document.head.appendChild(e)}};function C(){return document.querySelector("#previewBrowser")}function N(){return h.isLoading=!0,n.all({schema:i.getSchema(),form:i.getForm(),options:i.getSchemaFormOptions(),branding:i.getBranding(),app:d.getCurrent()}).then(function(n){var e=n.schema,t=n.form,o=n.options,i=n.branding,n=n.app,a=(_.defaults(i,{c8y_less_variables:{}}),b=_.cloneDeep(i),_.assign(h,{schema:e,form:t,options:o,branding:i}),y=n,C());a.src="".concat(d.getHref(y),"/index.html"),a.onload=function(){a.appTitle=a.contentDocument.title,_.set(a.contentWindow,"C8Y_PREVIEW.preview",!0),_.set(a.contentWindow,"C8Y_PREVIEW.previewCookieBanner",R()),w(),T()},r.$watchCollection("vm.branding.c8y_less_variables",T)}).finally(function(){h.isLoading=!1})}function w(n){n=n||A();h.title="".concat(n," - ").concat(C().appTitle),p&&(p.document.title="".concat(n," - ").concat(p.appTitle),p.C8Y_PREVIEW.globalTitle=n)}function A(){return _.get(h,"branding.c8y_less_variables.html_title")||u.appOption("globalTitle")}function R(){return _.pick(h.branding.c8y_less_variables,["cookieBannerDisabled","cookieBannerTitle","cookieBannerText","policyUrl"])}function T(){h.isLoading||_.forOwn(h.branding.c8y_less_variables,function(n,e){B[e]?B[e](n):k(e,n)})}function k(n,e){E(n,e,C().contentDocument.documentElement),p&&E(n,e,p.document.documentElement)}function E(n,e,t){n=a.keyToCssVar(n);"navigator-platform-logo-height"===n?null==e||""===e?t.style.removeProperty("--".concat(n)):t.style.setProperty("--".concat(n),"".concat(e,"%")):t.style.setProperty("--".concat(n),_.isNumber(e)?"".concat(e,"px"):e)}function P(){return o.state().then(S)}function S(n){var e=h.state;h.state=n,e&&e.RUNNING&&!n.RUNNING&&l.success(s("Branded applications created.")),e&&e.WAITING&&n.RUNNING&&l.success(s("Branded applications will be created.")),(n.RUNNING||n.WAITING)&&t(P,2e3)}_.assign(h,{$onInit:function(){c&&P();return N()},applyTitle:f,dirtyFormApplyTitle:I,canSave:function(){return!(_.get(r,"platformConfigurationForm1.$invalid")||_.get(r,"platformConfigurationForm2.$invalid"))},save:function(){var t=[],o=i.BINARY_VARS;return h.branding.binary_ref={},_.each(o,function(e){var n;h.branding.c8y_less_variables[e]&&(n=i.saveBinary(e,h.branding.c8y_less_variables[e],b.binary_ref,b.c8y_less_variables[e]).then(function(n){h.branding.binary_ref[e]=_.pick(n,["id","name"])}),t.push(n))}),n.all(t).then(function(){return h.branding.c8y_less_variables=_.omitBy(h.branding.c8y_less_variables,function(n,e){return""===_.trim(n)||_.includes(o,e)}),i.saveConfiguration(h.branding,b.id).then(function(){return l.success(s("Branding saved."))})}).then(e.reload)},generate:o.wizardGenerate,preview:function(){p=window.open("".concat(d.getHref(y),"/index.html"),"_blank","noopener,noreferrer"),function e(){clearInterval(m);m=setInterval(function(){var n;p&&(p.C8Y_PREVIEW={preview:!0,globalTitle:A(),previewCookieBanner:R()},p.C8Y_APP)&&(n=p.C8Y_APP.name,p.appTitle=v(n),clearInterval(m),T(),p.onunload=function(){return e()})})}()},blocked:function(){var n=h.state;return!_.get(h,"branding.id")||_.get(n,"RUNNING")||_.get(n,"WAITING")},title:window.document.title,favicon:"favicon.ico",useMicroservice:c,applyConfiguration:function(){a.removeLegacyBrandedApplications().then(function(){return g({status:"info",title:s("Apply branding configuration"),body:s("You are about to apply the branding configuration, making it visible to all subtenants. Do you want to proceed?"),labels:{ok:s("Apply")}})}).then(function(){a.deploy(h.branding.c8y_less_variables).then(function(){return l.success(s("Branding configuration is being applied. It usually takes less than a minute."))},function(n){l.danger(u.getResErrorMessage(n))})})},removeAppliedBranding:function(){g({status:"info",title:s("Remove branding"),body:s("You are about to remove applied branding.\n If you have any extra customization options set, they will be reset.\n The default branding will be shown to all subtenants. Do you want to proceed?"),labels:{ok:s("Remove")}}).then(function(){a.reset().then(function(){return l.success(s("Branding has been removed."))})})},resetForm:function(n){g({status:"info",title:s("Reset branding configuration"),body:s("You are about to reset the branding configuration to the previously saved settings.\n Do you want to proceed?"),labels:{ok:s("Reset")}}).then(function(){N().then(function(){n&&n.$setPristine(),l.success(s("Branding configuration has been reset."))},function(n){return l.danger(n)})})}})}n.$inject=["$scope","$q","$timeout","$route","c8yBrandingConfigurationUi","c8yBrandingConfiguration","c8yBrandingDeploy","USE_BRANDING_MICROSERVICE","c8yAlert","gettext","c8yBase","c8yApplication","c8yModal","$filter"],angular.module("c8y.custom-branding").component("c8yBrandingConfigurationForm",{templateUrl:":::PLUGIN_PATH:::/customBranding/brandingConfigurationForm.html",controller:n,controllerAs:"vm"})})();
@@ -1,141 +0,0 @@
1
- <c8y-breadcrumbs-set>
2
- <c8y-breadcrumbs-item label="{{ 'Branding' | translate }}" icon="cog"></c8y-breadcrumbs-item>
3
- <c8y-breadcrumbs-item
4
- label="{{ 'Enterprise tenant' | translate }}"
5
- icon="cog"
6
- ></c8y-breadcrumbs-item>
7
- <c8y-breadcrumbs-item label="{{ 'Settings' | translate }}" icon="cog"></c8y-breadcrumbs-item>
8
- </c8y-breadcrumbs-set>
9
-
10
- <c8y-ui-action-bar-set>
11
- <li ng-show="vm.state.WAITING || vm.state.RUNNING">
12
- <i c8y-icon="spinner" class="icon-spin"></i>
13
- <span translate ng-show="vm.state.WAITING">Waiting in queue</span>
14
- <span translate ng-show="vm.state.RUNNING">Executing. Takes about 2 minutes</span>
15
- </li>
16
-
17
- <button
18
- ng-show="vm.useMicroservice"
19
- title="{{ 'Create branded standard apps' | translate }}"
20
- type="button"
21
- class="btn btn-link"
22
- ng-click="vm.generate()"
23
- ng-disabled="vm.blocked()"
24
- >
25
- <i c8y-icon="bolt"></i>
26
- {{ 'Create' | translate }}
27
- </button>
28
-
29
- <button
30
- class="btn btn-link"
31
- type="button"
32
- title="{{ (wrapperform.$dirty ? vm.dirtyFormApplyTitle : vm.applyTitle) | translate }}"
33
- ng-disabled="wrapperform.$dirty"
34
- ng-click="vm.applyConfiguration()"
35
- ng-show="!vm.useMicroservice"
36
- >
37
- <i c8y-icon="bolt"></i>
38
- {{ 'Apply' | translate }}
39
- </button>
40
-
41
- <button
42
- class="btn btn-link"
43
- type="button"
44
- title="{{ 'Remove applied branding' | translate }}"
45
- ng-click="vm.removeAppliedBranding()"
46
- ng-show="!vm.useMicroservice"
47
- >
48
- <i c8y-icon="undo"></i>
49
- {{ 'Remove branding' | translate }}
50
- </button>
51
-
52
- <button
53
- class="btn btn-link"
54
- type="button"
55
- title="{{ 'Open branded apps preview' | translate }}"
56
- ng-click="vm.preview()"
57
- >
58
- <i c8y-icon="external-link"></i>
59
- {{ 'Open preview' | translate }}
60
- </button>
61
- </c8y-ui-action-bar-set>
62
-
63
- <div class="card card--grid content-fullpage grid__col--3-9--md" ng-form="wrapperform">
64
- <div class="d-flex d-col content-fullpage bg-level-1">
65
- <div class="card-header separator">
66
- <div class="card-title" translate>Configuration</div>
67
- </div>
68
- <div class="inner-scroll flex-grow">
69
- <div class="card-block p-t-0 p-b-0 overflow-visible">
70
- <div ng-show="vm.isLoading">
71
- <c8y-loading></c8y-loading>
72
- </div>
73
- <form name="platformConfigurationForm1" ng-blur="vm.updateLivePreview()" novalidate>
74
- <c8y-schema-form
75
- schema="vm.schema"
76
- form="vm.form[0]"
77
- model="vm.branding.c8y_less_variables"
78
- options="vm.options"
79
- ></c8y-schema-form>
80
- </form>
81
-
82
- <form name="platformConfigurationForm2" novalidate>
83
- <c8y-schema-form
84
- schema="vm.schema"
85
- form="vm.form[1]"
86
- model="vm.branding.c8y_less_variables"
87
- options="vm.options"
88
- ></c8y-schema-form>
89
- </form>
90
- </div>
91
- </div>
92
- <div class="card-footer separator sticky-bottom">
93
- <button
94
- class="btn btn-default"
95
- type="button"
96
- title="{{ 'Reset' | translate }}"
97
- ng-disabled="!wrapperform.$dirty"
98
- ng-click="vm.resetForm(wrapperform)"
99
- c8y-key-shortcut="Escape"
100
- >
101
- {{ 'Reset' | translate }}
102
- </button>
103
- <button
104
- class="btn btn-primary"
105
- type="button"
106
- title="{{ 'Save' | translate }}"
107
- ng-click="vm.save()"
108
- ng-disabled="!vm.canSave() || !wrapperform.$dirty"
109
- ng-hide="vm.isLoading"
110
- c8y-key-shortcut="Enter"
111
- >
112
- {{ 'Save' | translate }}
113
- </button>
114
- </div>
115
- </div>
116
-
117
- <div class="d-flex d-col">
118
- <div class="card-header separator">
119
- <div class="card-title" translate>Preview</div>
120
- </div>
121
- <div class="c8y-browser-mock d-flex d-col flex-grow">
122
- <div class="browser-container flex-grow d-flex d-col">
123
- <div class="browser-row">
124
- <div class="buttons">
125
- <span class="dot" style="background: #ed594a"></span>
126
- <span class="dot" style="background: #fdd800"></span>
127
- <span class="dot" style="background: #5ac05a"></span>
128
- </div>
129
- <div class="tab text-truncate">
130
- <img alt="{{ vm.title }}" src="{{ vm.favicon }}" />
131
- {{ vm.title }}
132
- </div>
133
- </div>
134
-
135
- <div class="browser-content flex-grow d-flex d-col">
136
- <iframe id="previewBrowser" title="Preview" class="flex-grow fit-w"></iframe>
137
- </div>
138
- </div>
139
- </div>
140
- </div>
141
- </div>
@@ -1 +0,0 @@
1
- function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function _slicedToArray(t,e){return _arrayWithHoles(t)||_iterableToArrayLimit(t,e)||_unsupportedIterableToArray(t,e)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(t,e){var r;if(t)return"string"==typeof t?_arrayLikeToArray(t,e):"Map"===(r="Object"===(r={}.toString.call(t).slice(8,-1))&&t.constructor?t.constructor.name:r)||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(t,e):void 0}function _arrayLikeToArray(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,o=Array(e);r<e;r++)o[r]=t[r];return o}function _iterableToArrayLimit(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var o,a,i,n,l=[],s=!0,g=!1;try{if(i=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;s=!1}else for(;!(s=(o=i.call(r)).done)&&(l.push(o.value),l.length!==e);s=!0);}catch(t){g=!0,a=t}finally{try{if(!s&&null!=r.return&&(n=r.return(),Object(n)!==n))return}finally{if(g)throw a}}return l}}function _arrayWithHoles(t){if(Array.isArray(t))return t}function ownKeys(e,t){var r,o=Object.keys(e);return Object.getOwnPropertySymbols&&(r=Object.getOwnPropertySymbols(e),t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),o.push.apply(o,r)),o}function _objectSpread(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ownKeys(Object(r),!0).forEach(function(t){_defineProperty(e,t,r[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ownKeys(Object(r)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))})}return e}function _defineProperty(t,e,r){return(e=_toPropertyKey(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function _toPropertyKey(t){t=_toPrimitive(t,"string");return"symbol"==_typeof(t)?t:t+""}function _toPrimitive(t,e){if("object"!=_typeof(t)||!t)return t;var r=t[Symbol.toPrimitive];if(void 0===r)return("string"===e?String:Number)(t);r=r.call(t,e||"default");if("object"!=_typeof(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}(()=>{function t(p){g.$inject=["$q","$http","c8yPermissions","gettextCatalog","c8yInventory","c8yBinary","c8yPublicOptions","c8yBrandingMapping"];var f="brandingVariables",t={title:p("General"),items:["html_title"]},e={title:p("Main logo"),items:["favicon","brand-logo-img","brand-logo-height"]},r={title:p("Navigator logo"),items:["appLogo","appLogo-height"]},o={title:p("Font"),key:"font.options",items:["font-family-sans-serif","headings-font-family","navigator-font-family","__import-font"]},a={title:p("Colors"),items:["brand-primary","brand-complementary","brand-dark","brand-light","text-color","link-color","body-background-color"]},i={title:p("Top bar"),items:["headerColor","header-text-color","header-hover-color"]},n={title:p("Navigator"),items:["navColor","navColorHeader","navigator-title-color","navigator-text-color","navigator-separator-color","navigator-color-active","navigator-active-bg"]},l={title:p("Misc"),items:["btn-border-radius-base"]},s={title:p("Cookie banner"),items:["cookieBannerDisabled","cookieBannerTitle","cookieBannerText","policyUrl"]},m=[t,e,r,o,a],u=[i,n,l,s];return{$get:g};function g(i,n,t,r,l,s,o,g){var a=["brand-logo-img","appLogo","favicon"];return{getSchema:c,getForm:function(){return i.when([_.map(m,e),_.map(u,e)])},getSchemaFormOptions:function(){return t.hasAnyRole(["ROLE_OPTION_MANAGEMENT_ADMIN"]).then(function(t){return{formDefaults:{readonly:!t}}})},getBranding:function(){var t=c(),e=l.list({type:f}),r=o.read();return i.all({schema:t,managedObjects:e,publicOptions:r}).then(function(t){var r=_.pick(t.managedObjects[0],["id","c8y_less_variables","binary_ref","cookieBanner"]),o=(_.isEmpty(r)&&!_.isEmpty(t.publicOptions)&&(r=(t=>{var r={},e=t.brandingCssVars,o=t.cookieBanner,a=t.extraCssUrls,i=t.faviconUrl,t=t.globalTitle,n=_.omitBy(_objectSpread(_objectSpread(_objectSpread({},e),o),{},{faviconUrl:i,globalTitle:t}),_.isUndefined),l=_.invert(g.cssVarMapping);return Object.keys(n).forEach(function(t){var e=(t=>{if("string"==typeof t){if(t.endsWith("%"))return Number(t.slice(0,-1));if(t.endsWith("px"))return Number(t.slice(0,-2))}return t})(n[t]);l[t]?r[l[t]]=e:r[t]=e}),a&&a.length&&(r["__import-font"]=a[0]),r["navigator-font-family"]&&(r["navigator-font-family"]=(e=>{var r,o=_.invert(g.fontFamilyCssVars);return Object.keys(o).forEach(function(t){e.includes(t)&&(r=o[t])}),r})(e["navigator-font-family"])),o=g.fileProperties.map(function(t){return t.key}),["appLogo-height","brand-logo-height","navigator-app-icon-size","btn-border-radius-base"].forEach(function(t){r[t]&&(r[t]=parseInt(r[t],10))}),{c8y_less_variables:_.omit(r,o),binary_ref:_.pick(r,o)}})(t.publicOptions)),[]);return _.each(a,function(e){var a,t;r.binary_ref&&r.binary_ref[e]&&((t=(t=r.binary_ref[e]).id?l.detail(t,{},{silentError:!0}):(a=(t=t).startsWith("url(")?t.slice(4,-1):t,n.get(a,{responseType:"blob"}).then(function(o){return s.readDataUri(o.data).then(function(t){var e=o.headers(),r=_slicedToArray(a.split("/").pop().split("?"),1)[0],r=new File([o.data],r,{type:e["content-type"]});return _.set(r,"fileSrc",t),_.set(r,"length",e["content-length"]),{data:r}})}))).then(function(t){r.c8y_less_variables[e]=t.data},function(){}),o.push(t.catch(function(){return!1})))}),i.all(o).then(_.constant(r))})},saveConfiguration:function(t,e){t={type:f,c8y_less_variables:t.c8y_less_variables,binary_ref:t.binary_ref||{}};e&&(t.id=e);return l.save(t)},saveBinary:function(e,t,r,o){if(_.isEqual(t,o)&&t.id)return i.when(o);var a={c8y_Branding:e,fileSrc:t.fileSrc};return s.upload(t,a).then(function(t){return r&&r[e]&&o&&s.removeBinary(r[e]),t.data})},BINARY_VARS:a};function c(){var t=p("Hex, rgb or rgba value. Default: {{defaultColor}}"),e={message:{cssColor:r.getString("Must be a valid CSS color value.")},validator:{cssColor:function(t){var e;return!!_.isEmpty(t)||((e=document.createElement("SPAN")).style.color=t,!_.isEmpty(e.style.color))}}};return i.when({type:"object",properties:{html_title:{title:r.getString("Title"),type:"string",description:r.getString("Title to be used in browser tab")},"brand-logo-img":{title:"".concat(r.getString("Brand logo")),type:"string",description:r.getString("Supported files: *.png, *.svg, *.jpg"),format:"file","x-schema-form":{type:"fileUpload",allowedFileType:[".png",".svg",".jpg"]}},favicon:{title:"".concat(r.getString("Favicon")),type:"string",description:r.getString("Supported files: *.ico"),format:"file","x-schema-form":{type:"fileUpload",allowedFileType:[".ico"]}},"brand-logo-height":{title:r.getString("Brand logo height"),type:"number",minimum:0,description:r.getString("Height for setting the right proportion for the logo: height / width x 100")},appLogo:{title:r.getString("Navigator logo"),type:"string",description:r.getString("Supported files: *.png, *.svg, *.jpg"),format:"file","x-schema-form":{type:"fileUpload",allowedFileType:[".png",".svg",".jpg"]}},"appLogo-height":{title:r.getString("Navigator logo height"),type:"number",minimum:0,description:r.getString("Height for setting the right proportion for the navigator logo: height / width x 100")},"font-family-sans-serif":{title:r.getString("Base font stack"),type:"string","x-schema-form":{placeholder:r.getString('e.g. "Lato", Arial, Verdana, sans-serif')}},"headings-font-family":{title:r.getString("Headings font stack"),type:"string","x-schema-form":{placeholder:r.getString('e.g. "Lato", Arial, Verdana, sans-serif')}},"navigator-font-family":{title:r.getString("Navigator font stack"),type:"string",default:"@font-family-sans-serif","x-schema-form":{type:"radios",enum:["@font-family-sans-serif","@headings-font-family"],titleMap:[{value:"@font-family-sans-serif",name:r.getString("Same as base font")},{value:"@headings-font-family",name:r.getString("Same as headings font")}]}},"__import-font":{title:r.getString("URL"),description:r.getString("A link to existing remote fonts (for example, Google Fonts)"),type:"string"},"brand-primary":{title:"".concat(r.getString("Main brand color")),type:"string",description:r.getString("Hex, rgb or rgba value."),"x-schema-form":{placeholder:r.getString("e.g.: #27b3ce"),validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"brand-complementary":{title:r.getString("Secondary brand color"),type:"string",description:r.getString(t,{defaultColor:d("brand-complementary")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"brand-dark":{title:r.getString("Dark brand color"),type:"string",description:r.getString(t,{defaultColor:d("brand-dark")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"brand-light":{title:r.getString("Light brand color"),type:"string",description:r.getString(t,{defaultColor:d("brand-light")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"text-color":{title:r.getString("Text color"),type:"string",description:r.getString(t,{defaultColor:d("text-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"link-color":{title:r.getString("Link color"),type:"string",description:r.getString(t,{defaultColor:d("link-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"body-background-color":{title:r.getString("Main background color"),type:"string",description:r.getString(t,{defaultColor:d("body-background-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},headerColor:{title:r.getString("Background color"),type:"string",description:r.getString(t,{defaultColor:d("headerColor")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"header-text-color":{title:r.getString("Text color"),type:"string",description:r.getString(t,{defaultColor:d("header-text-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"header-hover-color":{title:r.getString("Button hover text color"),type:"string",description:r.getString(t,{defaultColor:d("header-hover-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},navColor:{title:r.getString("Background color"),type:"string",description:r.getString(t,{defaultColor:d("navColor")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},navColorHeader:{title:r.getString("Logo wrapper background color"),type:"string",description:r.getString(t,{defaultColor:d("navColorHeader")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"navigator-title-color":{title:r.getString("Title color"),type:"string",description:r.getString(t,{defaultColor:d("navigator-title-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"navigator-text-color":{title:r.getString("Text and buttons color"),type:"string",description:r.getString(t,{defaultColor:d("navigator-text-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"navigator-separator-color":{title:r.getString("Separator line color"),type:"string",description:r.getString(t,{defaultColor:d("navigator-separator-color")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"navigator-color-active":{title:r.getString("Text color of current item in navigator"),type:"string",description:r.getString(t,{defaultColor:d("navigator-color-active")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"navigator-active-bg":{title:r.getString("Background color of current item in navigator"),type:"string",description:r.getString(t,{defaultColor:d("navigator-active-bg")}),"x-schema-form":{validationMessage:_objectSpread({},e.message),$validators:_objectSpread({},e.validator)}},"btn-border-radius-base":{title:r.getString("Button border-radius"),type:"number",minimum:0,maximum:20,description:r.getString("Value in px")},cookieBannerDisabled:{title:r.getString("Disable cookie banner"),type:"boolean"},cookieBannerTitle:{title:r.getString("Title"),type:"string","x-schema-form":{condition:"!model.cookieBannerDisabled"}},cookieBannerText:{title:r.getString("Text"),type:"string","x-schema-form":{type:"textarea",condition:"!model.cookieBannerDisabled"}},policyUrl:{title:r.getString("Link to privacy policy"),type:"string","x-schema-form":{placeholder:r.getString("e.g. https://example.com/mypolicy"),condition:"!model.cookieBannerDisabled"}}}})}function d(t){return{"brand-complementary":"#07b91A","text-color":"#444","link-color":"main brand color","body-background-color":"#FAFAFA","brand-dark":"#0B385B","brand-light":"#5FAEEC",headerColor:"#FFFFFF","header-text-color":"#49595B","header-hover-color":"main brand color",navColor:"#2c3637",navColorHeader:"transparent","navigator-title-color":"#FFFFFF","navigator-text-color":"#FAFAFA","navigator-separator-color":"#FAFAFA","navigator-color-active":"#FAFAFA","navigator-active-bg":"main brand color"}[t]}function e(t){var e={type:"collapse"};return _.assign(e,t),e.items=_.map(e.items,function(t){return{key:[t]}}),e.title=r.getString(e.title),e}}}t.$inject=["gettext"],angular.module("c8y.custom-branding").provider("c8yBrandingConfigurationUi",t)})();
@@ -1 +0,0 @@
1
- function _slicedToArray(n,t){return _arrayWithHoles(n)||_iterableToArrayLimit(n,t)||_unsupportedIterableToArray(n,t)||_nonIterableRest()}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _unsupportedIterableToArray(n,t){var r;if(n)return"string"==typeof n?_arrayLikeToArray(n,t):"Map"===(r="Object"===(r={}.toString.call(n).slice(8,-1))&&n.constructor?n.constructor.name:r)||"Set"===r?Array.from(n):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?_arrayLikeToArray(n,t):void 0}function _arrayLikeToArray(n,t){(null==t||t>n.length)&&(t=n.length);for(var r=0,e=Array(t);r<t;r++)e[r]=n[r];return e}function _iterableToArrayLimit(n,t){var r=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=r){var e,a,o,i,c=[],l=!0,u=!1;try{if(o=(r=r.call(n)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(e=o.call(r)).done)&&(c.push(e.value),c.length!==t);l=!0);}catch(n){u=!0,a=n}finally{try{if(!l&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}function _arrayWithHoles(n){if(Array.isArray(n))return n}(()=>{function n(r,i,n,e,t,a,o,p,c){var y=c.fileProperties,l=c.cookieBannerProperties,u=c.nonCssProperties;return{keyToCssVar:f,getFontFamilyCssVar:d,reset:function(){return s(),n.remove().then(function(){return i.remove()})},deploy:function(t){function r(n){_.assign(a,n)}function e(n){_.assign(o,n)}var a={},o={brandingCssVars:a};return r((e=>{var n=y.map(function(n){return n.key}).concat(u,l),a={};return _.keys(_.omit(e,n)).forEach(function(n){var t,r=e[n];_.isNumber(r)&&(t="px",/logo.*height/i.test(n)&&(t="%"),r="".concat(r).concat(t)),a[f(n)]=r}),a["navigator-font-family"]=d(a["navigator-font-family"]),a})(t)),e((n=>{var t,r={},e=(n.html_title&&(r.globalTitle=n.html_title),n["__import-font"]&&(t=n["__import-font"],r.extraCssUrls=[t]),_.pick(n,l));return e.cookieBannerDisabled&&l.forEach(function(n){e[n]=null}),r.cookieBanner=_.omit(e,"cookieBannerDisabled"),r})(t)),i.contextPath().then(function(n){return c=n,l=t,u=[],s={},f={},y.forEach(function(n){var t,r,e,a=n.key,o=n.cssVar,i=n.filename,n=n.option;l[a]&&(a=(n=>{for(var t=atob(n.split(",")[1]),n=_slicedToArray(n.split(",")[0].split(":")[1].split(";"),1)[0],r=new ArrayBuffer(t.length),e=new Uint8Array(r),a=0;a<t.length;a++)e[a]=t.charCodeAt(a);return new Blob([r],{type:n})})(l[a].fileSrc),e=a.type,t=_.find(["jpg","jpeg","svg","png","gif","webp","ico"],function(n){return new RegExp(n).test(e)}),r="?nocache=".concat(String(Math.random()).substr(2)),i="".concat(i,".").concat(t),o&&(s[o]="url(/apps/public/".concat(c,"/").concat(i).concat(r,")")),n&&(f[n]="/apps/public/".concat(c,"/").concat(i).concat(r)),u.push(p([a],i)))}),i.update(u).then(function(){return{cssVars:s,options:f}});var c,l,u,s,f}).then(function(n){var t=n.cssVars,n=n.options;r(t),e(n)}).then(function(){return n.save(o)}).then(s)},removeLegacyBrandedApplications:function(){return e.listByOwner().then(function(n){return n.filter(function(n){return n.manifest&&n.manifest.originalAppId&&n.manifest.originalActiveVersionId})}).then(function(n){return 0<n.length?t({status:"danger",title:o("Delete legacy branded applications"),body:o("Before applying new branding configuration, legacy branded applications must be deleted.")}).then(function(){return t=[],n.forEach(function(n){return t.push(e.remove(n))}),r.all(t);var t}).then(function(){return a.success(o("Legacy branded applications deleted."))},function(n){return a.danger(n)}):r.resolve()})}};function s(){window.localStorage.removeItem("OPTIONS")}function f(n){return c.cssVarMapping[n]||_.kebabCase(n)}function d(n){var t=c.fontFamilyCssVars;return"var(--".concat(t[n],")")}}n.$inject=["$q","c8yUiAssets","c8yPublicOptions","c8yApplication","c8yModal","c8yAlert","gettext","createFile","c8yBrandingMapping"],angular.module("c8y.custom-branding").factory("c8yBrandingDeploy",n)})();
@@ -1 +0,0 @@
1
- (()=>{function e(n,i,e,t,o,r){var a,c=this,s={generate:{title:e("Create applications"),flow:["beforeGenerate"],lastStep:"generateComplete",expectedDuration:120},preview:{title:e("Preview branding"),lastStep:"selectPreviewApp",init:function(){r.current().then(function(e){c.tenant=e.name}),t.preview().then(u)},flow:["waiting"],expectedDuration:15}};function l(){return t.state().then(u)}function u(e){var t=c.state;c.state=e,t&&t.RUNNING&&!e.RUNNING&&(0||(c.progress=100),i.cancel(c.fakeProgress),n(function(){return a.goTo(c.lastStep)},300)),t&&t.WAITING&&e.RUNNING&&(a.goTo("executing"),t=c.expectedDuration,t*=10,c.progress=0,c.fakeProgress=i(function(){c.progress+=1},t,100)),(e.RUNNING||e.WAITING)&&n(l,1e3)}_.assign(c,{$onInit:function(){var e=_.get(c,"resolve.process"),e=s[e];e&&(_.assign(c,_.pick(e,["title","lastStep","flow","expectedDuration"])),e.init)&&e.init();o.list().then(function(e){return _.filter(e,function(e){return"MARKET"===e.availability&&"management"===e.owner.tenant.id&&"HOSTED"===e.type&&!0===e.manifest._webpaas})}).then(function(e){c.applications=e})},generate:function(){a.goTo("waiting"),t.update().then(u)},setWizardController:function(e){a=e},$onDestroy:function(){i.cancel(c.fakeProgress)}})}e.$inject=["$timeout","$interval","gettext","c8yBrandingConfiguration","c8yApplication","c8yTenant"],angular.module("c8y.custom-branding").component("c8yBrandingProcessExecution",{templateUrl:":::PLUGIN_PATH:::/customBranding/brandingProcessExecution.html",controllerAs:"vm",controller:e,bindings:{modalInstance:"<",resolve:"<"}})})();
@@ -1,120 +0,0 @@
1
- <c8y-wizard
2
- on-dismiss="vm.modalInstance.dismiss()"
3
- on-close="vm.finishProcess(path)"
4
- get-controller="vm.setWizardController(controller)"
5
- initial-flow="vm.flow"
6
- >
7
- <header class="text-white">
8
- <div style="font-size: 62px;">
9
- <span c8y-icon="paint-brush"></span>
10
- </div>
11
- <h4 class="text-uppercase m-0"
12
- style="letter-spacing: 0.15em;"
13
- >
14
- {{ vm.title | translate }}
15
- </h4>
16
- </header>
17
-
18
- <steps>
19
- <c8y-wizard-step step-id="waiting">
20
- <div style="font-size:6em; opacity:0.5" class="text-center p-24">
21
- <span c8y-icon="spinner" class="icon-spin"></span>
22
- </div>
23
- </c8y-wizard-step>
24
-
25
- <c8y-wizard-step step-id="executing">
26
- <div style="padding:30px 20px">
27
- <p class="text-center">
28
- <strong translate>Process is being executed</strong>
29
- </p>
30
- <div class="progress">
31
- <div
32
- class="progress-bar active progress-bar-striped"
33
- role="progressbar"
34
- aria-valuenow="{{ vm.progress }}"
35
- aria-valuemin="0"
36
- aria-valuemax="100"
37
- style="min-width: 2em;"
38
- ng-style="{width: vm.progress + '%'}"
39
- >
40
- <span>{{ vm.progress | number: 0 }}%</span>
41
- </div>
42
- </div>
43
- </div>
44
- </c8y-wizard-step>
45
-
46
- <c8y-wizard-step step-id="selectPreviewApp">
47
- <p class="text-center p-8" translate>
48
- Select the application you would like to preview.
49
- </p>
50
-
51
- <div class="c8y-wizard-list-nav">
52
- <a
53
- class="list-group-item text-truncate"
54
- target="_new"
55
- ng-repeat="app in vm.applications"
56
- ng-href="/apps/{{ app.contextPath }}?preview=branding_{{ vm.tenant }}Branding"
57
- >
58
- <c8y-app-icon app="app" class="app-icon"></c8y-app-icon>
59
- <span ng-bind="app | humanizeAppName"></span>
60
- </a>
61
- </div>
62
-
63
- <div class="c8y-wizard-footer">
64
- <button
65
- title="{{ 'Close' | translate }}"
66
- class="btn btn-default"
67
- ng-click="vm.modalInstance.dismiss()"
68
- translate
69
- >
70
- Close
71
- </button>
72
- </div>
73
- </c8y-wizard-step>
74
-
75
- <c8y-wizard-step step-id="beforeGenerate">
76
- <p class="text-center p-8" translate>
77
- You are about to create branded versions of standard applications. This process takes up to 2 minutes.
78
- </p>
79
- <div class="c8y-wizard-footer">
80
- <button
81
- title="{{ 'Close' | translate }}"
82
- class="btn btn-default"
83
- ng-click="vm.modalInstance.dismiss()"
84
- translate
85
- >
86
- Close
87
- </button>
88
- <button
89
- title="{{ 'Create' | translate }}"
90
- class="btn btn-default"
91
- ng-click="vm.generate()"
92
- translate
93
- >
94
- Create
95
- </button>
96
- </div>
97
- </c8y-wizard-step>
98
-
99
- <c8y-wizard-step step-id="generateComplete">
100
- <div class="text-center text-success p-16"
101
- style="font-size:6em; opacity:0.5"
102
- >
103
- <span c8y-icon="check-circle-o"></span>
104
- </div>
105
- <p class="text-center p-8" translate>
106
- Standard applications created.
107
- </p>
108
- <div class="c8y-wizard-footer">
109
- <button
110
- title="{{ 'Done' | translate }}"
111
- class="btn btn-default"
112
- ng-click="vm.modalInstance.dismiss()"
113
- translate
114
- >
115
- Done
116
- </button>
117
- </div>
118
- </c8y-wizard-step>
119
- </steps>
120
- </c8y-wizard>
@@ -1 +0,0 @@
1
- angular.module("c8y.custom-branding",["c8y.ui-assets"]);
@@ -1 +0,0 @@
1
- (()=>{var _;try{_=!__WEBPACK__}catch(a){_=!1}angular.module("c8y.custom-branding").value("USE_BRANDING_MICROSERVICE",_)})();
@@ -1 +0,0 @@
1
- angular.module("c8y.ui-assets",[]);
@@ -1 +0,0 @@
1
- (()=>{function n(n,t,i,o){var e="public-options";return{save:function(t){var e=r();return c().then(function(n){n=Object.assign(n,t),n=[(n=>(n=JSON.stringify(n),n=new Blob([n],{type:"application/json"}),o([n],"options.json")))(_.pickBy(n,function(n){return!_.isEmpty(n)}))];return i.update(e,n)})},read:c,remove:function(){var n=r();return i.remove(n)}};function r(){var n=e;return{name:n,contextPath:n,description:t("Application containing public options used by branding."),key:"".concat(n,"-key"),type:"HOSTED",manifest:{noAppSwitcher:!0}}}function c(){return n.get("/apps/public/".concat(e,"/options.json"),{silentError:!0}).then(function(n){return n.data},function(){return{}})}}n.$inject=["$http","gettext","c8yStaticAssets","createFile"],angular.module("c8y.ui-assets").factory("c8yPublicOptions",n)})();
@@ -1 +0,0 @@
1
- (()=>{function n(e,r,i,u,c){var a=function(t){return function(){var n=0<arguments.length&&void 0!==arguments[0]?arguments[0]:[];return r.zipFiles(n).then(function(n){return c([n],"static-assets.zip")})}(1<arguments.length&&void 0!==arguments[1]?arguments[1]:[]).then(function(n){return u.uploadArchive(t,n).then(function(n){return n.data})}).then(function(n){return u.setActiveArchive(t,n)})};return{get:o,update:function(n,t){return o(n).then(function(n){return a(n,t)})},remove:function(t){return u.listByOwner().then(function(n){n=_.find(n,_.pick(t,["contextPath"]));return n&&u.remove(n)})}};function o(n){return u.listByOwner().then((t=n,function(n){return _.find(n,_.pick(t,["contextPath"]))||(n=t,e.all({currentTenant:i.current(),newApp:u.create(n).then(function(n){return n.data})}).then(function(n){var t=n.newApp;return i.addApplication({id:n.currentTenant.name},t).then(function(){return t})}))}));var t}}n.$inject=["$q","c8yZip","c8yTenant","c8yApplication","createFile"],angular.module("c8y.ui-assets").factory("c8yStaticAssets",n)})();
@@ -1 +0,0 @@
1
- (()=>{function t(n,t,e){return{contextPath:c,update:function(n){return r().then(function(t){return e.update(t,n)})},remove:function(){return r().then(function(t){return e.remove(t)})}};function c(){return t.current().then(function(t){return"ui-assets-".concat(t.name)})}function r(){return c().then(function(t){return{name:t,contextPath:t,description:n("Application containing static assets used by branding."),key:"".concat(t,"-key"),type:"HOSTED",manifest:{noAppSwitcher:!0}}})}}t.$inject=["gettext","c8yTenant","c8yStaticAssets"],angular.module("c8y.ui-assets").factory("c8yUiAssets",t)})();
@@ -1 +0,0 @@
1
- (()=>{function e(t,n,o,r,i,e,a,c,s,u){var l=this;function f(){e.current(!0).then(function(e){t.hasEmail=!!e.email,l.hasEmail=t.hasEmail,e.email||a.info(s("Provide your email address in the user settings to use the export functionality."))}),t.canScheduleExport=n.has("smartRulesSvc"),o.list().then(g)}function g(e){t.rows=_(e).sortBy("name").map(function(e){return{config:e,selected:!1}}).value(),t.paging=e.paging}function p(){return _(t.rows).filter("selected").map("config").flatten().value()}_.assign(l,{getSelectedConfigs:p}),_.assign(t,{rows:[],add:function(){i.path("/export/new")},detail:function(e){i.path("/export/".concat(e.id))},clone:function(e){i.path("/export/".concat(e.id,"/clone"))},remove:function(e){c({title:s("Delete configuration"),body:u.getString('You are about to delete the configuration "{{name}}". Do you want to proceed?',e),status:"danger",size:"sm",labels:{ok:s("Delete")}}).then(function(){return o.remove(e)}).then(f)},runExport:function(){var e=t.getSelectedConfigs();return r.requestExport(_.map(e,"id")).then(function(){a.success(s("Export request accepted, you will receive an email."))})},getSelectedConfigs:p,refresh:function(){t.paging.refresh().then(g)},scheduleExport:function(e){var t=n.get("smartRulesSvc");return o.getSmartRuleDefaults(e).then(function(e){return t.createInstanceWithUIByName("sendExportViaEmail",e)})}}),f()}e.$inject=["$scope","$injector","exportConfig","exportService","$location","c8yUser","c8yAlert","c8yModal","gettext","gettextCatalog"],angular.module("c8y.cockpit.export").controller("exportListCtrl",e)})();