Skip to content

Instantly share code, notes, and snippets.

View zzpzaf's full-sized avatar

Panos zzpzaf

View GitHub Profile
@zzpzaf
zzpzaf / MainComponent1.ts
Created December 4, 2024 09:15
ang18-SSR-SEO-SupportBlog2-MainComponent1
import { Component, effect, inject } from '@angular/core';
import { MatCardModule } from '@angular/material/card';
import { MatDividerModule } from '@angular/material/divider';
import { ArticleDTO, IArticleDTO } from '../objects/dataObjects';
import { ContentService } from '../shared/content.service';
import { DomSanitizer, SafeHtml } from '@angular/platform-browser';
import { MarkdownModule } from 'ngx-markdown';
import { SeoService } from '../shared/seo.service';
@zzpzaf
zzpzaf / SeoService2.ts
Last active December 4, 2024 09:13
ang18-SSR-SEO-SupportBlog2-SeoService1-Renderer2-version
import { Injectable, RendererFactory2, PLATFORM_ID, inject } from '@angular/core';
import { Meta, Title } from '@angular/platform-browser';
import { isPlatformBrowser } from '@angular/common';
import { PostStructuredData, PostTags } from '../objects/seoObjects';
import { ArticleDTO } from '../objects/dataObjects';
import { environment } from '../../environments/environment';
import { Pages } from '../objects/blogObjects';
const ComponentName = 'SeoService';
@zzpzaf
zzpzaf / SeoService-getLocationOrgin-in-browser-example1.ts
Created December 4, 2024 09:11
ang18-SSR-SEO-SupportBlog2-SeoService- getLocationOrgin-in-browser-example1
. . .
private getLocationOrgin(): string {
if (!this.isBrowser) {
return 'http://www.mydomain.com';
} else {
return window.location.origin;
}
}
. . .
@zzpzaf
zzpzaf / SeoService-renderer-createElement-example1.ts
Created December 4, 2024 09:11
ang18-SSR-SEO-SupportBlog2-SeoService-renderer-createElement-example1
. . .
const script = this.renderer.createElement('script');
this.renderer.setAttribute(script, 'type', 'application/ld+json');
this.renderer.appendChild(script, this.renderer.createText(JSON.stringify(structuredData)));
this.renderer.appendChild(this.renderer.selectRootElement('head', true), script);
}
. . .
@zzpzaf
zzpzaf / SeoService1.ts
Created December 4, 2024 09:10
ang18-SSR-SEO-SupportBlog2-SeoService1-No-renderer-version
import { inject, Injectable } from '@angular/core';
import { PostStructuredData, PostTags } from '../objects/seoObjects';
import { ArticleDTO } from '../objects/dataObjects';
import { environment } from '../../environments/environment';
import { Pages } from '../objects/blogObjects';
import { Meta, Title } from '@angular/platform-browser';
import { DOCUMENT } from '@angular/common';
@Injectable({
providedIn: 'root',
@zzpzaf
zzpzaf / seoObjects1.ts
Created December 4, 2024 09:09
ang18-SSR-SEO-SupportBlog2-seoObjects1
// Constants
const META_VALUES = {
BLOG_SITE_NAME: 'A simple Multi-Container Blog Site Project',
FAVICON_URL: '/assets/images/favicon.ico',
ROBOTS_VALUE: 'index, follow',
TWITTER_CARD_VALUE: 'summary_large_image',
} as const;
const SCHEMA_TYPES = {
@zzpzaf
zzpzaf / ContentService1.ts
Created December 4, 2024 08:52
ang18-SSR-SEO-SupportBlog2-Angular-Router-in-ContentService1 ContentService1.ts
import { inject, Injectable, signal } from '@angular/core';
import { DataService } from './data.service';
import { ArticleDTO, IArticleDTO, ICategory } from '../objects/dataObjects';
import { Pages } from '../objects/blogObjects';
import { Location, PlatformLocation } from '@angular/common';
import { environment } from '../../environments/environment';
import { NavigationEnd, Router } from '@angular/router';
import { filter } from 'rxjs';
const ComponentName = 'ContentService';
@zzpzaf
zzpzaf / testblog2-db-schema1.sql
Created December 4, 2024 08:47
ang18-SSR-SEO-SupportBlog2-testblog2-db-schema1
/*
Blog backend Test schema
--------------------------
schema.sql
----------------------------------------------------------------------------
MariaDB/MySQL Tables and Data Objectsc for Jdbc default
Requires MariaDB version 10.2.1 or MySQL version 8.0.13 and aftrward.
(C)opyright Panos Zafeiropoulos - 2024
@zzpzaf
zzpzaf / insert-data-to-users-table1.sql
Created December 4, 2024 08:46
ang18-SSR-SEO-SupportBlog2-insert-data-to-users-table1
INSERT INTO `users` (`userName`, `userPassword`, `userEmail`, `userIsEnabled`, `userSlugName`) VALUES ('Panagiotis', 'panos_passw', 'admin@genmail.com', 1, 'panos');
INSERT INTO `users` (`userName`, `userPassword`, `userEmail`, `userIsEnabled`, `userSlugName`) VALUES ('Kleoniki', 'niki_passw', 'niki@genmail.com', 1, 'niki');
INSERT INTO `users` (`userName`, `userPassword`, `userEmail`, `userIsEnabled`, `userSlugName`) VALUES ('Ioannis', 'john_passw', 'john@genmail.com', 1, 'john');
INSERT INTO `users` (`userName`, `userPassword`, `userEmail`, `userIsEnabled`, `userSlugName`) VALUES ('`Styliani', 'stela_passw', 'stela@genmail.com', 1, 'stela');
INSERT INTO `users` (`userName`, `userPassword`, `userEmail`, `userIsEnabled`, `userIsAuthor`, `userSlugName`) VALUES ('Paraskevi', 'voula_passw', 'voula@genmail.com', 1, 0, 'voula');
@zzpzaf
zzpzaf / INS_USER_TIMESTAMP_PASSW_trigger1.sql
Created December 4, 2024 08:43
ang18-SSR-SEO-SupportBlog2-INS_USER_TIMESTAMP_PASSW_trigger1
DELIMITER @
CREATE TRIGGER `INS_USER_TIMESTAMP_PASSW`
BEFORE INSERT ON `users`
FOR EACH ROW
BEGIN
DECLARE salt VARCHAR(16);
-- Check if the password is 80 characters and hexadecimal
IF CHAR_LENGTH(NEW.`userPassword`) = 80 AND
NEW.`userPassword` REGEXP '^[0-9a-fA-F]+$' THEN
-- Leave the password unchanged