- Introduced custom branding CSS styles in `custom-branding.css`. - Created example JSON configuration for custom branding in `custom-branding.example.json`. - Implemented branding configuration logic in `BrandingConfig.ts` to normalize and validate branding settings. - Developed CSS loader to manage loading and unloading of custom stylesheets in `BrandingCssLoader.ts`. - Added DOM rendering capabilities for branding elements in `BrandingDomRenderer.ts`. - Defined types and interfaces for branding elements and configurations in `BrandingTypes.ts`. - Included localization support for German in `de-de.js`. - Added unit tests for branding configuration, CSS loader, and DOM renderer. - Validated project structure and static assets with new validation scripts.
47 lines
2.6 KiB
JavaScript
47 lines
2.6 KiB
JavaScript
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var root = path.resolve(__dirname, '..');
|
|
var passed = 0;
|
|
|
|
function read(file) { return fs.readFileSync(path.join(root, file), 'utf8'); }
|
|
function json(file) { return JSON.parse(read(file)); }
|
|
function assert(condition, message) {
|
|
if (!condition) { throw new Error(message); }
|
|
passed++;
|
|
}
|
|
|
|
['config/config.json', 'config/package-solution.json', 'config/serve.json',
|
|
'src/extensions/customBranding/CustomBrandingApplicationCustomizer.manifest.json',
|
|
'examples/custom-branding.example.json']
|
|
.forEach(function (file) { json(file); passed++; });
|
|
|
|
var packageJson = json('package.json');
|
|
var solution = json('config/package-solution.json').solution;
|
|
var serveText = read('config/serve.json').toLowerCase();
|
|
var appSource = read('src/extensions/customBranding/CustomBrandingApplicationCustomizer.ts');
|
|
var rendererSource = read('src/extensions/customBranding/BrandingDomRenderer.ts');
|
|
var classicSource = read('classic/custom-branding-classic.js');
|
|
|
|
assert(packageJson.version === '3.0.0', 'package.json hat nicht Version 3.0.0.');
|
|
assert(solution.version === '3.0.0.0', 'Solution-Version ist inkonsistent.');
|
|
assert(solution.skipFeatureDeployment === true, 'Tenantweite Bereitstellung ist nicht aktiviert.');
|
|
assert(!solution.features, 'Die alte web-scoped Feature-Registrierung ist noch vorhanden.');
|
|
assert(!fs.existsSync(path.join(root, 'sharepoint/assets/elements.xml')), 'elements.xml muss entfernt sein.');
|
|
assert(serveText.indexOf('onclick') < 0, 'serve.json enthaelt ein Event-Attribut.');
|
|
assert(serveText.indexOf('placeholdertop') >= 0, 'serve.json verwendet nicht das echte Schema.');
|
|
assert(rendererSource.indexOf('innerHTML') < 0 && appSource.indexOf('innerHTML') < 0, 'Der moderne Renderer darf innerHTML nicht verwenden.');
|
|
assert(classicSource.indexOf('innerHTML') < 0, 'Die Classic-Runtime darf innerHTML nicht verwenden.');
|
|
assert(appSource.indexOf('changedEvent.remove') >= 0, 'Lifecycle-Cleanup fuer changedEvent fehlt.');
|
|
assert(appSource.indexOf('_onTopPlaceholderDisposed') >= 0 && appSource.indexOf('_onBottomPlaceholderDisposed') >= 0,
|
|
'Top- und Bottom-Placeholder brauchen unabhaengige Dispose-Handler.');
|
|
assert(appSource.indexOf("'CustomBrandingTopHost'") >= 0 && appSource.indexOf("'CustomBrandingBottomHost'") >= 0,
|
|
'Stabile Branding-Hosts fehlen.');
|
|
assert(packageJson.scripts.package.indexOf('npm test') === 0, 'Paketierung muss mit Tests beginnen.');
|
|
assert(!packageJson.dependencies['@microsoft/sp-dialog'], 'Nicht verwendete Dialog-Abhaengigkeit ist noch vorhanden.');
|
|
|
|
new Function(classicSource);
|
|
passed++;
|
|
console.log('Statische Assets: ' + passed + ' Pruefungen erfolgreich.');
|