Skip to content

Instantly share code, notes, and snippets.

View georgebrata's full-sized avatar
👨‍💻
{writing|reading} quality code

George Brata georgebrata

👨‍💻
{writing|reading} quality code
View GitHub Profile
@georgebrata
georgebrata / APIService.md
Created November 18, 2024 10:09
Abstract API Service with typescript example

The design pattern below is Template Method Pattern used in combination with the Abstract Class Pattern. It is a common practice in web development to create an Abstract API Class that defines a general structure for handling API requests and then extend this abstract class for each specific entity. Here's how you can implement this same pattern in TypeScript:

TypeScript Example

// Abstract API Class (Template Method Pattern)
abstract class AbstractApi {
  protected baseUrl: string;
<style>@import url('https://fonts.googleapis.com/css2?family=Jost:wght@400;700&family=Noto+Sans:wght@400;700&display=swap');</style>
<table class="main contenttable" align="center" style="font-weight: normal;border-collapse: collapse;border: 0;margin-left: auto;margin-right: auto;padding: 0;color: #03170C;background-color: white;font-size: 16px;line-height: 26px;width: 600px;">
<tr>
<td class="border" style="border-collapse: collapse;border: 1px solid #eeeff0;margin: 0;padding: 0;-webkit-text-size-adjust: none;color: #03170C;font-size: 16px;line-height: 26px;">
<table style="font-weight: normal;border-collapse: collapse;border: 0;margin: 0;padding: 0;">
<tr>
<td colspan="4" valign="top" class="image-section" style="border-collapse: collapse;border: 0;margin: 0;padding: 0;-webkit-text-size-adjust: none;color: #03170C;font-size: 16px;line-height: 26px;background-color: #fff;border-bottom: 4px solid #03170C;">
<a href="https://solon.agency" target="_blank">
<img class="top-image" src=
@georgebrata
georgebrata / loader.js
Created August 3, 2023 07:15
usercentrics
!function() {
"use strict";
var e, t = "usercentrics-cmp";
!function(e) {
e.AMP_ENABLED = "ampEnabled",
e.AVOID_PREFETCH_SERVICES = "avoidPrefetchServices",
e.BLOCK_DATA_LAYER_PUSH = "blockDataLayerPush",
e.CONTROLLER_ID = "controllerId",
e.CONTROLLER_IDS = "controllerIds",
e.CLIENT_CONFIG = "clientConfig",
@georgebrata
georgebrata / email-template.html
Last active August 2, 2023 08:31
A simple, modern and responsive email template 📧
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<title>Responsive email template</title>
<!-- Meta Viewport -->
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<!-- Google Fonts -->
<link rel='preconnect' href='https://fonts.googleapis.com'>
=======
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Tisamed</title>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
@georgebrata
georgebrata / .htaccess
Created July 25, 2023 12:52
.htaccess for personal website
RewriteOptions inherit
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTP_HOST} ^georgebrata\.ro$ [OR]
RewriteCond %{HTTP_HOST} ^www\.georgebrata\.ro$
RewriteRule ^portfoliu$ "https\:\/\/georgebrata\.ro\/portfolio" [R=301,L]
@georgebrata
georgebrata / sr-only.css
Created February 6, 2023 08:22
Screenreader-only text CSS class
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
@georgebrata
georgebrata / list.txt
Last active March 20, 2022 18:46
highpoppeye-giveaway-10
erd1j6nmghhm3hxmwh7scakn0mgvp55cn2z6ngpf0m2jwmxnzyv46vfq3zcpne - WINNER
erd1gpkkw625mn9vx0dtx5mr3geknyzvg43x73vtc07jzsg7zuq5qjpq4qxnf3
erd1v86fy7t96glj68hqpan0flgazy922c686krmlvzx8m9ak5jtgz2sd0vy59
erd1954hmschhwpc3f7sw4y5yla5gxp56xfsvct62a775pp9w6u7mjmqvvxuq6
erd1zrg3l778fu8mtmt3cutpneku2t3jvp9j6da8dafp4dgmyslr0j3qk5q9dp
erd1kwcuhrhpej2cmdvq3w0e4qrmt2zhmu5sag9638uma045g9xh0gzsm437fk
erd1unrkl6vx9xtaxulqtt7ee39s73kcclc0d05x3u3lzlzc2dtmzpysveu4ka
erd1u9f53y733cdardxm50fk25zzxlmez9fs8anyypzg6nzqmvgfma5q35qlss
{
"project": {
"name": "Trial Manager - external",
"description": "Gestioneaza datele procese si datele asociate lor, precum imagini, data plantarii, terenuri, plante, tratamente, produse, daunatori si multe altele.",
"info": ""
},
"nav": {
"home": "acasa",
"search": "cauta proces",
"all": "toate procesele"
iVBORw0KGgoAAAANSUhEUgAABHwAAAR8CAIAAABg6hR4AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdeXwc93nn+eq7G+gGGvcNEgBPiKR46uKhg9RJybJlWZZkyyt7Nhk5k9iziTzZSTbjXW/ymh2HziTOZs3EyXoVH3Iky7IlmTJFiRQpihQPERJJUQRJAMR9o3F0A33X/lEWzKF1gEQ9XV1dn/dfMET/fk91VzWeb1fVr2yqqioAAAAAABl2owsAAAAAgFxG6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABBE6AIAAAAAQYQuAAAAABDkNLqAnJJMzoRG358cb5+a6Jya7IxM9UajY9GZ0Vh0LJ1OppLRZHLG6Brnxen0OZxeu93p8RZ7fSVeb3F+oDZQUB8oXFAQbCwuaXY4vUbXaIydOzy6j/nEkzHdxzQLiddTgsR7ZOV9ySzvO6zJLMcRdERfZ9m+TgKha17S6cTIYMtA35HBvrdGh09OhNpUNWV0UYKSyRnt82Vmevh3/6vN