http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js new file mode 100644 index 0000000..55f58d1 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/services/nf-registry.service.js @@ -0,0 +1,981 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var covalentCore = require('@covalent/core'); + +function filterData(data, searchTerm, ignoreCase) { + var field = ''; + if (searchTerm.indexOf(":") > -1) { + field = searchTerm.split(':')[0].trim(); + searchTerm = searchTerm.split(':')[1].trim(); + } + var filter = searchTerm ? (ignoreCase ? searchTerm.toLowerCase() : searchTerm) : ''; + + if (filter) { + data = data.filter(function (item) { + var res = Object.keys(item).find(function (key) { + if (field.indexOf(".") > -1) { + var objArray = field.split("."); + var obj = item; + var arrayLength = objArray.length; + for (var i = 0; i < arrayLength; i++) { + try { + obj = obj[objArray[i]]; + } catch (e) { + return false; + } + } + var preItemValue = ('' + obj); + var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue; + return itemValue.indexOf(filter) > -1; + } else { + if (key !== field && field !== '') { + return false; + } + var preItemValue = ('' + item[key]); + var itemValue = ignoreCase ? preItemValue.toLowerCase() : preItemValue; + return itemValue.indexOf(filter) > -1; + } + }); + return !(typeof res === 'undefined'); + }); + } + return data; +}; + +function NfRegistryService(TdDataTableService) { + this.registries = []; + this.registry = {}; + this.bucket = {}; + this.buckets = []; + this.droplet = {}; + this.droplets = []; + this.certifications = []; + this.user = {}; + this.users = []; + this.alerts = []; + this.explorerViewType = ''; + this.perspective = ''; + this.breadCrumbState = 'out'; + this.dataTableService = TdDataTableService; + + this.filteredDroplets = []; + + this.dropletColumns = [ + {name: 'name', label: 'Name', sortable: true}, + {name: 'updated', label: 'Updated', sortable: true} + ]; + + this.autoCompleteDroplets = []; + this.dropletsSearchTerms = []; + + this.filteredBuckets = []; + + this.bucketColumns = [ + {name: 'name', label: 'Bucket Name', sortable: true, tooltip: 'Sort Buckets by name.'} + ]; + + this.allBucketsSelected = false; + this.autoCompleteBuckets = []; + this.bucketsSearchTerms = []; + + this.filteredUsers = []; + + this.userColumns = [ + {name: 'status', label: 'Status', sortable: true, tooltip: 'User Status.', width: 18}, + {name: 'name', label: 'Name', sortable: true, tooltip: 'User name.', width: 30}, + {name: 'provider', label: 'Provider', sortable: true, tooltip: 'Authentication provider.', width: 30} + ]; + + this.allUsersSelected = false; + this.autoCompleteUsers = []; + this.selectedUsers = []; + + this.usersSearchTerms = []; + this.usersFromRow = 1; + this.usersCurrentPage = 1; + this.usersPageSize = 5; + this.usersPageCount = 0; + + this.filteredCertifications = []; + + this.certificationColumns = [ + {name: 'name', label: 'Label Name', sortable: true, tooltip: 'Sort Certifications by name.', width: 40}, + {name: 'usage', label: 'Usage', sortable: true, tooltip: 'Sort Certifications by usage.', width: 30}, + {name: 'badge', label: 'Badge Design', sortable: false, tooltip: 'Certification badge.', width: 30} + ]; + + this.autoCompleteCertifications = []; + this.certificationsSearchTerms = []; +}; + +NfRegistryService.prototype = { + constructor: NfRegistryService, + + deleteDroplet: function (id) { + //TODO: REST call to API to delete droplet by id. + }, + + deleteBucket: function (id) { + //TODO: REST call to API to delete bucket by id. + }, + + deleteUser: function (id) { + //TODO: REST call to API to delete user by id. + }, + + suspendUser: function (id) { + //TODO: REST call to API to suspend user by id. + }, + + getRegistries: function () { + //TODO: leverage $http service to make call to nifi registry api. For now just return mock data... + var self = this; + var date = new Date(); + return new Promise( + function (resolve) { + setTimeout( + function () { + resolve(self.registries = [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090', + name: "Nifi Registry", + users: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090', + name: 'Scotty 2 Hotty', + status: 'authorized', + provider: 'Friendly LDAP Provider', + type: 'user', + activities: [{ + id: '25fd6vv87-3249-0001-05g6-4d4767890765', + description: 'Saved something...', + created: date.setDate(date.getDate() - 1), + updated: new Date() + }], + actions: [{ + 'name': 'details', + 'icon': 'fa fa-info-circle', + 'tooltip': 'User Details', + 'type': 'sidenav', + + }, { + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage User Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete User' + }, { + 'name': 'Suspend', + 'icon': 'fa fa-ban', + 'tooltip': 'Suspend User' + }] + }, { + id: '25fd6vv87-3249-0001-05g6-4d4767890765', + name: 'Group 1', + status: 'suspended', + provider: 'IOAT', + type: 'group', + actions: [{ + 'name': 'details', + 'icon': 'fa fa-info-circle', + 'tooltip': 'User Details', + 'type': 'sidenav' + }, { + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage User Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete User' + }, { + 'name': 'Reauthorize', + 'icon': 'fa fa-check-circle', + 'tooltip': 'Reauthorize User' + }] + }, { + id: '98f6cc59-0156-1000-06b4-2b0810089090', + name: 'G$', + status: 'authorized', + provider: 'Friendly LDAP Provider', + type: 'user', + actions: [{ + 'name': 'details', + 'icon': 'fa fa-info-circle', + 'tooltip': 'User Details', + 'type': 'sidenav' + }, { + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage User Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete User' + }, { + 'name': 'Suspend', + 'icon': 'fa fa-ban', + 'tooltip': 'Suspend User' + }] + }, { + id: '65fd6vv87-3249-0001-05g6-4d4767890765', + name: 'Group 2', + status: 'suspended', + provider: 'IOAT', + type: 'group', + actions: [{ + 'name': 'details', + 'icon': 'fa fa-info-circle', + 'tooltip': 'User Details', + 'type': 'sidenav' + }, { + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage User Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete User' + }, { + 'name': 'Reauthorize', + 'icon': 'fa fa-check-circle', + 'tooltip': 'Reauthorize User' + }] + }], + buckets: [{ + id: '25fd6vv87-3549-0001-05g6-4d4567890765', + name: "My Flows", + actions: [{ + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage Bucket Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete Bucket' + }], + droplets: [{ + id: '23f6cc59-0156-1000-09b4-2b0610089090', + name: "Security_Dev_Ops", + displayName: 'Security Dev Ops', + type: 'Data Flow', + sublabel: 'Some info', + updated: new Date(), + description: 'This is the most secure flow ever!', + versions: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090', + revision: '1', + dependentFlows: [{ + id: '25fd6vv87-3549-0001-05g6-4d4567890765' + }], + author: '2Hot', + comment: 'delete ListenHttp', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }, { + id: '25fd6vv87-3549-0001-05g6-4d4567890765', + revision: '2', + dependentFlows: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090' + }], + author: '2Hot', + comment: 'added Labels for better description of groups of processors', + created: new Date(), + updated: new Date() + }], + flows: [], + extensions: [], + assets: [], + actions: [{ + 'name': 'Delete', + 'icon': 'fa fa-close', + 'tooltip': 'Delete User' + }] + }] + }, { + id: '23f6cc59-0156-1000-09b4-2b0810089080', + name: "Development Flows", + droplets: [{ + id: '23f6cc59-0156-1000-09b4-2b0610089090', + name: "Fraud Detection Flow", + displayName: 'Fraud Detection Flow', + type: 'Data Flow', + sublabel: 'A sublabel', + updated: new Date(date.setDate(date.getDate() - 2)), + description: 'This flow detects fraud!', + versions: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090', + revision: '1', + dependentFlows: [{ + id: '25fd6vv87-3549-0001-05g6-4d4567890765' + }], + author: 'G$', + comment: 'added funnel', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }, { + id: '25fd6vv87-3549-0001-05g6-4d4567890765', + revision: '2', + dependentFlows: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090' + }], + author: '2Hot', + comment: 'added Execute script', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }, { + id: '77fd6vv87-3549-0001-05g6-4d4567890765', + revision: '3', + dependentFlows: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090' + }], + author: 'Payne', + comment: 'removed Execute script', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }, { + id: '96fd6vv87-3549-0001-05g6-4d4567890765', + revision: '4', + dependentFlows: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090' + }], + author: 'G$', + comment: 'add Execute script', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }], + flows: [], + extensions: [], + assets: [], + actions: [{ + 'name': 'Delete', + 'icon': 'fa fa-close' + }] + }, { + id: '59f6cc23-0156-1000-09b4-2b0610089090', + name: "Cyber Security", + displayName: 'Cyber Security', + type: 'Data Flow', + sublabel: 'A sublabel', + updated: new Date(date.setDate(date.getDate() - 1)), + description: 'This is the most cyber secure flow ever!', + versions: [{ + id: '23f6cc59-0156-1000-06b4-2b0810089090', + revision: '1', + dependentFlows: [{ + id: '25fd6vv87-3549-0001-05g6-4d4567890765' + }], + author: 'G$', + comment: 'added funnel', + created: new Date(date.setDate(date.getDate() - 1)), + updated: new Date() + }], + flows: [], + extensions: [], + assets: [], + actions: [{ + 'name': 'Delete', + 'icon': 'fa fa-close', + 'tooltip': 'Delete User' + }] + }], + actions: [{ + 'name': 'permissions', + 'icon': 'fa fa-key', + 'tooltip': 'Manage Bucket Policies', + 'type': 'sidenav' + }, { + 'name': 'Delete', + 'icon': 'fa fa-trash', + 'tooltip': 'Delete Bucket' + }] + }] // some data model for the contents of a registry + }]) + }, 0); + } + ); + }, + + getRegistry: function (registryId) { + return this.getRegistries().then( + function (registries) { + return registries.find( + function (registry) { + if (registryId === registry.id) { + return registry; + } + }); + }); + }, + + getDroplet: function (registryId, bucketId, dropletId) { + return this.getDroplets(registryId, bucketId, dropletId).then( + function (droplets) { + return droplets[0]; + }); + }, + + getDroplets: function (registryIds, bucketIds, dropletIds) { + var self = this; + return this.getRegistries().then( + function (registries) { + var buckets = []; + + registries.find( + function (registry) { + if (registryIds === undefined || registryIds.indexOf(registry.id) >= 0) { + registry.buckets.find( + function (bucket) { + if (bucketIds === undefined || bucketIds.indexOf(bucket.id) >= 0) { + buckets.push(bucket); + } + }); + } + }); + + var droplets = []; + + buckets.find( + function (bucket) { + bucket.droplets.find( + function (droplet) { + if (dropletIds === undefined || dropletIds.indexOf(droplet.id) >= 0) { + droplets.push(droplet); + } + }); + }); + + return droplets; + }); + + }, + + isDropletFilterChecked: function (term) { + return (this.dropletsSearchTerms.indexOf(term) > -1); + }, + + getDropletTypeCount: function (type) { + return this.filteredDroplets.filter(function (droplet) { + return droplet.type === type; + }).length; + }, + + getDropletCertificationCount: function (certification) { + return this.filteredDroplets.filter(function (droplet) { + return Object.keys(droplet).find(function (key) { + if (key === certification && droplet[certification].type === 'certification') { + return droplet; + } + }); + }).length; + }, + + getSortByLabel: function () { + var sortByColumn; + var arrayLength = this.dropletColumns.length; + for (var i = 0; i < arrayLength; i++) { + if (this.dropletColumns[i].active === true) { + sortByColumn = this.dropletColumns[i]; + break; + } + } + + if (sortByColumn) { + var label = ''; + switch (sortByColumn.label) { + case 'Updated': + label = (sortByColumn.sortOrder === 'ASC') ? 'Newest (update)' : 'Oldest (update)'; + break; + case 'Name': + label = (sortByColumn.sortOrder === 'ASC') ? 'Name (a - z)' : 'Name (z - a)'; + break; + } + return label; + } + }, + + generateSortMenuLabels: function (col) { + var label = ''; + switch (col.label) { + case 'Updated': + label = (col.sortOrder !== 'ASC') ? 'Newest (update)' : 'Oldest (update)'; + break; + case 'Name': + label = (col.sortOrder !== 'ASC') ? 'Name (a - z)' : 'Name (z - a)'; + break; + } + return label; + }, + + sortDroplets: function (sortEvent, column) { + if (column.sortable === true) { + // toggle column sort order + var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; + this.filterDroplets(column.name, sortOrder); + this.activeDropletColumn = column; + //only one column can be actively sorted so we reset all to inactive + this.dropletColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + column.active = true; + } + }, + + dropletsSearchRemove: function (searchTerm) { + this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder); + }, + + dropletsSearchAdd: function (searchTerm) { + this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder); + }, + + toggleDropletsFilter: function (searchTerm) { + var applySearchTerm = true; + // check if the search term is already applied and remove it if true + if (this.dropletsSearchTerms.length > 0) { + var arrayLength = this.dropletsSearchTerms.length; + for (var i = 0; i < arrayLength; i++) { + var index = this.dropletsSearchTerms.indexOf(searchTerm); + if (index > -1) { + this.dropletsSearchTerms.splice(index, 1); + applySearchTerm = false; + } + } + } + + // if we just removed the search term do NOT apply it again + if (applySearchTerm) { + this.dropletsSearchTerms.push(searchTerm); + } + + this.filterDroplets(this.activeDropletColumn.name, this.activeDropletColumn.sortOrder); + }, + + filterDroplets: function (sortBy, sortOrder) { + // if `sortOrder` is `undefined` then use 'ASC' + if (sortOrder === undefined) { + sortOrder = 'ASC' + } + // if `sortBy` is `undefined` then find the first sortable column in this.dropletColumns + if (sortBy === undefined) { + var arrayLength = this.dropletColumns.length; + for (var i = 0; i < arrayLength; i++) { + if (this.dropletColumns[i].sortable === true) { + sortBy = this.dropletColumns[i].name; + this.activeDropletColumn = this.dropletColumns[i]; + //only one column can be actively sorted so we reset all to inactive + this.dropletColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + this.dropletColumns[i].active = true; + this.dropletColumns[i].sortOrder = sortOrder; + break; + } + } + } + + var newData = this.droplets; + + for (var i = 0; i < this.dropletsSearchTerms.length; i++) { + newData = filterData(newData, this.dropletsSearchTerms[i], true, this.activeDropletColumn.name); + } + + newData = this.dataTableService.sortData(newData, sortBy, sortOrder); + this.filteredDroplets = newData; + this.getAutoCompleteDroplets(); + }, + + getAutoCompleteDroplets: function () { + var self = this; + this.autoCompleteDroplets = []; + this.dropletColumns.forEach(function (c) { + return self.filteredDroplets.forEach(function (r) { + return (r[c.name.toLowerCase()]) ? self.autoCompleteDroplets.push(r[c.name.toLowerCase()].toString()) : ''; + }) + }); + }, + + getBucket: function (registryId, bucketId) { + return this.getBuckets(registryId, bucketId).then( + function (buckets) { + return buckets[0]; + }); + }, + + getBuckets: function (registryIds, bucketIds) { + var self = this; + return this.getRegistries().then( + function (registries) { + var buckets = []; + + registries.find( + function (registry) { + if (registryIds === undefined || registryIds.indexOf(registry.id) >= 0) { + registry.buckets.find( + function (bucket) { + if (bucketIds === undefined || bucketIds.indexOf(bucket.id) >= 0) { + buckets.push(bucket); + } + }); + } + }); + + return buckets; + }); + + }, + + filterBuckets: function (sortBy, sortOrder) { + // if `sortOrder` is `undefined` then use 'ASC' + if (sortOrder === undefined) { + sortOrder = 'ASC' + } + + // if `sortBy` is `undefined` then find the first sortable column in this.bucketColumns + if (sortBy === undefined) { + var arrayLength = this.bucketColumns.length; + for (var i = 0; i < arrayLength; i++) { + if (this.bucketColumns[i].sortable === true) { + sortBy = this.bucketColumns[i].name; + this.activeBucketColumn = this.bucketColumns[i]; + //only one column can be actively sorted so we reset all to inactive + this.bucketColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + this.bucketColumns[i].active = true; + this.bucketColumns[i].sortOrder = sortOrder; + break; + } + } + } + + var newData = this.buckets; + + for (var i = 0; i < this.bucketsSearchTerms.length; i++) { + newData = filterData(newData, this.bucketsSearchTerms[i], true, this.activeBucketColumn.name); + } + + newData = this.dataTableService.sortData(newData, sortBy, sortOrder); + this.filteredBuckets = newData; + this.getAutoCompleteBuckets(); + }, + + getAutoCompleteBuckets: function () { + var self = this; + this.autoCompleteBuckets = []; + this.bucketColumns.forEach(function (c) { + return self.filteredBuckets.forEach(function (r) { + return (r[c.name.toLowerCase()]) ? self.autoCompleteBuckets.push(r[c.name.toLowerCase()].toString()) : ''; + }); + }); + }, + + sortBuckets: function (sortEvent, column) { + if (column.sortable === true) { + // toggle column sort order + var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; + this.filterBuckets(column.name, sortOrder); + this.activeBucketsColumn = column; + //only one column can be actively sorted so we reset all to inactive + this.bucketColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + column.active = true; + } + }, + + bucketsSearchRemove: function (searchTerm) { + this.filterDroplets(this.activeBucketsColumn.name, this.activeBucketsColumn.sortOrder); + }, + + bucketsSearchAdd: function (searchTerm) { + this.filterDroplets(this.activeBucketsColumn.name, this.activeBucketsColumn.sortOrder); + }, + + allFilteredBucketsSelected: function () { + this.filteredBuckets.forEach(function (c) { + if (c.checked === undefined || c.checked === false) { + return false; + } + }); + + return true; + }, + + toggleBucketSelect: function (row) { + if (this.allFilteredBucketsSelected()) { + this.allBucketsSelected = true; + } else { + this.allBucketsSelected = false; + } + }, + + getCertification: function (registryId, certificatonId) { + return this.getCertifications(registryId, certificatonId).then( + function (certificatons) { + return certificatons[0]; + }); + }, + getCertifications: function (registryIds, certificatonIds) { + var self = this; + return this.getRegistries().then( + function (registries) { + var certificatons = []; + + registries.find( + function (registry) { + if (registryIds === undefined || registryIds.indexOf(registry.id) >= 0) { + registry.certifications.find( + function (certificaton) { + if (certificatonIds === undefined || certificatonIds.indexOf(certificaton.id) >= 0) { + certificatons.push(certificaton); + } + }); + } + }); + + return certificatons; + }); + + }, + + filterCertifications: function (sortBy, sortOrder) { + // if `sortOrder` is `undefined` then use 'ASC' + if (sortOrder === undefined) { + sortOrder = 'ASC' + } + + // if `sortBy` is `undefined` then find the first sortable column in this.bucketColumns + if (sortBy === undefined) { + var arrayLength = this.bucketColumns.length; + for (var i = 0; i < arrayLength; i++) { + if (this.bucketColumns[i].sortable === true) { + sortBy = this.bucketColumns[i].name; + this.activeBucketColumn = this.bucketColumns[i]; + //only one column can be actively sorted so we reset all to inactive + this.bucketColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + this.bucketColumns[i].active = true; + this.bucketColumns[i].sortOrder = sortOrder; + break; + } + } + } + + var newData = this.certifications; + + for (var i = 0; i < this.certificationsSearchTerms.length; i++) { + newData = filterData(newData, this.certificationsSearchTerms[i], true, this.activeBucketColumn.name); + } + + newData = this.dataTableService.sortData(newData, sortBy, sortOrder); + this.filteredCertifications = newData; + this.getAutoCompleteCertifications(); + }, + + getAutoCompleteCertifications: function () { + var self = this; + this.autoCompleteCertifications = []; + this.bucketColumns.forEach(function (c) { + return self.filteredCertifications.forEach(function (r) { + return (r[c.name.toLowerCase()]) ? self.autoCompleteCertifications.push(r[c.name.toLowerCase()].toString()) : ''; + }); + }); + }, + + sortCertifications: function (sortEvent, column) { + if (column.sortable === true) { + // toggle column sort order + var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; + this.filterCertifications(column.name, sortOrder); + this.activeCertificationsColumn = column; + //only one column can be actively sorted so we reset all to inactive + this.bucketColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + column.active = true; + } + }, + + certificationsSearchRemove: function (searchTerm) { + this.filterDroplets(this.activeCertificationsColumn.name, this.activeCertificationsColumn.sortOrder); + }, + + certificationsSearchAdd: function (searchTerm) { + this.filterDroplets(this.activeCertificationsColumn.name, this.activeCertificationsColumn.sortOrder); + }, + + getUser: function (registryId, userId) { + return this.getUsers(registryId, userId).then( + function (users) { + return users[0]; + }); + }, + + getUsers: function (registryIds, userIds) { + var self = this; + return this.getRegistries().then( + function (registries) { + var users = []; + + registries.find( + function (registry) { + if (registryIds === undefined || registryIds.indexOf(registry.id) >= 0) { + registry.users.find( + function (user) { + if (userIds === undefined || userIds.indexOf(user.id) >= 0) { + users.push(user); + } + }); + } + }); + + return users; + }); + + }, + + sortUsers: function (sortEvent, column) { + if (column.sortable) { + var sortBy = column.name; + var sortOrder = column.sortOrder = (column.sortOrder === 'ASC') ? 'DESC' : 'ASC'; + this.filterUsers(sortBy, sortOrder); + + //only one column can be actively sorted so we reset all to inactive + this.userColumns.forEach(function (c) { + c.active = false; + }); + //and set this column as the actively sorted column + column.active = true; + } + }, + + usersSearchRemove: function (searchTerm) { + //only remove the first occurrence of the search term + var index = this.usersSearchTerms.indexOf(searchTerm); + if (index !== -1) { + this.usersSearchTerms.splice(index, 1); + } + this.usersCurrentPage = 1; + this.usersFromRow = 1; + this.usersPageSize = 1; + this.filterUsers(); + }, + + usersSearchAdd: function (searchTerm) { + this.usersSearchTerms.push(searchTerm); + this.usersCurrentPage = 1; + this.usersFromRow = 1; + this.usersPageSize = 1; + this.filterUsers(); + }, + + pageUsers: function (pagingEvent) { + this.usersFromRow = pagingEvent.fromRow; + this.usersCurrentPage = pagingEvent.page; + this.usersPageSize = pagingEvent.pageSize; + this.filterUsers(); + }, + + filterUsers: function (sortBy, sortOrder) { + if (this.allUsersSelected) { + this.toggleUsersSelectAll(); + } + this.deselectAllUsers(); + var newData = this.users; + + for (var i = 0; i < this.usersSearchTerms.length; i++) { + newData = filterData(newData, this.usersSearchTerms[i], true); + } + newData = this.dataTableService.sortData(newData, sortBy, sortOrder); + this.usersPageCount = newData.length; + newData = this.dataTableService.pageData(newData, this.usersFromRow, this.usersCurrentPage * this.usersPageSize); + this.filteredUsers = newData; + this.getAutoCompleteUsers(); + }, + + toggleUserSelect: function (row) { + if (this.allFilteredUsersSelected()) { + this.allUsersSelected = true; + } else { + this.allUsersSelected = false; + } + }, + + toggleUsersSelectAll: function () { + if (this.allUsersSelected) { + this.selectAllUsers(); + } else { + this.deselectAllUsers(); + } + }, + + selectAllUsers: function () { + this.filteredUsers.forEach(function (c) { + c.checked = true; + }); + }, + + deselectAllUsers: function () { + this.filteredUsers.forEach(function (c) { + c.checked = false; + }); + }, + allFilteredUsersSelected: function () { + var allFilteredUsersSelected = true; + this.filteredUsers.forEach(function (c) { + if (c.checked === undefined || c.checked === false) { + allFilteredUsersSelected = false; + } + }); + + return allFilteredUsersSelected; + }, + + getAutoCompleteUsers: function () { + var self = this; + this.autoCompleteUsers = []; + this.userColumns.forEach(function (c) { + self.filteredUsers.forEach(function (r) { + (r[c.name.toLowerCase()]) ? self.autoCompleteUsers.push(r[c.name.toLowerCase()].toString()) : ''; + }); + }); + }, + + //</editor-fold> + + setBreadcrumbState: function (state) { + this.breadCrumbState = state; + } +}; + +NfRegistryService.parameters = [covalentCore.TdDataTableService]; + +module.exports = NfRegistryService;
http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/systemjs-angular-loader.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/systemjs-angular-loader.js b/nifi-registry-web-ui/src/main/webapp/systemjs-angular-loader.js new file mode 100644 index 0000000..8e33bb5 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/systemjs-angular-loader.js @@ -0,0 +1,66 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var templateUrlRegex = /templateUrl\s*:(\s*['"`](.*?)['"`]\s*)/gm; +var stylesRegex = /styleUrls *:(\s*\[[^\]]*?\])/g; +var stringRegex = /(['`"])((?:[^\\]\\\1|.)*?)\1/g; + +module.exports.translate = function (load) { + if (load.source.indexOf('moduleId') != -1) return load; + + var url = document.createElement('a'); + url.href = load.address; + + var basePathParts = url.pathname.split('/'); + + basePathParts.pop(); + var basePath = basePathParts.join('/'); + + var baseHref = document.createElement('a'); + baseHref.href = this.baseURL; + baseHref = baseHref.pathname; + + if (!baseHref.startsWith('/base/')) { // it is not karma + basePath = basePath.replace(baseHref, ''); + } + + load.source = load.source + .replace(templateUrlRegex, function (match, quote, url) { + var resolvedUrl = url; + + if (url.startsWith('.')) { + resolvedUrl = basePath + url.substr(1); + } + + return 'templateUrl: "' + resolvedUrl + '"'; + }) + .replace(stylesRegex, function (match, relativeUrls) { + var urls = []; + + while ((match = stringRegex.exec(relativeUrls)) !== null) { + if (match[2].startsWith('.')) { + urls.push('"' + basePath + match[2].substr(1) + '"'); + } else { + urls.push('"' + match[2] + '"'); + } + } + + return "styleUrls: [" + urls.join(', ') + "]"; + }); + + return load; +}; http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js b/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js new file mode 100644 index 0000000..1d96854 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/systemjs.builder.config.js @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function (global) { + System.config({ + baseURL: "./webapp/", + paths: { + // paths serve as alias + 'npm:': './node_modules/' + }, + // map tells the System loader where to look for things + map: { + 'text': 'npm:systemjs-plugin-text/text.js', + 'app': 'webapp/', + + // jquery + 'jquery': 'npm:jquery/dist/jquery.min.js', + + // Angular + '@angular/core': 'npm:@angular/core/bundles/core.umd.js', + '@angular/common': 'npm:@angular/common/bundles/common.umd.js', + '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js', + '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js', + '@angular/http': 'npm:@angular/http/bundles/http.umd.js', + '@angular/router': 'npm:@angular/router/bundles/router.umd.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js', + '@angular/flex-layout': 'npm:@angular/flex-layout/bundles/flex-layout.umd.js', + '@angular/material': 'npm:@angular/material/bundles/material.umd.js', + '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.js', + '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.js', + '@angular/cdk/a11y': 'npm:@angular/cdk/bundles/cdk-a11y.umd.js', + '@angular/cdk/collections': 'npm:@angular/cdk/bundles/cdk-collections.umd.js', + '@angular/cdk/observers': 'npm:@angular/cdk/bundles/cdk-observers.umd.js', + '@angular/cdk/overlay': 'npm:@angular/cdk/bundles/cdk-overlay.umd.js', + '@angular/cdk/platform': 'npm:@angular/cdk/bundles/cdk-platform.umd.js', + '@angular/cdk/portal': 'npm:@angular/cdk/bundles/cdk-portal.umd.js', + '@angular/cdk/keycodes': 'npm:@angular/cdk/bundles/cdk-keycodes.umd.js', + '@angular/cdk/bidi': 'npm:@angular/cdk/bundles/cdk-bidi.umd.js', + '@angular/cdk/coercion': 'npm:@angular/cdk/bundles/cdk-coercion.umd.js', + '@angular/cdk/table': 'npm:@angular/cdk/bundles/cdk-table.umd.js', + '@angular/cdk/rxjs': 'npm:@angular/cdk/bundles/cdk-rxjs.umd.js', + '@angular/cdk/scrolling': 'npm:@angular/cdk/bundles/cdk-scrolling.umd.js', + '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.js', + '@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.js', + '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js', + + // needed to support gestures for angular material + 'hammerjs': 'npm:hammerjs/hammer.min.js', + + // Covalent + '@covalent/core': 'npm:@covalent/core/core.umd.js', + + // other libraries + 'rxjs': 'npm:rxjs', + 'moment': 'npm:moment', + 'angular2-moment': 'npm:angular2-moment', + 'switchMap': 'npm:rxjs/add/operator/switchMap', + 'zone.js': 'npm:zone.js/dist/zone.js', + 'core-js': 'npm:core-js/client/shim.min.js', + + // Fluid Design System + '@fluid-design-system/core': 'npm:@fluid-design-system/dist/platform/core/fluid-design-system.module.js', + '@fluid-design-system/dialogs': 'npm:@fluid-design-system/dist/platform/core/dialogs/fds-dialogs.module.js', + '@fluid-design-system/dialog-component': 'npm:@fluid-design-system/dist/platform/core/dialogs/fds-dialog.component.js', + '@fluid-design-system/dialog-service': 'npm:@fluid-design-system/dist/platform/core/dialogs/services/dialog.service.js', + '@fluid-design-system/confirm-dialog-component': 'npm:@fluid-design-system/dist/platform/core/dialogs/confirm-dialog/confirm-dialog.component.js', + + // Nifi Registry + 'nifi-registry/nf-registry.module.js': 'nf-registry.module.js', + 'nifi-registry/nf-registry.animations.js': 'nf-registry.animations.js', + 'nifi-registry/nf-registry.routes.js': 'nf-registry.routes.js', + 'nifi-registry/components/fluid-design-system/fds-demo.js': 'components/fluid-design-system/fds-demo.js', + 'nifi-registry/nf-registry.js': 'nf-registry.js', + 'nifi-registry/services/nf-registry.service.js': 'services/nf-registry.service.js', + 'nifi-registry/components/page-not-found/nf-registry-page-not-found.js': 'components/page-not-found/nf-registry-page-not-found.js', + 'nifi-registry/components/explorer/nf-registry-explorer.js': 'components/explorer/nf-registry-explorer.js', + 'nifi-registry/components/explorer/list/nf-registry-explorer-list-viewer.js': 'components/explorer/list/nf-registry-explorer-list-viewer.js', + 'nifi-registry/components/explorer/grid-list/nf-registry-explorer-grid-list-viewer.js': 'components/explorer/grid-list/nf-registry-explorer-grid-list-viewer.js', + 'nifi-registry/components/administration/nf-registry-administration.js': 'components/administration/nf-registry-administration.js', + 'nifi-registry/components/administration/general/nf-registry-general-administration.js': 'components/administration/general/nf-registry-general-administration.js', + 'nifi-registry/components/administration/users/nf-registry-users-administration.js': 'components/administration/users/nf-registry-users-administration.js', + 'nifi-registry/components/administration/users/add/nf-registry-add-user.js': 'components/administration/users/add/nf-registry-add-user.js', + 'nifi-registry/components/administration/users/details/nf-registry-user-details.js': 'components/administration/users/details/nf-registry-user-details.js', + 'nifi-registry/components/administration/users/permissions/nf-registry-user-permissions.js': 'components/administration/users/permissions/nf-registry-user-permissions.js', + 'nifi-registry/components/administration/workflow/buckets/permissions/nf-registry-bucket-permissions.js': 'components/administration/workflow/buckets/permissions/nf-registry-bucket-permissions.js', + 'nifi-registry/components/administration/workflow/nf-registry-workflow-administration.js': 'components/administration/workflow/nf-registry-workflow-administration.js', + 'nifi-registry/components/explorer/list/registry/nf-registry-list-viewer.js': 'components/explorer/list/registry/nf-registry-list-viewer.js', + 'nifi-registry/components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js': 'components/explorer/grid-list/registry/nf-registry-grid-list-viewer.js', + 'nifi-registry/components/explorer/list/registry/bucket/nf-registry-bucket-list-viewer.js': 'components/explorer/list/registry/bucket/nf-registry-bucket-list-viewer.js', + 'nifi-registry/components/explorer/grid-list/registry/bucket/nf-registry-bucket-grid-list-viewer.js': 'components/explorer/grid-list/registry/bucket/nf-registry-bucket-grid-list-viewer.js', + 'nifi-registry/components/explorer/list/registry/bucket/droplet/nf-registry-droplet-list-viewer.js': 'components/explorer/list/registry/bucket/droplet/nf-registry-droplet-list-viewer.js', + 'nifi-registry/components/explorer/grid-list/registry/bucket/droplet/nf-registry-droplet-grid-list-viewer.js': 'components/explorer/grid-list/registry/bucket/droplet/nf-registry-droplet-grid-list-viewer.js', + 'nifi-registry/components/explorer/list/registry/nf-registry-details-viewer.js': 'components/explorer/list/registry/nf-registry-details-viewer.js', + 'nifi-registry/components/explorer/list/registry/bucket/nf-registry-bucket-details-viewer.js': 'components/explorer/list/registry/bucket/nf-registry-bucket-details-viewer.js', + 'nifi-registry/components/explorer/list/registry/bucket/droplet/nf-registry-droplet-details-viewer.js': 'components/explorer/list/registry/bucket/droplet/nf-registry-droplet-details-viewer.js' + }, + // packages tells the System loader how to load when no filename and/or no extension + packages: { + 'app': { + defaultExtension: 'js', + meta: { + './*.js': { + loader: 'systemjs-angular-loader.js' + } + } + }, + 'systemjs-angular-loader.js': { + loader: false + }, + 'rxjs': { + defaultExtension: 'js' + }, + 'moment': { + main: './moment.js', + defaultExtension: 'js' + }, + 'angular2-moment': { + main: './index.js', + defaultExtension: 'js' + } + } + }); +})(this); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/systemjs.config.extras.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/systemjs.config.extras.js b/nifi-registry-web-ui/src/main/webapp/systemjs.config.extras.js new file mode 100644 index 0000000..e2a256a --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/systemjs.config.extras.js @@ -0,0 +1,27 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Add barrels and stuff + */ +(function (global) { + System.config({ + packages: { + // add packages here + } + }); +})(this); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/systemjs.spec.config.js ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/systemjs.spec.config.js b/nifi-registry-web-ui/src/main/webapp/systemjs.spec.config.js new file mode 100644 index 0000000..a9d72c6 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/systemjs.spec.config.js @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +(function (global) { + System.config({ + paths: { + // paths serve as alias + 'npm:': 'nifi-registry/node_modules/' + }, + // map tells the System loader where to look for things + map: { + 'text': 'npm:systemjs-plugin-text/text.js', + 'app': './webapp', + + // jquery + 'jquery': 'npm:jquery/dist/jquery.min.js', + + // Angular + '@angular/core': 'npm:@angular/core/bundles/core.umd.min.js', + '@angular/common': 'npm:@angular/common/bundles/common.umd.min.js', + '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.min.js', + '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.min.js', + '@angular/http': 'npm:@angular/http/bundles/http.umd.min.js', + '@angular/router': 'npm:@angular/router/bundles/router.umd.min.js', + '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.min.js', + '@angular/flex-layout': 'npm:@angular/flex-layout/bundles/flex-layout.umd.js', + '@angular/material': 'npm:@angular/material/bundles/material.umd.min.js', + '@angular/platform-browser/animations': 'npm:@angular/platform-browser/bundles/platform-browser-animations.umd.min.js', + '@angular/cdk': 'npm:@angular/cdk/bundles/cdk.umd.min.js', + '@angular/animations': 'npm:@angular/animations/bundles/animations.umd.min.js', + '@angular/animations/browser': 'npm:@angular/animations/bundles/animations-browser.umd.min.js', + '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.min.js', + + // Covalent + '@covalent/core': 'npm:@covalent/core/core.umd.js', + + // other libraries + 'rxjs': 'npm:rxjs', + 'switchMap': 'npm:rxjs/add/operator/switchMap', + + // Fluid Design System + '@fluid-design-system/core': 'npm:@fluid-design-system/dist/platform/core/fluid-design-system.module.js', + }, + // packages tells the System loader how to load when no filename and/or no extension + packages: { + app: { + defaultExtension: 'js', + meta: { + './*.js': { + loader: 'nifi-registry/systemjs-angular-loader.js' + } + } + }, + 'nifi-registry/systemjs-angular-loader.js': { + loader: false + }, + rxjs: { + defaultExtension: 'js' + } + } + }); +})(this); http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/_helperClasses.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/_helperClasses.scss b/nifi-registry-web-ui/src/main/webapp/theming/_helperClasses.scss new file mode 100644 index 0000000..a106f77 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/_helperClasses.scss @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the 'License'); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +.fa-rotate-45 { + -webkit-transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -o-transform: rotate(45deg); + transform: rotate(45deg); +} + +.capitalize { + text-transform: capitalize; +} + +.uppercase { + text-transform: uppercase; +} + +.info { + color: $blue8; +} + +.authorized { + color: $red2; +} + +.suspended { + color: $green3; +} + +.nf-registry-button-container { + position: absolute; + bottom: 0px; + height: 64px; + left: 0px; + right: 0px; + border-top: 1px solid $grey4; +} + +.nf-registry-button-container .done-button { + float: right; + margin-right: 15px; + margin-top: 15px; +} + +.td-expansion-content { + background: $grey6; +} http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/_structureElements.scss new file mode 100644 index 0000000..78c19d1 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/_structureElements.scss @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +body { + background: $grey5; +} + +#nf-registry-app-container { + margin: 0; + width: 100%; + height: 100%; +} + +#nifi-registry-logo { + height: 44px; +} + +#nifi-registry-alerts-count { + border-radius: 50%; + background: $warnColor; + height: 14px; + width: 14px; + position: relative; + left: 9px; + color: #FFFFFF; + font-size: 9px; + text-align: center; + line-height: 14px; +} + +#nifi-registry-toolbar { + min-width: 1045px; + background-color: #FFFFFF; + position: absolute; + z-index: 1000; + background: $grey1; +} + +#nifi-registry-toolbar .mat-icon-button { + color: $grey5; + font-size: 20px; + margin: 0; +} + +#nifi-registry-toolbar .mat-select-value-text, #nifi-registry-toolbar .mat-select-arrow{ + color: white; +} + +#nifi-registry-toolbar span, #nifi-registry-toolbar .link{ + color: $grey5; +} + +#nf-registry-perspectives-container { + position: absolute; + top: 64px; + left: 0px; + right: 0px; + bottom: 0px; + background: $grey5; + min-height: 370px; + min-width: 1045px; + overflow: auto; +} + +md-sidenav { + width: 40%; + min-width: 418px; +} http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/administration/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/administration/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/_structureElements.scss new file mode 100644 index 0000000..aa59100 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/_structureElements.scss @@ -0,0 +1,22 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#nifi-registry-administration-perspective { + position: absolute; + top: 20px; + left: 50px; +} http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/administration/general/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/administration/general/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/general/_structureElements.scss new file mode 100644 index 0000000..ab3548d --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/general/_structureElements.scss @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#nifi-registry-general-administration-perspective { + position: absolute; + top: 79px; + left: 50px; + right: calc(50% - 5px); + bottom: 20px; + background: white; +} http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/administration/users/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/administration/users/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/users/_structureElements.scss new file mode 100644 index 0000000..650593f --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/users/_structureElements.scss @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#nifi-registry-users-administration-perspective { + position: absolute; + top: 79px; + left: 50px; + right: 20px; + bottom: 20px; + background: white; +} + +#nifi-registry-users-administration-list-container { + overflow-y: auto; + position: absolute; + bottom: 49px; + top: 124px; + left: 30px; + right: 30px; + overflow-x: hidden; +} + +#nifi-registry-users-administration-list-paging-bar { + position: absolute; + bottom: 0; + left: 0; + right: 0; +} + +#nf-registry-user-permissions-side-nav-container { + position: absolute; + bottom: 15px; + right: 10px; +} + +#nf-registry-add-user-side-nav-container { + position: absolute; + bottom: 15px; + right: 10px; +} + +#nf-registry-user-details-side-nav-container { + position: absolute; + bottom: 15px; + right: 10px; +} + http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/administration/workflow/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/administration/workflow/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/workflow/_structureElements.scss new file mode 100644 index 0000000..0384079 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/administration/workflow/_structureElements.scss @@ -0,0 +1,61 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#nifi-registry-workflow-administration-perspective-buckets-container { + position: absolute; + top: 79px; + left: 50px; + right: calc(50% - 5px); + bottom: 20px; + background: white; +} + +//#nifi-registry-workflow-administration-perspective-certifications-container { +// position: absolute; +// top: 79px; +// left: calc(50% + 25px); +// right: 20px; +// bottom: 20px; +// background: white; +//} + +#nifi-registry-workflow-administration-buckets-list-container { + overflow-y: auto; + position: absolute; + bottom: 30px; + top: 171px; + left: 30px; + right: 30px; + overflow-x: hidden; +} + +//#nifi-registry-workflow-administration-certifications-list-container { +// overflow-y: auto; +// position: absolute; +// bottom: 30px; +// top: 171px; +// left: 30px; +// right: 30px; +// overflow-x: hidden; +//} + +#nf-registry-workflow-bucket-permissions-side-nav-container { + position: absolute; + bottom: 15px; + right: 10px; +} + http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/explorer/grid-list/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/explorer/grid-list/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/explorer/grid-list/_structureElements.scss new file mode 100644 index 0000000..0038782 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/explorer/grid-list/_structureElements.scss @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#nf-registry-droplet-filter-clear-grouping-button-container { + height: 36px; + line-height: 36px; +} + +#nf-registry-droplet-filter-clear-grouping-button-container i{ + color: $red2; +} + +#droplet-sort-by-field { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + //width: 85px; + text-align: end; +} + +#nifi-registry-explorer-grid-list-viewer-droplet-container-details { + position: relative; +} + +#nifi-registry-explorer-grid-list-viewer-droplet-container-details-change-log { + position: relative; + left: 0px; + max-height: 230px; + overflow: auto; +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/components/fluid-design-system/_structureElements.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/components/fluid-design-system/_structureElements.scss b/nifi-registry-web-ui/src/main/webapp/theming/components/fluid-design-system/_structureElements.scss new file mode 100644 index 0000000..75c5ebb --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/components/fluid-design-system/_structureElements.scss @@ -0,0 +1,25 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#fds-demo { + position: absolute; + top: 0px; + bottom: 0px; + left: 0px; + right: 0px; + overflow: auto; +} http://git-wip-us.apache.org/repos/asf/nifi-registry/blob/7fa56bea/nifi-registry-web-ui/src/main/webapp/theming/nf-registry.scss ---------------------------------------------------------------------- diff --git a/nifi-registry-web-ui/src/main/webapp/theming/nf-registry.scss b/nifi-registry-web-ui/src/main/webapp/theming/nf-registry.scss new file mode 100644 index 0000000..8d9e878 --- /dev/null +++ b/nifi-registry-web-ui/src/main/webapp/theming/nf-registry.scss @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the 'License'); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Welcome to Compass. + * In this file you should centralize your imports. After compilation simply import this file using the following HTML or equivalent: + * <link href='/stylesheets/nifi-flow-registry.css' media='screen, projection' rel='stylesheet' type='text/css' /> */ + +@import '../../platform/core/common/styles/globalVars'; +@import 'structureElements'; +@import 'helperClasses'; +@import 'components/administration/structureElements'; +@import 'components/administration/general/structureElements'; +@import 'components/administration/users/structureElements'; +@import 'components/administration/workflow/structureElements'; +@import 'components/explorer/grid-list/structureElements'; +@import 'components/fluid-design-system/structureElements';
