@wavemaker/angular-app 11.7.5-1.5782
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmrc +1 -0
- package/angular.json +269 -0
- package/build-scripts/build.js +35 -0
- package/build-scripts/index-html-transform.js +28 -0
- package/build-scripts/optimize-css.gulpfile.js +101 -0
- package/build-scripts/post-build.js +311 -0
- package/dependencies/app.component.html +28 -0
- package/dependencies/expression-parser.cjs.js +50533 -0
- package/dependencies/pipe-provider.cjs.js +206320 -0
- package/dependencies/transpilation-mobile.cjs.js +93287 -0
- package/dependencies/transpilation-web.cjs.js +104478 -0
- package/package-lock.json +25051 -0
- package/package.json +132 -0
- package/pwa-assets/icons/icon-128x128.png +0 -0
- package/pwa-assets/icons/icon-144x144.png +0 -0
- package/pwa-assets/icons/icon-152x152.png +0 -0
- package/pwa-assets/icons/icon-192x192.png +0 -0
- package/pwa-assets/icons/icon-384x384.png +0 -0
- package/pwa-assets/icons/icon-512x512.png +0 -0
- package/pwa-assets/icons/icon-72x72.png +0 -0
- package/pwa-assets/icons/icon-96x96.png +0 -0
- package/pwa-assets/manifest.json +59 -0
- package/pwa-assets/ngsw-config.json +30 -0
- package/pwa-assets/wmsw-worker.js +24 -0
- package/src/.browserslistrc +12 -0
- package/src/app/app-codegen.module.ts +11 -0
- package/src/app/app.component.css +0 -0
- package/src/app/app.component.script.js +3 -0
- package/src/app/app.component.variables.ts +3 -0
- package/src/app/app.routes.ts +5 -0
- package/src/app/lazy-load-scripts.resolve.ts +20 -0
- package/src/app/prefabs/prefab-config.js +2 -0
- package/src/app/wm-project-properties.ts +3 -0
- package/src/assets/.gitkeep +0 -0
- package/src/assets/print.css +32 -0
- package/src/environments/environment.dev.ts +3 -0
- package/src/environments/environment.prod.ts +3 -0
- package/src/environments/environment.ts +16 -0
- package/src/framework/angular1.polyfills.ts +36 -0
- package/src/framework/services/app-extension.service.ts +20 -0
- package/src/framework/services/app-js-provider.service.ts +15 -0
- package/src/framework/services/app-variables-provider.service.ts +15 -0
- package/src/framework/services/component-ref-provider.service.ts +40 -0
- package/src/framework/services/lazy-component-ref-provider.service.ts +64 -0
- package/src/framework/services/prefab-config-provider.service.ts +13 -0
- package/src/framework/util/lazy-module-routes.ts +4 -0
- package/src/framework/util/page-util.ts +5 -0
- package/src/index.html +17 -0
- package/src/main.ts +30 -0
- package/src/polyfills.ts +53 -0
- package/src/setup-jest.js +120 -0
- package/src/styles.css +1 -0
- package/src/tsconfig.app.json +14 -0
- package/src/tslint.json +17 -0
- package/tsconfig.json +131 -0
- package/tsconfig.web-app.json +102 -0
- package/wm-custom-webpack.config.js +94 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
const util = require(`util`);
|
|
2
|
+
const fs = require('fs-extra');
|
|
3
|
+
const readFile = util.promisify(fs.readFile);
|
|
4
|
+
const writeFile = util.promisify(fs.writeFile);
|
|
5
|
+
const copyFile = util.promisify(fs.copyFile);
|
|
6
|
+
const exec = util.promisify(require('child_process').exec);
|
|
7
|
+
const cheerio = require(`cheerio`);
|
|
8
|
+
const crypto = require(`crypto`);
|
|
9
|
+
const opPath = `${process.cwd()}/dist/ng-bundle`;
|
|
10
|
+
const copyCssFiles = (hash, updatedFilenames) => {
|
|
11
|
+
const filename = 'wm-styles.css';
|
|
12
|
+
const updatedFilename = `wm-styles.${hash}.css`
|
|
13
|
+
copyFile(`${opPath}/${filename}`, `${opPath}/${updatedFilename}`);
|
|
14
|
+
updatedFilenames[filename] = updatedFilename;
|
|
15
|
+
// copyFile(`${opPath}/wm-styles.br.css`,`${opPath}/wm-styles.${hash}.br.css`);
|
|
16
|
+
// copyFile(`${opPath}/wm-styles.gzip.css`,`${opPath}/wm-styles.${hash}.gzip.css`);
|
|
17
|
+
};
|
|
18
|
+
const copyMobileCssFiles = (hash, fileName) => {
|
|
19
|
+
// const name = filePath.split('.css')[0];
|
|
20
|
+
copyFile(`${opPath}/${fileName}.css`, `${opPath}/${fileName}.${hash}.css`);
|
|
21
|
+
// copyFile(`${opPath}/wm-styles.br.css`,`${opPath}/wm-styles.${hash}.br.css`);
|
|
22
|
+
// copyFile(`${opPath}/wm-styles.gzip.css`,`${opPath}/wm-styles.${hash}.gzip.css`);
|
|
23
|
+
};
|
|
24
|
+
const generateHash = async (filepath) => {
|
|
25
|
+
const cssContent = await readFile(filepath);
|
|
26
|
+
let hash = crypto.createHash('md5');
|
|
27
|
+
hash.update(cssContent);
|
|
28
|
+
return hash.digest('hex');
|
|
29
|
+
};
|
|
30
|
+
const generateHashForScripts = (updatedFilenames) => {
|
|
31
|
+
//from angular 12(IVY), scripts array in angular json, doesn't allow `@` symbol in the name/value
|
|
32
|
+
//so removed `@` from wavemaker.com in the file name and adding it back in the post-build.js file
|
|
33
|
+
const scriptsMap = {};
|
|
34
|
+
return new Promise(resolve => {
|
|
35
|
+
fs.readdir(opPath, (err, items) => {
|
|
36
|
+
const promises = items.map(i => {
|
|
37
|
+
const nohashIndex = i.indexOf('-NOHASH.js');
|
|
38
|
+
if (nohashIndex > 0) {
|
|
39
|
+
const key = i.substring(0, nohashIndex);
|
|
40
|
+
return generateHash(`${opPath}/${i}`).then(hash => {
|
|
41
|
+
const filename = `${key}-NOHASH.js`;
|
|
42
|
+
const updatedFilename = `${key}.${hash}.js`
|
|
43
|
+
scriptsMap[`${key}.js`] = updatedFilename;
|
|
44
|
+
updatedFilenames[filename] = updatedFilename;
|
|
45
|
+
return Promise.all([
|
|
46
|
+
copyFile(`${opPath}/${filename}`, `${opPath}/${updatedFilename}`),
|
|
47
|
+
// copyFile(`${opPath}/${key}-NOHASH.br.js`, `${opPath}/${key}.${hash}.br.js`),
|
|
48
|
+
// copyFile(`${opPath}/${key}-NOHASH.gzip.js`, `${opPath}/${key}.${hash}.gzip.js`)
|
|
49
|
+
]);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
Promise.all(promises).then(() => {
|
|
54
|
+
return writeFile(`${opPath}/path_mapping.json`, JSON.stringify(scriptsMap, null, 2));
|
|
55
|
+
}).then(resolve);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
let isMobileProject = false;
|
|
60
|
+
let isProdBuild;
|
|
61
|
+
let isDevBuild;
|
|
62
|
+
let $;
|
|
63
|
+
|
|
64
|
+
const setMobileProjectType = (angularJson) => {
|
|
65
|
+
let styles = angularJson['projects']['angular-app']['architect']['build']['options']['styles'];
|
|
66
|
+
const androidStyles = styles.find((style) => {
|
|
67
|
+
let isObject = typeof (style) === 'object';
|
|
68
|
+
if (isObject) {
|
|
69
|
+
return style.bundleName === 'wm-android-styles';
|
|
70
|
+
}
|
|
71
|
+
return false;
|
|
72
|
+
});
|
|
73
|
+
isMobileProject = androidStyles ? true : false;
|
|
74
|
+
return isMobileProject;
|
|
75
|
+
}
|
|
76
|
+
const addMobileSpecificStyles = async (deployUrl) => {
|
|
77
|
+
if (isDevBuild) {
|
|
78
|
+
$("body").append(
|
|
79
|
+
`<script type="text/javascript" defer="true" src="${deployUrl}wm-android-styles.js"></script>`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
if (isProdBuild) {
|
|
84
|
+
let hash = await generateHash(`${opPath}/wm-android-styles.css`);
|
|
85
|
+
copyMobileCssFiles(hash, 'wm-android-styles');
|
|
86
|
+
$("head").append(
|
|
87
|
+
`<link rel="stylesheet" theme="wmtheme" href="${deployUrl}wm-android-styles.${hash}.css" >`
|
|
88
|
+
);
|
|
89
|
+
hash = await generateHash(`${opPath}/wm-ios-styles.css`);
|
|
90
|
+
copyMobileCssFiles(hash, 'wm-ios-styles');
|
|
91
|
+
$("head").append(
|
|
92
|
+
`<link rel="stylesheet" theme="wmtheme" href="${deployUrl}wm-ios-styles.${hash}.css" >`
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const addScriptForWMStylesPath = (wm_styles_path) => {
|
|
98
|
+
// wm_styles_path will not be present for mobile apps
|
|
99
|
+
if (wm_styles_path) {
|
|
100
|
+
let styleType = wm_styles_path.split(".").pop();
|
|
101
|
+
if(styleType==="css"){
|
|
102
|
+
$("head").append(
|
|
103
|
+
`<link rel="stylesheet" type="text/css" href="${wm_styles_path}"/>`
|
|
104
|
+
);
|
|
105
|
+
} else {
|
|
106
|
+
$("body").append(
|
|
107
|
+
`<script type="text/javascript" defer="true" src="${wm_styles_path}"></script>`
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const addPrintStylesPath = (print_styles_path) => {
|
|
113
|
+
$("head").append(
|
|
114
|
+
`<link rel="stylesheet" type="text/css" media="print" href="${print_styles_path}"/>`
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Read the console arguments and prepare the key value pairs.
|
|
120
|
+
* @returns Object console arguments as key value pairs
|
|
121
|
+
*/
|
|
122
|
+
const getArgs = (customArgs) => {
|
|
123
|
+
const args = {};
|
|
124
|
+
let arguments = customArgs || process.argv;
|
|
125
|
+
arguments.slice(2, process.argv.length)
|
|
126
|
+
.forEach(arg => {
|
|
127
|
+
if (arg.slice(0, 2) === '--') {
|
|
128
|
+
const longArg = arg.split('=');
|
|
129
|
+
const longArgFlag = longArg[0].slice(2, longArg[0].length);
|
|
130
|
+
const longArgValue = longArg.length > 2 ? longArg.slice(1, longArg.length).join('=') : longArg[1];
|
|
131
|
+
args[longArgFlag] = longArgValue;
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return args;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
const args = getArgs();
|
|
138
|
+
|
|
139
|
+
// Files that are moved out of ng-bundle and hence not to be updated.
|
|
140
|
+
const SKIP_UPDATE = ['index.html', 'manifest.json'];
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Checks if a file's name has been changed during the build process
|
|
144
|
+
* and if changed, returns an updated file path.
|
|
145
|
+
*
|
|
146
|
+
* @param {string} deployUrl deployment url
|
|
147
|
+
* @param {string} url an absolute url to check if its filename has changed
|
|
148
|
+
* @param {object} updatedFileNames a map from old filenames to new filenames
|
|
149
|
+
* @returns {string} an updated file path
|
|
150
|
+
*/
|
|
151
|
+
const getUpdatedFileName = (deployUrl, url, updatedFileNames) => {
|
|
152
|
+
const absUrl = url.substring(1); // remove leading '/'
|
|
153
|
+
if (SKIP_UPDATE.includes(absUrl)) {
|
|
154
|
+
return absUrl;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (absUrl in updatedFileNames) {
|
|
158
|
+
return `${deployUrl}${updatedFileNames[absUrl]}` // add the leading '/' back
|
|
159
|
+
}
|
|
160
|
+
return `${deployUrl}${url}`;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Checks if a file's content has been changed during the build process
|
|
165
|
+
* and if changed, returns a new hash to be updated in ngsw.json
|
|
166
|
+
*
|
|
167
|
+
* @param {string} url an absolute url to check if its filename has changed
|
|
168
|
+
* @param {object} updatedFileHashes a map from filenames to file hashes
|
|
169
|
+
* @returns {string} an updated file hash
|
|
170
|
+
*/
|
|
171
|
+
const getUpdatedFileHashes = (url, oldHash, updatedFileHashes) => {
|
|
172
|
+
const absUrl = url.substring(1); // remove leading '/'
|
|
173
|
+
if (absUrl in updatedFileHashes) {
|
|
174
|
+
return updatedFileHashes[absUrl];
|
|
175
|
+
}
|
|
176
|
+
return oldHash;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Get the path of the icon without '/ng-bundle'
|
|
181
|
+
*
|
|
182
|
+
* @param {string} iconPath path with '/ng-bundle'
|
|
183
|
+
* @returns {string} path of the icon without '/ng-bundle'
|
|
184
|
+
*/
|
|
185
|
+
const getIconPath = (iconPath) => {
|
|
186
|
+
var index = iconPath.indexOf("/", iconPath.indexOf("/") + 1);
|
|
187
|
+
return iconPath.substring(index + 1);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Updates name, location and content of PWA related assets.
|
|
192
|
+
*
|
|
193
|
+
* @param {string} deployUrl deployment url
|
|
194
|
+
* @param {object} updatedFileNames a map from old filenames to new filenames
|
|
195
|
+
* @returns {void}
|
|
196
|
+
*/
|
|
197
|
+
const updatePwaAssets = (deployUrl, updatedFileNames, updatedFileHashes) => {
|
|
198
|
+
const ngswPath = './dist/ngsw.json';
|
|
199
|
+
const manifestPath = './dist/manifest.json';
|
|
200
|
+
//this is always from server in case of pwa. Need to fix this to use cdnurl from runtime/build config
|
|
201
|
+
deployUrl = deployUrl === "_cdnUrl_" ? 'ng-bundle/' : deployUrl;
|
|
202
|
+
|
|
203
|
+
// copy service worker and its config to root directory
|
|
204
|
+
fs.copyFileSync('./dist/ng-bundle/ngsw-worker.js', './dist/ngsw-worker.js');
|
|
205
|
+
fs.copyFileSync('./dist/ng-bundle/wmsw-worker.js', './dist/wmsw-worker.js');
|
|
206
|
+
fs.copyFileSync('./dist/ng-bundle/ngsw.json', ngswPath);
|
|
207
|
+
fs.copyFileSync('./dist/ng-bundle/manifest.json', manifestPath);
|
|
208
|
+
|
|
209
|
+
// update the icons url in manifest.json
|
|
210
|
+
const manifest = JSON.parse(fs.readFileSync(manifestPath).toString());
|
|
211
|
+
const updatedManifest = {
|
|
212
|
+
...manifest,
|
|
213
|
+
icons: manifest.icons.map(icon => ({ ...icon, src: `${deployUrl}${getIconPath(icon.src)}` })),
|
|
214
|
+
}
|
|
215
|
+
const manifestContent = JSON.stringify(updatedManifest, null, 4);
|
|
216
|
+
fs.writeFileSync(manifestPath, manifestContent);
|
|
217
|
+
updatedFileHashes['manifest.json'] = generateSha1(manifestContent);
|
|
218
|
+
|
|
219
|
+
// edit service worker config to include ./ng-bundle to the path of files to be cached
|
|
220
|
+
// also update the urls to files whose names are modified to include file hash (wm-styles)
|
|
221
|
+
const ngswData = JSON.parse(fs.readFileSync(ngswPath).toString());
|
|
222
|
+
ngswData.assetGroups = ngswData.assetGroups.map(group => ({
|
|
223
|
+
...group,
|
|
224
|
+
urls: group.urls.map(url => getUpdatedFileName(deployUrl, url, updatedFileNames))
|
|
225
|
+
}));
|
|
226
|
+
ngswData.hashTable = Object.keys(ngswData.hashTable).reduce((prev, current) => ({
|
|
227
|
+
...prev,
|
|
228
|
+
[getUpdatedFileName(deployUrl, current, updatedFileNames)]: getUpdatedFileHashes(current, ngswData.hashTable[current], updatedFileHashes),
|
|
229
|
+
}), {});
|
|
230
|
+
|
|
231
|
+
const ngswContent = JSON.stringify(ngswData, null, 4);
|
|
232
|
+
fs.writeFileSync(ngswPath, ngswContent);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
/**
|
|
236
|
+
* Generated sha1 hash for the content supplied.
|
|
237
|
+
*
|
|
238
|
+
* @param {string} content the content to be hashed
|
|
239
|
+
* @returns {string} the hash value
|
|
240
|
+
*/
|
|
241
|
+
const generateSha1 = (content) => {
|
|
242
|
+
const buffer = Buffer.from(content, 'utf8');
|
|
243
|
+
return crypto.createHash('sha1').update(buffer).digest("hex");
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
(async () => {
|
|
247
|
+
try {
|
|
248
|
+
const angularJson = require(`${process.cwd()}/angular.json`);
|
|
249
|
+
const build = angularJson['projects']['angular-app']['architect']['build'];
|
|
250
|
+
let deployUrl = args['deploy-url'] || build['options']['deployUrl'];
|
|
251
|
+
|
|
252
|
+
const contents = await readFile(`./dist/index.html`, `utf8`);
|
|
253
|
+
$ = cheerio.load(contents);
|
|
254
|
+
setMobileProjectType(angularJson);
|
|
255
|
+
if (!isMobileProject) {
|
|
256
|
+
isProdBuild = fs.existsSync(`${process.cwd()}/dist/ng-bundle/wm-styles.css`);
|
|
257
|
+
isDevBuild = fs.existsSync(`${process.cwd()}/dist/ng-bundle/wm-styles.js`);
|
|
258
|
+
} else {
|
|
259
|
+
isDevBuild = fs.existsSync(`${process.cwd()}/dist/ng-bundle/wm-android-styles.js`);
|
|
260
|
+
isProdBuild = fs.existsSync(`${process.cwd()}/dist/ng-bundle/wm-android-styles.css`);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
if (isProdBuild) {
|
|
264
|
+
const isOptimizeCss = $('meta[optimizecss]').length;
|
|
265
|
+
if (isOptimizeCss) {
|
|
266
|
+
console.log(`CSS Optimization Selected`);
|
|
267
|
+
const { stdout, stderr } = await exec(`npm run optimizecss`);
|
|
268
|
+
console.log(`Optimization Log | ${stdout}`);
|
|
269
|
+
console.error(`Optimization Error | ${stderr}`);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
// if service worker is enabled the app is a PWA
|
|
273
|
+
const serviceWorkerEnabled = build['configurations']['production']['serviceWorker'];
|
|
274
|
+
const updatedFilenames = {}
|
|
275
|
+
const updatedFileHashes = {}
|
|
276
|
+
let wm_styles_path;
|
|
277
|
+
|
|
278
|
+
if (isMobileProject) {
|
|
279
|
+
await addMobileSpecificStyles(deployUrl);
|
|
280
|
+
} else {
|
|
281
|
+
if (isDevBuild) {
|
|
282
|
+
wm_styles_path = `${deployUrl}wm-styles.js`;
|
|
283
|
+
} else {
|
|
284
|
+
const fileName = 'wm-styles';
|
|
285
|
+
const hash = await generateHash(`${opPath}/${fileName}.css`);
|
|
286
|
+
copyCssFiles(hash, updatedFilenames);
|
|
287
|
+
const updatedFileName = `${fileName}.${hash}.css`
|
|
288
|
+
wm_styles_path = `${deployUrl}${updatedFileName}`;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
addScriptForWMStylesPath(wm_styles_path);
|
|
293
|
+
addPrintStylesPath(`${deployUrl}print.css`);
|
|
294
|
+
|
|
295
|
+
//this is required to download all the assets
|
|
296
|
+
$('head').append(`<meta name="deployUrl" content=${deployUrl} />`);
|
|
297
|
+
|
|
298
|
+
const htmlContent = $.html();
|
|
299
|
+
await writeFile(`./dist/index.html`, htmlContent);
|
|
300
|
+
|
|
301
|
+
await generateHashForScripts(updatedFilenames);
|
|
302
|
+
|
|
303
|
+
if (serviceWorkerEnabled) {
|
|
304
|
+
// re-generate hash for index.html since its been modified
|
|
305
|
+
updatedFileHashes['index.html'] = generateSha1(htmlContent);
|
|
306
|
+
updatePwaAssets(deployUrl, updatedFilenames, updatedFileHashes);
|
|
307
|
+
}
|
|
308
|
+
} catch (e) {
|
|
309
|
+
console.error(`Error in Post ng build Script | ${e}`);
|
|
310
|
+
}
|
|
311
|
+
})();
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<ng-container *ngIf="startApp">
|
|
2
|
+
<router-outlet></router-outlet>
|
|
3
|
+
<div wmContainer partialContainer content="Common" hidden class="ng-hide" *ngIf="isApplicationType"></div>
|
|
4
|
+
<app-spinner name="globalspinner" classname="global-spinner" role="alert" aria-live="assertive" [attr.aria-label]="spinner.arialabel || 'Loading'" [show]="spinner.show" [spinnermessages]="spinner.messages"></app-spinner>
|
|
5
|
+
<div wmDialog name="oAuthLoginDialog" title="Application is requesting you to sign in with"
|
|
6
|
+
close.event="closeOAuthDialog()">
|
|
7
|
+
<ng-template #dialogBody>
|
|
8
|
+
<ul class="list-items">
|
|
9
|
+
<li class="list-item" *ngFor="let provider of providersConfig">
|
|
10
|
+
<button class="btn" (click)="provider.invoke()">{{provider.name}}</button>
|
|
11
|
+
</li>
|
|
12
|
+
</ul>
|
|
13
|
+
</ng-template>
|
|
14
|
+
</div>
|
|
15
|
+
<div wmConfirmDialog name="_app-confirm-dialog" title.bind="title" message.bind="message" oktext.bind="oktext"
|
|
16
|
+
canceltext.bind="canceltext" closable="false" iconclass.bind="iconclass"
|
|
17
|
+
escape.event="onEscape()" ok.event="onOk()" cancel.event="onCancel()" close.event="onClose()" opened.event="onOpen()"></div>
|
|
18
|
+
<div *ngIf="!isApplicationType" wmConfirmDialog name="PrefabConfirmDialog" title.bind="title" message.bind="text" oktext.bind="okButtonText"
|
|
19
|
+
canceltext.bind="cancelButtonText" closable="false" iconclass.bind="iconclass"
|
|
20
|
+
escape.event="onEscape()" ok.event="onOk()" cancel.event="onCancel()" close.event="onClose()" opened.event="onOpen()"></div>
|
|
21
|
+
<div *ngIf="!isApplicationType" wmAlertDialog name="PrefabAlertDialog" title.bind="title" message.bind="text" oktext.bind="okButtonText"
|
|
22
|
+
canceltext.bind="cancelButtonText" closable="false" iconclass.bind="iconclass"
|
|
23
|
+
escape.event="onEscape()" ok.event="onOk()" cancel.event="onCancel()" close.event="onClose()" opened.event="onOpen()"></div>
|
|
24
|
+
<div wmAppExt></div>
|
|
25
|
+
<i id="wm-mobile-display"></i>
|
|
26
|
+
</ng-container>
|
|
27
|
+
<!--Dummy container to create the component dynamically-->
|
|
28
|
+
<ng-container #dynamicComponent></ng-container>
|