Commit fd02c9b96f71d8c2fa9324d2901fffa497b34e33
1 parent
cae1f026
ThingsBoard UI - Angular 8 - Initial structure.
Showing
11 changed files
with
412 additions
and
4 deletions
Too many changes to show.
To preserve performance only 11 of 53 files are displayed.
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | <dependencies> |
47 | 47 | <dependency> |
48 | 48 | <groupId>org.thingsboard</groupId> |
49 | - <artifactId>ui</artifactId> | |
49 | + <artifactId>ui-ngx</artifactId> | |
50 | 50 | <version>${project.version}</version> |
51 | 51 | <type>jar</type> |
52 | 52 | <scope>provided</scope> |
... | ... | @@ -105,7 +105,7 @@ |
105 | 105 | <artifactItems> |
106 | 106 | <artifactItem> |
107 | 107 | <groupId>org.thingsboard</groupId> |
108 | - <artifactId>ui</artifactId> | |
108 | + <artifactId>ui-ngx</artifactId> | |
109 | 109 | <type>jar</type> |
110 | 110 | <overWrite>false</overWrite> |
111 | 111 | <outputDirectory>${project.build.directory}/web</outputDirectory> | ... | ... |
... | ... | @@ -100,10 +100,11 @@ |
100 | 100 | <module>rule-engine</module> |
101 | 101 | <module>dao</module> |
102 | 102 | <module>transport</module> |
103 | - <module>ui</module> | |
103 | + <module>ui-ngx</module> | |
104 | 104 | <module>tools</module> |
105 | 105 | <module>application</module> |
106 | 106 | <module>msa</module> |
107 | + <module>ui</module> | |
107 | 108 | </modules> |
108 | 109 | |
109 | 110 | <profiles> | ... | ... |
ui-ngx/.editorconfig
0 → 100644
1 | +# | |
2 | +# Copyright © 2016-2019 The Thingsboard Authors | |
3 | +# | |
4 | +# Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | +# you may not use this file except in compliance with the License. | |
6 | +# You may obtain a copy of the License at | |
7 | +# | |
8 | +# http://www.apache.org/licenses/LICENSE-2.0 | |
9 | +# | |
10 | +# Unless required by applicable law or agreed to in writing, software | |
11 | +# distributed under the License is distributed on an "AS IS" BASIS, | |
12 | +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | +# See the License for the specific language governing permissions and | |
14 | +# limitations under the License. | |
15 | +# | |
16 | + | |
17 | +# Editor configuration, see https://editorconfig.org | |
18 | +root = true | |
19 | + | |
20 | +[*] | |
21 | +charset = utf-8 | |
22 | +indent_style = space | |
23 | +indent_size = 2 | |
24 | +insert_final_newline = true | |
25 | +trim_trailing_whitespace = true | |
26 | + | |
27 | +[*.md] | |
28 | +max_line_length = off | |
29 | +trim_trailing_whitespace = false | ... | ... |
ui-ngx/.gitignore
0 → 100644
1 | +# See http://help.github.com/ignore-files/ for more about ignoring files. | |
2 | + | |
3 | +# compiled output | |
4 | +/dist | |
5 | +/tmp | |
6 | +/out-tsc | |
7 | +# Only exists if Bazel was run | |
8 | +/bazel-out | |
9 | + | |
10 | +# dependencies | |
11 | +/node_modules | |
12 | + | |
13 | +# profiling files | |
14 | +chrome-profiler-events.json | |
15 | +speed-measure-plugin.json | |
16 | + | |
17 | +# IDEs and editors | |
18 | +/.idea | |
19 | +.project | |
20 | +.classpath | |
21 | +.c9/ | |
22 | +*.launch | |
23 | +.settings/ | |
24 | +*.sublime-workspace | |
25 | + | |
26 | +# IDE - VSCode | |
27 | +.vscode/* | |
28 | +!.vscode/settings.json | |
29 | +!.vscode/tasks.json | |
30 | +!.vscode/launch.json | |
31 | +!.vscode/extensions.json | |
32 | +.history/* | |
33 | + | |
34 | +# misc | |
35 | +/.sass-cache | |
36 | +/connect.lock | |
37 | +/coverage | |
38 | +/libpeerconnection.log | |
39 | +npm-debug.log | |
40 | +yarn-error.log | |
41 | +testem.log | |
42 | +/typings | |
43 | + | |
44 | +# System Files | |
45 | +.DS_Store | |
46 | +Thumbs.db | ... | ... |
ui-ngx/angular.json
0 → 100644
1 | +{ | |
2 | + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", | |
3 | + "version": 1, | |
4 | + "newProjectRoot": "projects", | |
5 | + "projects": { | |
6 | + "thingsboard": { | |
7 | + "root": "", | |
8 | + "sourceRoot": "src", | |
9 | + "projectType": "application", | |
10 | + "prefix": "tb", | |
11 | + "schematics": { | |
12 | + "@schematics/angular:component": { | |
13 | + "style": "scss" | |
14 | + } | |
15 | + }, | |
16 | + "architect": { | |
17 | + "build": { | |
18 | + "builder": "@angular-builders/custom-webpack:browser", | |
19 | + "options": { | |
20 | + "outputPath": "target/generated-resources/public", | |
21 | + "index": "src/index.html", | |
22 | + "main": "src/main.ts", | |
23 | + "polyfills": "src/polyfills.ts", | |
24 | + "tsConfig": "src/tsconfig.app.json", | |
25 | + "assets": [ | |
26 | + "src/thingsboard.ico", | |
27 | + "src/assets" | |
28 | + ], | |
29 | + "styles": [ | |
30 | + "src/styles.scss" | |
31 | + ], | |
32 | + "scripts": [ | |
33 | + "node_modules/ace-builds/src-min/ace.js", | |
34 | + "node_modules/ace-builds/src-min/ext-language_tools.js", | |
35 | + "node_modules/ace-builds/src-min/ext-searchbox.js", | |
36 | + "node_modules/ace-builds/src-min/theme-github.js", | |
37 | + "node_modules/ace-builds/src-min/mode-text.js", | |
38 | + "node_modules/ace-builds/src-min/mode-markdown.js", | |
39 | + "node_modules/ace-builds/src-min/mode-html.js", | |
40 | + "node_modules/ace-builds/src-min/mode-css.js", | |
41 | + "node_modules/ace-builds/src-min/mode-json.js", | |
42 | + "node_modules/ace-builds/src-min/mode-java.js", | |
43 | + "node_modules/ace-builds/src-min/mode-javascript.js", | |
44 | + "node_modules/ace-builds/src-min/snippets/text.js", | |
45 | + "node_modules/ace-builds/src-min/snippets/markdown.js", | |
46 | + "node_modules/ace-builds/src-min/snippets/html.js", | |
47 | + "node_modules/ace-builds/src-min/snippets/css.js", | |
48 | + "node_modules/ace-builds/src-min/snippets/json.js", | |
49 | + "node_modules/ace-builds/src-min/snippets/java.js", | |
50 | + "node_modules/ace-builds/src-min/snippets/javascript.js", | |
51 | + { "bundleName": "worker-html", "input": "node_modules/ace-builds/src-min/worker-html.js" }, | |
52 | + { "bundleName": "worker-css", "input": "node_modules/ace-builds/src-min/worker-css.js" }, | |
53 | + { "bundleName": "worker-json", "input": "node_modules/ace-builds/src-min/worker-json.js" }, | |
54 | + { "bundleName": "worker-javascript", "input": "node_modules/ace-builds/src-min/worker-javascript.js" } | |
55 | + ], | |
56 | + "es5BrowserSupport": true, | |
57 | + "customWebpackConfig": { | |
58 | + "path": "./extra-webpack.config.js" | |
59 | + } | |
60 | + }, | |
61 | + "configurations": { | |
62 | + "production": { | |
63 | + "fileReplacements": [ | |
64 | + { | |
65 | + "replace": "src/environments/environment.ts", | |
66 | + "with": "src/environments/environment.prod.ts" | |
67 | + } | |
68 | + ], | |
69 | + "optimization": true, | |
70 | + "outputHashing": "all", | |
71 | + "sourceMap": false, | |
72 | + "extractCss": true, | |
73 | + "namedChunks": false, | |
74 | + "aot": true, | |
75 | + "extractLicenses": true, | |
76 | + "vendorChunk": false, | |
77 | + "buildOptimizer": true, | |
78 | + "budgets": [ | |
79 | + { | |
80 | + "type": "initial", | |
81 | + "maximumWarning": "2mb", | |
82 | + "maximumError": "5mb" | |
83 | + } | |
84 | + ] | |
85 | + } | |
86 | + } | |
87 | + }, | |
88 | + "serve": { | |
89 | + "builder": "@angular-builders/dev-server:generic", | |
90 | + "options": { | |
91 | + "browserTarget": "thingsboard:build", | |
92 | + "proxyConfig": "proxy.conf.json" | |
93 | + }, | |
94 | + "configurations": { | |
95 | + "production": { | |
96 | + "browserTarget": "thingsboard:build:production" | |
97 | + } | |
98 | + } | |
99 | + }, | |
100 | + "extract-i18n": { | |
101 | + "builder": "@angular-devkit/build-angular:extract-i18n", | |
102 | + "options": { | |
103 | + "browserTarget": "thingsboard:build" | |
104 | + } | |
105 | + }, | |
106 | + "test": { | |
107 | + "builder": "@angular-devkit/build-angular:karma", | |
108 | + "options": { | |
109 | + "main": "src/test.ts", | |
110 | + "polyfills": "src/polyfills.ts", | |
111 | + "tsConfig": "src/tsconfig.spec.json", | |
112 | + "karmaConfig": "src/karma.conf.js", | |
113 | + "styles": [ | |
114 | + "src/styles.scss" | |
115 | + ], | |
116 | + "scripts": [], | |
117 | + "assets": [ | |
118 | + "src/favicon.ico", | |
119 | + "src/assets" | |
120 | + ] | |
121 | + } | |
122 | + }, | |
123 | + "lint": { | |
124 | + "builder": "@angular-devkit/build-angular:tslint", | |
125 | + "options": { | |
126 | + "tsConfig": [ | |
127 | + "src/tsconfig.app.json", | |
128 | + "src/tsconfig.spec.json" | |
129 | + ], | |
130 | + "exclude": [ | |
131 | + "**/node_modules/**" | |
132 | + ] | |
133 | + } | |
134 | + } | |
135 | + } | |
136 | + }, | |
137 | + "thingsboard-e2e": { | |
138 | + "root": "e2e/", | |
139 | + "projectType": "application", | |
140 | + "prefix": "", | |
141 | + "architect": { | |
142 | + "e2e": { | |
143 | + "builder": "@angular-devkit/build-angular:protractor", | |
144 | + "options": { | |
145 | + "protractorConfig": "e2e/protractor.conf.js", | |
146 | + "devServerTarget": "thingsboard:serve" | |
147 | + }, | |
148 | + "configurations": { | |
149 | + "production": { | |
150 | + "devServerTarget": "thingsboard:serve:production" | |
151 | + } | |
152 | + } | |
153 | + }, | |
154 | + "lint": { | |
155 | + "builder": "@angular-devkit/build-angular:tslint", | |
156 | + "options": { | |
157 | + "tsConfig": "e2e/tsconfig.e2e.json", | |
158 | + "exclude": [ | |
159 | + "**/node_modules/**" | |
160 | + ] | |
161 | + } | |
162 | + } | |
163 | + } | |
164 | + } | |
165 | + }, | |
166 | + "defaultProject": "thingsboard" | |
167 | +} | ... | ... |
ui-ngx/e2e/protractor.conf.js
0 → 100644
1 | +/* | |
2 | + * Copyright © 2016-2019 The Thingsboard Authors | |
3 | + * | |
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | + * you may not use this file except in compliance with the License. | |
6 | + * You may obtain a copy of the License at | |
7 | + * | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | + * | |
10 | + * Unless required by applicable law or agreed to in writing, software | |
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | + * See the License for the specific language governing permissions and | |
14 | + * limitations under the License. | |
15 | + */ | |
16 | +// Protractor configuration file, see link for more information | |
17 | +// https://github.com/angular/protractor/blob/master/lib/config.ts | |
18 | + | |
19 | +const { SpecReporter } = require('jasmine-spec-reporter'); | |
20 | + | |
21 | +exports.config = { | |
22 | + allScriptsTimeout: 11000, | |
23 | + specs: [ | |
24 | + './src/**/*.e2e-spec.ts' | |
25 | + ], | |
26 | + capabilities: { | |
27 | + 'browserName': 'chrome' | |
28 | + }, | |
29 | + directConnect: true, | |
30 | + baseUrl: 'http://localhost:4200/', | |
31 | + framework: 'jasmine', | |
32 | + jasmineNodeOpts: { | |
33 | + showColors: true, | |
34 | + defaultTimeoutInterval: 30000, | |
35 | + print: function() {} | |
36 | + }, | |
37 | + onPrepare() { | |
38 | + require('ts-node').register({ | |
39 | + project: require('path').join(__dirname, './tsconfig.e2e.json') | |
40 | + }); | |
41 | + jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } })); | |
42 | + } | |
43 | +}; | |
\ No newline at end of file | ... | ... |
ui-ngx/e2e/src/app.e2e-spec.ts
0 → 100644
1 | +/// | |
2 | +/// Copyright © 2016-2019 The Thingsboard Authors | |
3 | +/// | |
4 | +/// Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | +/// you may not use this file except in compliance with the License. | |
6 | +/// You may obtain a copy of the License at | |
7 | +/// | |
8 | +/// http://www.apache.org/licenses/LICENSE-2.0 | |
9 | +/// | |
10 | +/// Unless required by applicable law or agreed to in writing, software | |
11 | +/// distributed under the License is distributed on an "AS IS" BASIS, | |
12 | +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | +/// See the License for the specific language governing permissions and | |
14 | +/// limitations under the License. | |
15 | +/// | |
16 | + | |
17 | +import { AppPage } from './app.po'; | |
18 | +import { browser, logging } from 'protractor'; | |
19 | + | |
20 | +describe('workspace-project App', () => { | |
21 | + let page: AppPage; | |
22 | + | |
23 | + beforeEach(() => { | |
24 | + page = new AppPage(); | |
25 | + }); | |
26 | + | |
27 | + it('should display welcome message', () => { | |
28 | + page.navigateTo(); | |
29 | + expect(page.getTitleText()).toEqual('Welcome to tb-license-server!'); | |
30 | + }); | |
31 | + | |
32 | + afterEach(async () => { | |
33 | + // Assert that there are no errors emitted from the browser | |
34 | + const logs = await browser.manage().logs().get(logging.Type.BROWSER); | |
35 | + expect(logs).not.toContain(jasmine.objectContaining({ | |
36 | + level: logging.Level.SEVERE, | |
37 | + } as logging.Entry)); | |
38 | + }); | |
39 | +}); | ... | ... |
ui-ngx/e2e/src/app.po.ts
0 → 100644
1 | +/// | |
2 | +/// Copyright © 2016-2019 The Thingsboard Authors | |
3 | +/// | |
4 | +/// Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | +/// you may not use this file except in compliance with the License. | |
6 | +/// You may obtain a copy of the License at | |
7 | +/// | |
8 | +/// http://www.apache.org/licenses/LICENSE-2.0 | |
9 | +/// | |
10 | +/// Unless required by applicable law or agreed to in writing, software | |
11 | +/// distributed under the License is distributed on an "AS IS" BASIS, | |
12 | +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | +/// See the License for the specific language governing permissions and | |
14 | +/// limitations under the License. | |
15 | +/// | |
16 | + | |
17 | +import { browser, by, element } from 'protractor'; | |
18 | + | |
19 | +export class AppPage { | |
20 | + navigateTo() { | |
21 | + return browser.get(browser.baseUrl) as Promise<any>; | |
22 | + } | |
23 | + | |
24 | + getTitleText() { | |
25 | + return element(by.css('tb-root h1')).getText() as Promise<string>; | |
26 | + } | |
27 | +} | ... | ... |
ui-ngx/e2e/tsconfig.e2e.json
0 → 100644
ui-ngx/extra-webpack.config.js
0 → 100644
1 | +/* | |
2 | + * Copyright © 2016-2019 The Thingsboard Authors | |
3 | + * | |
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | + * you may not use this file except in compliance with the License. | |
6 | + * You may obtain a copy of the License at | |
7 | + * | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | + * | |
10 | + * Unless required by applicable law or agreed to in writing, software | |
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | + * See the License for the specific language governing permissions and | |
14 | + * limitations under the License. | |
15 | + */ | |
16 | +const CompressionPlugin = require('compression-webpack-plugin'); | |
17 | +const webpack = require('webpack'); | |
18 | +const dirTree = require('directory-tree'); | |
19 | + | |
20 | +var langs = []; | |
21 | + | |
22 | +dirTree('./src/assets/locale/', {extensions:/\.json$/}, (item) => { | |
23 | + /* It is expected what the name of a locale file has the following format: */ | |
24 | + /* 'locale.constant-LANG_CODE[_REGION_CODE].json', e.g. locale.constant-es.json or locale.constant-zh_CN.json*/ | |
25 | + langs.push(item.name.slice(item.name.lastIndexOf('-') + 1, -5)); | |
26 | +}); | |
27 | + | |
28 | +module.exports = { | |
29 | + plugins: [ | |
30 | + new webpack.DefinePlugin({ | |
31 | + TB_VERSION: JSON.stringify(require('./package.json').version), | |
32 | + SUPPORTED_LANGS: JSON.stringify(langs) | |
33 | + }), | |
34 | + new CompressionPlugin({ | |
35 | + filename: "[path].gz[query]", | |
36 | + algorithm: "gzip", | |
37 | + test: /\.js$|\.css$|\.svg$|\.ttf$|\.woff$|\.woff2$|\.eot$|\.json$/, | |
38 | + threshold: 10240, | |
39 | + minRatio: 0.8, | |
40 | + deleteOriginalAssets: false | |
41 | + }) | |
42 | + ] | |
43 | +}; | ... | ... |