diff --git a/README.md b/README.md index 9b6e12c..b2d67b0 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # CustomBranding -CustomBranding 3.0.2 ist ein zentraler SPFx-1.4.1-Application-Customizer für SharePoint Server Subscription Edition. Die Solution lädt freigegebene Stylesheets und rendert eine kontrollierte Komponentenstruktur im oberen oder unteren SharePoint-Placeholder. Moderne und klassische Seiten verwenden dieselben `ClientSideComponentProperties`. +CustomBranding 3.0.3 ist ein zentraler SPFx-1.4.1-Application-Customizer für SharePoint Server Subscription Edition. Die Solution lädt freigegebene Stylesheets und rendert eine kontrollierte Komponentenstruktur im oberen oder unteren SharePoint-Placeholder. Moderne und klassische Seiten verwenden dieselben `ClientSideComponentProperties`. Die Konfiguration liegt in genau einer `SPSite.UserCustomAction` pro Site Collection. Es werden weder eine versteckte Liste noch ein Property Bag benötigt. Dadurch gilt das Branding automatisch für das Root Web, vorhandene Subwebs und später angelegte Subwebs. diff --git a/ToDo.md b/ToDo.md index 949e329..acf3af2 100644 --- a/ToDo.md +++ b/ToDo.md @@ -3,7 +3,7 @@ Analysestand: 20.07.2026 Umgesetzt: 20.07.2026 Ausgangsversion: 1.0.4 -Zielversion: 3.0.2 +Zielversion: 3.0.3 Status: Implementierung und lokale Qualitätssicherung abgeschlossen ## Zielbild diff --git a/classic/custom-branding-classic.js b/classic/custom-branding-classic.js index fb43585..3d15a09 100644 --- a/classic/custom-branding-classic.js +++ b/classic/custom-branding-classic.js @@ -143,6 +143,11 @@ host.setAttribute('data-custom-branding-owner', OWNER); if (beforeNode) { parent.insertBefore(host, beforeNode); } else { parent.appendChild(host); } } + host.style.fontFamily = '"Segoe UI", "Segoe UI Web (West European)", Arial, sans-serif'; + host.style.fontSize = '14px'; + host.style.color = '#323130'; + host.style.borderTop = /BottomHost$/.test(id) ? '1px solid #edebe9' : ''; + host.style.borderBottom = /TopHost$/.test(id) ? '1px solid #edebe9' : ''; clear(host); var counter = { value: 0 }; for (var i = 0; i < elements.length; i++) { diff --git a/config/package-solution.json b/config/package-solution.json index 26a1f7e..3f6f65c 100644 --- a/config/package-solution.json +++ b/config/package-solution.json @@ -3,7 +3,7 @@ "solution": { "name": "custom-branding-client-side-solution", "id": "03a7c4de-e031-4b83-a683-5ca5c364166e", - "version": "3.0.2.0", + "version": "3.0.3.0", "includeClientSideAssets": true, "skipFeatureDeployment": true }, diff --git a/package-lock.json b/package-lock.json index 5c418da..a1abbb3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "custom-branding", - "version": "3.0.2", + "version": "3.0.3", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 276f0f7..abe83b4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "custom-branding", - "version": "3.0.2", + "version": "3.0.3", "private": true, "main": "lib/index.js", "engines": { diff --git a/src/extensions/customBranding/CustomBrandingApplicationCustomizer.ts b/src/extensions/customBranding/CustomBrandingApplicationCustomizer.ts index c005356..e20b5ca 100644 --- a/src/extensions/customBranding/CustomBrandingApplicationCustomizer.ts +++ b/src/extensions/customBranding/CustomBrandingApplicationCustomizer.ts @@ -102,6 +102,11 @@ export default class CustomBrandingApplicationCustomizer host.setAttribute('data-custom-branding-owner', COMPONENT_ID); parent.insertBefore(host, parent.firstChild); } + host.style.fontFamily = '"Segoe UI", "Segoe UI Web (West European)", -apple-system, BlinkMacSystemFont, Roboto, "Helvetica Neue", sans-serif'; + host.style.fontSize = '14px'; + host.style.color = '#323130'; + host.style.borderTop = id === 'CustomBrandingBottomHost' ? '1px solid #edebe9' : ''; + host.style.borderBottom = id === 'CustomBrandingTopHost' ? '1px solid #edebe9' : ''; return host; } diff --git a/tests/validate-static-assets.js b/tests/validate-static-assets.js index cc32d5b..289cb67 100644 --- a/tests/validate-static-assets.js +++ b/tests/validate-static-assets.js @@ -24,8 +24,8 @@ var appSource = read('src/extensions/customBranding/CustomBrandingApplicationCus var rendererSource = read('src/extensions/customBranding/BrandingDomRenderer.ts'); var classicSource = read('classic/custom-branding-classic.js'); -assert(packageJson.version === '3.0.2', 'package.json hat nicht Version 3.0.2.'); -assert(solution.version === '3.0.2.0', 'Solution-Version ist inkonsistent.'); +assert(packageJson.version === '3.0.3', 'package.json hat nicht Version 3.0.3.'); +assert(solution.version === '3.0.3.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.'); @@ -40,6 +40,8 @@ assert(appSource.indexOf('_onTopPlaceholderDisposed') >= 0 && appSource.indexOf( 'Top- und Bottom-Placeholder brauchen unabhaengige Dispose-Handler.'); assert(appSource.indexOf("'CustomBrandingTopHost'") >= 0 && appSource.indexOf("'CustomBrandingBottomHost'") >= 0, 'Stabile Branding-Hosts fehlen.'); +assert(appSource.indexOf("'1px solid #edebe9'") >= 0 && appSource.indexOf('Segoe UI Web') >= 0, + 'SharePoint-Standardschrift und neutraler Host-Rahmen 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.');