Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

192 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

CmonLib

My Common Library (c'est mon)

A collection of several units with different purpose.

Cmon.AsyncGuard provides basic classes to execute a task in parallel synchonizing with the VCL, while taking care of the usual pitfalls with dangling pointers and ownership.

Cmon.CmdLineHandler and Cmon.CmdLineFileHandler contain classes for handling command line applications. Derived classes concentrate on the actual task to do.

Cmon.DataSense adds data sensitivity to controls that don't support that itself. Place a TDataSense component onto a form and all supported controls get a DataSource and DataField property in the object inspector.

Cmon.DataSetHelper offers a class helper for TDataSet with enumerator support as well as loading and storing classes and records.

Cmon.DataStorage allows persistance of fields and properties of class instances, especially forms and frames, by applying attributes.

Cmon.Dialogs abstracts standard dialogs from any framework. Built upon Cmon.Messaging.

Cmon.Factory provides generic factories for classes and interfaces.

Cmon.Initializing establishes a way to control initialize code for other units into the call to Application.Initialize. This allows to make adjustments before, which would be near to impossible if the initialize code would execute in the units initialization section.

Cmon.Logging adds a simple, abstract logging mechanism. Built upon Cmon.Messaging.

Cmon.Messaging provides some bases for using System.Messaging.

Cmon.MRU.Vcl provides TMRUFiles, a component to be linked to a PopupMenu or single menu item doing the bookkeeping for most recently used files.

Cmon.Observers introduces some helper classes for leveraging the observer support of several VCL controls as well as implement observer support for other classes.

Cmon.Utilities contains some class helpers and general purpose routines.

Most of the units are self-contained or form small clusters. This is to avoid when using one unit of the library having a bunch of others used indirectly. There are just a handful of units providing functionality used by several others.

  • The helpers for TComponent and TCollection as well as some methods from TUtilities in Cmon.Utilities are used in several places.
  • Auto-registering of messaging handlers makes use of Cmon.Initializing to allow some fine control without touching the initialization sections.
  • The classes of Cmon.Messaging come in too handy as that they were not preferred by those messaging handlers just mentioned.

None of these three units has any dependency on another CmonLib unit nor on any other unit outside the System namespace.

The other self-contained units are Cmon.AsyncGuard and Cmon.DataSetHelper, where the latter obviously has a dependency on Data.DB. The rest form those individual clusters with dependencies on at most Cmon.Messaging, Cmon.Initializing and Cmon.Utilities.

A couple of these CmonLib units have their roots in either an article on my blog or one of my sessions at the various CodeRage DE events.

About

My Common Library

Resources

Stars

36 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages