Showing posts with label HTML. Show all posts
Showing posts with label HTML. Show all posts

Plugins revisited

Mike's Notes

A reformat of the plugins listed in the industry workspace article.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

30/11/2025

Plugins revisited

By: Mike Peters
On a Sandy Beach: 07/11/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

This is an initial list of possible plugins, with a method and reference URL. Will be imported into the Plugin database and appear in the DevOps plugin editor workspace. Many of these will also be used in the demo workspaces.

This list will grow. Suggestions for anything useful are very welcome.

Method

  • iframe
  • blockquote
  • JavaScript
  • API
  • etc

Plugin Method Reference
AddThis    
Amazon Book iframe  
Apple Map    
Apple Music    
ArcGIS Map    
Atlassian Analytics    
Azure Map    
Cacophony API https://github.com/TheCacophonyProject/cacophony-web
CloudConvert API https://cloudconvert.com/api/v2/quickstart
CodePen   https://blog.codepen.io/docs/embeds/
CodeSandbox    
Confluence   https://community.atlassian.com/forums/Confluence-questions/Can-we-embed-a-confluence-page-content-in-a-website-without/qaq-p/2367532
Elfsight Weather    
Flightradar24 iframe https://forum.flightradar24.com/forum/radar-forums/flightradar24-web-page-and-apps/4383-select-an-aircraft-from-the-iframe-embedded-map
FormBlock    
GitHub-Embed    
GitLab Snippet    
Google Analytics    
Google Calendar iframe  
Google Docs iframe  
Google Form iframe  
Google Map iframe  
Google Meet    
Google Sheets  iframe  
Google Slides  iframe  
Instagram blockquote  
IUCN Threat Status    
Jira Advanced Roadmap    
JSBin    
Jupyter Notebook  iframe  
MailChimp    
Metservice Weather  iframe  
Microsft Forms    
Monaco Editor JavaScript https://stackoverflow.com/questions/73698181/embed-a-vscode-style-ide-in-the-browser
NASA Spot the Station    
NASA Worldview    
NetSuite Case Form    
NIWA CO2 Widget  iframe  
NIWA Tide Widget  iframe  
NIWA UV Widget  iframe  
NIWA Weather Widget  iframe  
Odoo Form    
PDF  iframe  
PostHog Analytics    
Survey Monkey    
Trello Board    
Trello Card    
TypeForm    
VesselFinder  API
JavaScript
https://www.vesselfinder.com/vessel-positions-api
https://www.vesselfinder.com/embed
Vimeo Video    
Weather Widget  iframe  
Wolfram Notebook    
Yandex Map    
Yandex Video    
YouTube Video  iframe  
Zoho Calendar    
Zoho Form    
Zoom Meeting    

Google’s “What’s New in Web UI” Talk: Less Custom Component JavaScript, More Web Standards

Mike's Notes

In the long term, this could help resolve UI issues.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library > Subscriptions > InfoQ Weekly Digest
  • Home > Handbook > 

Last Updated

15/06/2025

Google’s “What’s New in Web UI” Talk: Less Custom Component JavaScript, More Web Standards

By: Bruno Couriol
InfoQ: 08/06/2025

Una Kravets recently presented in a talk recent developments in Web UI supported by the Chrome team. Some common UI patterns that currently require a significant amount of JavaScript may soon be implemented in a declarative manner with new features of HTML and CSS, with less custom JavaScript, and with built-in accessibility.

The talk focuses on three particularly tricky UI patterns: customizable select menus, carousels, and hover cards. All three UI patterns are commonly found in design systems, with many lines of JavaScript to implement custom styling, presentation, layout, interaction, or accessibility patterns. With browser vendors evolving web standards to incorporate those patterns away from userland into the browsers themselves, developers may have less work to do in the future and simply rely on the platform. Less custom JavaScript also benefits users in the shape of increased performance. The proposed declarative APIs have already shipped in at least one stable browser engine.

The first pattern discussed is the customizable select menu. The native <select> element’s internal structure has been historically difficult to style consistently across browsers:

A common frustration for developers who try to work with the browser’s built-in form controls (<select> and various <input> types) is that they cannot customize the appearance of these controls to fit their site’s design or user experience. In a survey of web developers about form controls and components, the top reason that devs rewrite their own versions of these controls is the inability to sufficiently customize the appearance of the native controls.

The building blocks for a customizable select are the Popover API and Anchor Positioning.

The Popover API handles the floating list of options, ensuring it appears above other UI elements, is easy to dismiss, and manages focus. Popover has reached baseline status and is now available in all browsers.

Command invokers (command and commandfor attributes) provide a declarative HTML solution similar to popovertarget for connecting button clicks to actions (e.g., opening a dialog), reducing the need for boilerplate JavaScript.

Anchor Positioning is a CSS API that lets developers position elements relative to other elements, known as anchors. This API simplifies complex layout requirements for many interface features like menus and submenus, tooltips, selects, labels, cards, settings dialogs, and many more. Anchor Positioning is part of Interop 2025, meaning that it should land in all browsers by the end of the year.

The improved select element anatomy showcases two parts, a button, and a popover anchored to that button, all with corresponding selectors for targeting and styling:

Styles can be applied to the popover through the selector ::picker(select). An example of custom styling is as follows:

/* enter custom mode */
select,
::picker(select) {
  appearance: base-select;
}
/* style the button */
::select-fallback-button {
  background: gold;
  font-family: fantasy;
  font-size: 1.2rem;
}
/* style the picker dropdown */
::picker(select) {
  border-radius: 1rem;
}
/* style the options */
option {
  font-family: monospace;
  padding: 0.5rem 1rem 0.5rem 0;
  font-size: 1.2rem;
}
/* style selected option in the dropdown */
option:checked {
  background: powderblue;
}
/* style the option on hover or focus */
option:hover,
option:focus-visible {
  background-color: pink;
}
/* style the active option indicator */
option::before {
  content: '';
  font-size: 80%;
  margin: 0.5rem;
}
/* etc. */
body {
  padding: 2rem;
}

Developers are encouraged to review the full talk for additional technical details, demos, and explanations. The talk additionally explains how recent features from the CSS Overflow 5 specification, namely scroll buttons and scroll markers, enable scroll-driven animations (e.g., carousels) purely in CSS.

Ben Nadel on HTMX

Mike's Notes

The Pipi 9 CMS Engine (CMS) uses HTMX in the rendered User Interface (UI). HTMX interacts directly with the DOM.

Recently, Ben Nadel has been running a fascinating series of posts on his blog about his coding experiments with HTMX.

He shares a lot of CFML code on his blog, which is freely reusable. I learn a lot from Ben.

I will update this page with additional references to Ben's HTMX posts.

There is a repository on GitHub for this experiment.

Resources

References

  • Hypermedia Systems by Carson Gross

Repository

  • Home > Ajabbi Research > Library > Subject > CFML
  • Home > Ajabbi Research > Library > Authors > Ben Nadel
  • Home > Handbook > 

Last Updated

10/1/2026

Ben Nadel on HTMX

By: Ben Nadel
bennadel.com: 2025

A Passionate Web Developer With 26 Years Experience.

"I believe in love. I believe in compassion. I believe in human rights. I believe that we can afford to give more of these gifts to the world around us because it costs us nothing to be decent and kind and understanding. And, I want you to know that when you land on this site, you are accepted for who you are, no matter how you identify, what truths you live, or whatever kind of goofy shit makes you feel alive! Rock on with your bad self! - Ben Nadel"

You Can CMD+Click To Submit A Form To A New Browser Tab

By Ben Nadel on May 29, 2025

In the past couple of months, I've been digging into the HTMX JavaScript framework as a way to layer dynamic client-side functionality on top of my ColdFusion applications. I'm enamored with HTMX; but, unlike as with other frameworks such as Angular or Svelte, HTMX doesn't want to be an end-to-end holistic solution. Which means, I—as the developer—have to make a lot of decisions about where logic should live; and, whether or not something is a good idea. This is turning out to be a lot harder than I first imagined...

read more

Creating An hx-event Extension For Triggering Events In HTMX

By Ben Nadel on May 21, 2025

I'm still very deep in the "learning phase" of using HTMX, trying to understand how things are wired together and where the jagged edges might be. As a code kata, I wanted to see if I could create an HTMX extension that would trigger an event instead of an AJAX call. This way, I might be able to click on a button and bubble a synthetic event up the DOM (Document Object Model) tree to another element that is using an hx-on:{event} binding...

read more

Considering The Functional Requirements Of A Modal Window In An HTMX Web App

By Ben Nadel on May 17, 2025

To start with, I'm not a huge fan of modal windows in a web application. InVision used a ton of modal windows; and it felt like we painted ourselves into a corner that we couldn't get out of. My ambiguity on the matter has only been hardened by articles such as "we use too many damn modals", "modalz modalz modalz", and "who's afraid of a hard page load". That said, modals—and modal-adjacent experiences—do have their place. And, as I start to think about this experience in the context of an HTMX-powered web app, I wanted to come up with a set of functional requirements that I could aim for...

read more

Using A No-Content URL To Help Manage DOM Caching In HTMX And ColdFusion

By Ben Nadel on May 14, 2025

When you hx-boost / AJAX'ify your ColdFusion application with HTMX, HTMX will cache the state of the DOM (Document Object Model) as you navigate from page to page. This way, when you hit the browser's back button, HTMX can restore the previous DOM state, pulling it out of the LocalStorage API. The caveat being, HTMX only does this in response to an AJAX request. Which means, if we want to cache the current state of the DOM, we must issue an AJAX request and we must change the URL...

read more

HTMX Extensions Have Access To An Extended API

By Ben Nadel on May 12, 2025

The HTMX JavaScript framework exposes a public API that is a mixture of convenience methods, such as htmx.on() for event-binding; and framework-specific methods, such as htmx.process() for initializing externally-loaded HTML fragments. When creating an extension in HTMX, the extension's init() method is passed an api argument. At first, I thought this was just an abstracted reference to the aforementioned public API. But, upon further inspection, this reference contains an extended API to help specifically with HTMX extension authoring...

read more

What Happens When You Mutate The DOM Outside Of HTMX

By Ben Nadel on May 10, 2025

In a previous post, I looked at using Alpine.js inside an HTMX application. Since Alpine.js uses the MutationObserver API to observe changes within the Document Object Model (DOM) structure, it doesn't much matter where mutations are initiated. HTMX, however, isn't quite so dynamic. As such, I wanted to sanity check what happens when DOM mutations are initiated outside of the HTMX life-cycle...

read more

Returning JavaScript Tags In HTMX And ColdFusion

By Ben Nadel on May 8, 2025

The primary mechanic of HTMX is swapping out branches of the DOM (Document Object Model) in response to user interactions. Yesterday, however, I had to update a bunch of form inputs based on a <select> change. I wasn't sure how to do this in the cleanest "HTMX Way". Eventually, I settled upon a happy medium in which I use HTMX to execute one-off JavaScript task via an Out of Band (OOB) swap of a <script> tag...

read more

Using Stale-While-Revalidate Cache-Control Headers In HTMX And ColdFusion

By Ben Nadel on May 6, 2025

In my ColdFusion applications, unless I'm generating dynamic images that need to be cached, I almost never use the Cache-Control HTTP headers. Historically, all of my "caching needs" for perceived performance have been handled in my client-side Angular controllers. But, the HTMX JavaScript framework is all about leaning on the web platform to drive application mechanics. As such, I wanted to see how I might use the stale-while-revalidate response directive to boost performance in an HTMX and ColdFusion application...

read more

Keyboard Command Extension In HTMX And ColdFusion

By Ben Nadel on May 3, 2025

Earlier this week, I took a look at using extensions in an HTMX and ColdFusion application. Extensions allow us to tap into the event life-cycle of nodes withing the document object model (DOM); which, in turn, allows us to augment the document behavior as HTMX swaps content into and out of the rendered page. For this follow-up post, I take inspiration from the Docket app by Mark Story. Mark's HTMX and PHP app allows keyboards events to trigger DOM interaction. I wanted to try building something similar for a ColdFusion demo...

read more

Exploring Extensions In HTMX

By Ben Nadel on May 1, 2025

The HTMX JavaScript framework operates by traversing your Document Object Model (DOM) looking for elements that match a set of criteria, such as the existence of an hx-get or an hx-post attribute; and then, processes the matching elements by applying new behaviors. As it orchestrates these modifications, it emits a series of events on the DOM. Informally, these events can be a way for any JavaScript library to hook into the HTMX life-cycle by consuming the DOM as an event-bus; but, HTMX also provides an official way of doing this by using extensions...

read more

Using :scope To Identify The Host Element In .querySelectorAll()

By Ben Nadel on April 29, 2025

Here's a helpful tip that I learned the other day. When using a Document Object Model (DOM) method to query for HTML elements using a CSS selector (ex, .querySelectorAll()), the :scope pseudo-class can be used to identify the host element on which the method is being called. This allows us to use the direct descendant selector (>) to target children of the host element...

read more

Using hx-preserve To Persist Elements Across Swaps In HTMX

By Ben Nadel on April 27, 2025

With HTMX, you can use the hx-boost attribute to AJAX'ify navigation in your ColdFusion applications. Boosting pages increases the complexity of the application and can lead to some strange JavaScript behaviors. But, this trade-off in complexity ushers in the ability to maintain some state across pages. And one way to maintain state in HTMX is with the hx-preserve attribute...

read more

Previous / Next <CSS Selector> Both Use A Depth-First Algorithm In HTMX

By Ben Nadel on April 26, 2025

In the HTMX JavaScript framework, the hx-target attribute can reference other elements in the DOM (Document Object Model) by using CSS selectors, convenience keywords (such as this and next), and a combination thereof. Most of these are relatively straightforward; but, I ran into surprising results when using previous {CSS selector} and next {CSS selector}. I had read the documentation and interpreted it as meaning that the targeted elements were direct descendants of the same parent element. But, this is incorrect. Internally, HTMX is using a depth-first traversal algorithm—from the document root—to find the target nodes; and then, selects the one closest to the trigger element based on a depth-first node traversal order...

read more

Fetch API Will Propagate Non-POST Methods Upon Redirect

By Ben Nadel on April 26, 2025

In the book Hypermedia Systems by Carson Gross, the authors mention that the browser will propagate the HTTP Method upon redirect. In all my years of programming, I had never seen this; so, I sanity checked it and put the issue to rest in my head. Then, yesterday, I was listening to the Remote Ruby podcast with Chris Oliver and Andrew Mason, and they too mentioned this HTTP method propagation specifically for the JavaScript fetch() API. I feel like I was taking crazy-pills; so, I went to sanity check it again; and, discovered that the fetch() API will propagate the HTTP method; but, only for non-GET/POST methods...

read more

Using Alpine.js In HTMX

By Ben Nadel on April 25, 2025

The HTMX JavaScript framework allows us to move a lot of state management out of the browser and back into the ColdFusion server where the "source of truth" resides. But, not all interactions—and not all state—need to be sourced from the server. In such cases, we can use Alpine.js to provide light-weight state management and event binding in the browser. That said, both HTMX and Alpine.js want to "manage the DOM" and the event-bindings. As such, it's not obvious that they'll play well together. To get a sense of where the points-of-friction might lie, I wanted to put together a small demo that uses both HTMX and Alpine.js as well as the hx-boost attribute to "AJAX'ify" the page navigation

read more

Filtering HX-Trigger Server Events In HTMX And ColdFusion

By Ben Nadel on April 22, 2025

When building Single-Page Applications (SPA) with Angular and ColdFusion, one common pattern that I used was to return an event in every mutation-based API response. This event was then triggered on a client-side event-bus; and, various Angular components could respond to it as needed. In an HTMX multi-page application (MPA), we can use the HTTP response header, HX-Trigger, to achieve similar outcomes. And, we can use the filtering capabilities of the client-side hx-trigger attribute to limit the scope of this client-side response...

read more

Conditionally Preventing HX-Boost In HTMX Using An Extension

By Ben Nadel on April 19, 2025

In an HTMX application, the built-in hx-boost attribute tells HTMX to intercept all form and anchor interactions and "AJAX'ify" them. That is, prevent the default browser behavior and re-implement it using AJAX and the History API in order to side-step a full page-load. This is a neat feature; but, it doesn't have any hooks (that I can find) to conditionally prevent hx-boost from acting on a given link. Such a hook would be necessary when integrating content that comes out of a content management system (CMS). To try and add such a hook, I've created my first HTMX extension, prevent-boost, that can conditionally prevent boosting based on RegEx patterns and / or filter callbacks...

read more

Comparing Undefined Values With Optional Chaining In JavaScript

By Ben Nadel on April 17, 2025

Yesterday, while working on some HTMX experiments, I stumbled upon a feature of JavaScript that I didn't known: the undefined value, when compared to Booleans and numbers, always returns false. I've always thought of undefined as a falsy value (which it is); so, I was very surprising to see that undefined did not soft equal false. But, this turns out to be hugely beneficial when it comes to the optional chaining operator (aka, the safe navigation operation) in JavaScript...

read more

HTTP GET And HTTP POST Are Sufficient (For Me) In ColdFusion

By Ben Nadel on April 14, 2025

As of this writing, HTML supports two different HTTP methods: GET and POST. And for the last 25-years, I've been building web-based applications very successfully on top of these two operation. Many people, however, are not satisfied with these limitations; and, would like to see PUT, PATCH, and DELETE added to the list of natively supported methods in HTML. Personally, I'm quite satisfied with GET and POST and haven't really experience any pain-points. So, I thought it might be interesting to try and articulate my perspective....

read more

ColdFusion And HTMX Contact App

By Ben Nadel on April 13, 2025

A couple of weeks ago, I read Hypermedia Systems by Carson Gross. The book is an introduction to HTMX - a JavaScript library that extends the HTML specification and brings dynamic single-page application (SPA) type features to a traditional multi-page application (MPA) architecture. Some of the aspects of HTMX are fairly simple; but, some require a sizable mindset shift. As such, I thought it would be helpful (for me) to take the "contacts app" that Carson builds in the book and translate it into a ColdFusion application context.... 

read more

Hypermedia Systems By Carson Gross

By Ben Nadel on February 18, 2025

Last week, Peter Amiri - maintainer of the CFWheels framework for ColdFusion - sent me a hardcover copy of Hypermedia Systems by Carson Gross, Adam Stepinski, and Deniz Akşimşek. This book argues for the benefits of "Hypermedia Driven Applications" (HDA); and how leaning into the foundational nature of the web as a unified interface and hypermedia platform makes applications easier to build and more accessible while still achieving a high-bar of interactivity. This book is clear, concise, and quite compelling. Coming in at around 300 pages, I finished reading it in two day—I just couldn't put it down.....

read more

Embedding Wolfram Notebooks

Mike's Notes

My working notes on building the first plug-in.

Resources

References


Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

11/05/2025

Embedding Wolfram Notebooks

By: Mike Peters
On a Sandy Beach: 04/03/2025

Mike is the inventor and architect of Pipi and the founder of Ajabbi.

I want to visually explain to Ajabbi users the maths that Pipi uses. I am not a mathematician, but I have learned to use maths visually in experiments and for analysing data.

Pipi

Pipi makes use of these kinds of maths:

  • Fuzzy Logic
  • Markov
  • Monte Carlo
  • Statistics
  • Algorithms
  • Etc

Ajabbi SaaS

The applications being built also need to use math directly, and users may need access to mathematical tools. The Pipi Content Management System Engine (CMS) generates the UI and content on every web page, so this means using forms rather than direct coding.

Wolfram

Last year, I took some free online training provided by Wolfram on creating and editing Notebooks. Afterwards, one of their people contacted me, leading to an open discussion about how to embed Wolfram Notebooks and maths training on the Ajabbi website.

One of their partnership people contacted me. They said that WordPress had also provided embedding. So, the first port of call is to see how WordPress does it.

Since then, Wolfram has kindly given me access to Wolfram One for three months so that I can experiment, test, and post some examples.

To do

  • Make the first plug-in to embed Wolfram Notebooks onto the ajabbi.com web pages using a simple web form.
  • Extend the plug-in to be generic and work with other 3rd-party websites.
  • Configure an embedded notebook to analyse live data at Ajabbi (I don't know how yet).
  • Embed free relevant maths instruction beside the notebooks.

WordPress

WordPress offers a plug-in for embedding content from third-party websites. The plug-in appears as a simple web form.

Embedding

Embedding makes use of the HTML tag iFrame.

Code

<iframe src="demo_iframe.htm" height="200" width="300" title="Iframe Example"></iframe>

Properties

Attribute Value Description
allow   Specifies a feature policy for the <iframe>
allowfullscreen TRUE Set to true if the <iframe> can activate fullscreen mode by calling the requestFullscreen() method
FALSE
allowpaymentrequest TRUE Set to true if a cross-origin <iframe> should be allowed to invoke the Payment Request API
FALSE
height pixels Specifies the height of an <iframe>. Default height is 150 pixels
loading eager Specifies whether a browser should load an iframe immediately or to defer loading of iframes until some conditions are met
lazy
name text Specifies the name of an <iframe>
referrerpolicy no-referrer Specifies which referrer information to send when fetching the iframe
no-referrer-when-downgrade
origin
origin-when-cross-origin
same-origin
strict-origin-when-cross-origin
unsafe-url
sandbox allow-forms Enables an extra set of restrictions for the content in an <iframe>
allow-pointer-lock
allow-popups
allow-same-origin
allow-scripts
allow-top-navigation
src URL Specifies the address of the document to embed in the <iframe>
srcdoc HTML_code Specifies the HTML content of the page to show in the <iframe>
width pixels Specifies the width of an <iframe>. Default width is 300 pixels

Web Almanac 2024

Mike's Notes

Smashing Magazine's first issue for 2025 includes a helpful review of the Web Almanac. Here are some notes from it, including an excellent chapter summarising structured data.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library > Subscriptions > Smashing Magazine
  • Home > Handbook > 

Last Updated

17/05/2025

Web Almanac 2024

By: Iris Lješnjanin
Smashing Magazine: Issue 489, 7 Jan 2025

Looking back, what was the state of the web in 2024? The Web Almanac combines the raw stats and trends of the HTTP Archive with the expertise of the web community. The results are backed up by accurate data taken from 86 people who have volunteered countless hours in the planning, research, writing, and production phases.

With 16.9M websites tested, the 2024 edition is comprised of 19 chapters spanning aspects of page content, UX, publishing, and distribution. An insightful look into the state of performance is included, too. A massive Thank You to all of the contributors for their time and dedication!

Part I Chapter 3 Structured data

The Web Almanac 2024: 11 Nov 2024

Written by Andrea Volpini
Reviewed by Jarno van Driel and Ryan Levering
Analyzed by Nurullah Demir
Edited by James Gallagher

Table of Contents

  • Introduction
  • The expanding landscape of structured data
  • Key developments in 2023-2024:
  • Beyond traditional implementation
  • Structured data in the age of AI and machine learning
  • What this chapter provides
  • Key concepts
  • Linked data and the semantic web
  • Open data and the 5 stars model
  • AI-Powered search, voice assistants, and digital assistants
  • Semantic search engines and AI-powered search
  • The role of structured data
  • The shift to AI-powered search and its implications
  • Rich results and knowledge panels
  • Knowledge graphs and Graph RAG
  • Difference between Labeled Property Graphs and RDF graphs
  • Data Commons
  • Digital Product Passports and GS1 Digital Link
  • AI, machine learning, and structured data
  • Semantic SEO and data quality
  • A year in review
  • Structured data usage trends (2022-2024)
  • Comparison of JSON-LD, Microdata, and RDFa usage
  • RDFa
  • Dublin Core
  • Open Graph
  • Twitter
  • Facebook
  • Microformats and Microformats2
  • Microdata
  • JSON-LD
  • JSON-LD relationships
  • sameAs
  • JSON-LD context
  • Emerging trends and future outlook
  • Looking ahead: the future of structured data
  • Conclusion

Free IO Tools

Mike's Notes

This one popped up in Smashing Magazine this morning. A fantastic suite of online utility tools.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

17/05/2025

Tools To Simplify Everyday Tasks

Smashing Magazine: Issue #488 • Dec 24, 2024

By: Cosima Mielke

You provide the input, they provide the output as a result, that’s the idea behind IO Tools. IO Tools is an extensive suite of useful web apps for designers, developers, authors, marketers, analysts, and even gamers.

Whether you’re looking for an empty lines remover, a space-to-tab converter, a text compare tool, or a name generator, with more than 300 tools available, chances are good that IO Tools has just what you need.

 You can use the tools for free; however, some of them, like AI tools, consume credits (you get 50 free credits daily). One for the bookmarks. (cm)

Absolute vs relative url

Mike's Notes

This note came from Stack Overflow.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

18/04/2025

Relative path in HTML

By: arielnmz
Stack Overflow: 4 June 2014

You say your website is in http://localhost/mywebsite, and let's say that your image is inside a subfolder named pictures/:

Absolute path

If you use an absolute path, / would point to the root of the site, not the root of the document: localhost in your case. That's why you need to specify your document's folder to access the pictures folder:

"/mywebsite/pictures/picture.png"

And it would be the same as:

"http://localhost/mywebsite/pictures/picture.png"

Relative path

A relative path is always relative to the root of the document, so if your html is at the same level of the directory, you'd need to start the path directly with your picture's directory name:

"pictures/picture.png"

But there are other perks with relative paths:

dot-slash (./)

Dot (.) points to the same directory and the slash (/) gives access to it:

So this:

"pictures/picture.png"

Would be the same as this:

"./pictures/picture.png"

Double-dot-slash (../)

In this case, a double dot (..) points to the upper directory and likewise, the slash (/) gives you access to it. So if you wanted to access a picture that is on a directory one level above of the current directory your document is, your URL would look like this:

"../picture.png"

You can play around with them as much as you want, a little example would be this:

Let's say you're on directory A, and you want to access directory X.

- root
   |- a
      |- A
   |- b
   |- x
      |- X

Your URL would look either:

Absolute path

"/x/X/picture.png"

Or:

Relative path

"./../x/X/picture.png"

Checkboxes: Design Guidelines

Mike's Notes

Some design guidelines on checkboxes.

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

17/05/2025

Checkboxes: Design Guidelines

By: 
Wikipedia: 2024

"A checkbox (check box,  tick box) is a graphical widget that allows the user to make a binary choice, i.e. a choice between two mutually exclusive options. For example, the user may have to answer 'yes' (checked) or 'no' (not checked) on a simple yes/no question.

Checkboxes are shown as empty boxes when unchecked and with a tick or cross inside (depending on the graphical user interface) when checked. A caption describing the checkbox's meaning is normally shown adjacent to the checkbox. Inverting the state of a checkbox is done by clicking the mouse on the box or the caption or by using a keyboard shortcut, such as the space bar.

A series of checkboxes is often presented, each with a binary choice between two options. The user may then select several of the choices. This is contrasted with the radio button, in which only a single option is selectable from several mutually exclusive choices.

Checkboxes may be disabled (indicated "greyed out") to inform the user of their existence and possible use despite momentary unavailability." - Wikipedia

Code

<fieldset>
  <legend>Choose your monster's features:</legend>

  <div>
    <input type="checkbox" id="scales" name="scales" checked />
    <label for="scales">Scales</label>
  </div>

  <div>
    <input type="checkbox" id="horns" name="horns" />
    <label for="horns">Horns</label>
  </div>
</fieldset>

CommonMark

Mike's Notes

Note

Resources

References

  • Reference

Repository

  • Home > Ajabbi Research > Library >
  • Home > Handbook > 

Last Updated

17/05/2025

CommonMark

By: 
commonmark.com: 20/04/2025

A strongly defined, highly compatible specification of Markdown

What is Markdown?

It’s a plain text format for writing structured documents, based on formatting conventions from email and usenet.

Who created Markdown?

It was developed in 2004 by John Gruber in collaboration with Aaron Swartz. Gruber wrote the first markdown-to-html converter in Perl, and it soon became widely used in websites. By 2014 there were dozens of implementations in many languages.

Why is CommonMark needed?

John Gruber’s canonical description of Markdown’s syntax does not specify the syntax unambiguously.

In the absence of a spec, early implementers consulted the original Markdown.pl code to resolve these ambiguities. But Markdown.pl was quite buggy, and gave manifestly bad results in many cases, so it was not a satisfactory replacement for a spec. Markdown.pl was last updated December 17th, 2004.

Because there is no unambiguous spec, implementations have diverged considerably over the last 10 years. As a result, users are often surprised to find that a document that renders one way on one system (say, a GitHub wiki) renders differently on another (say, converting to docbook using Pandoc). To make matters worse, because nothing in Markdown counts as a “syntax error,” the divergence often isn’t discovered right away.

There’s no standard test suite for Markdown; MDTest is the closest thing we have. The only way to resolve Markdown ambiguities and inconsistencies is Babelmark, which compares the output of 20+ implementations of Markdown against each other to see if a consensus emerges.

We propose a standard, unambiguous syntax specification for Markdown, along with a suite of comprehensive tests to validate Markdown implementations against this specification. We believe this is necessary, even essential, for the future of Markdown.

That’s what we call CommonMark.

Who are you today?

We’re a group of Markdown fans continually working toward the vision of CommonMark — a standard, interoperable and testable version of Markdown.

  • John MacFarlane, jgm@berkeley.edu
  • Martin Woodward, martinwoodward@github.com
  • Jeff Atwood, jatwood@codinghorror.com

Who were you in 2014, when this started?

We’re a group of Markdown fans who either work at companies with industrial scale deployments of Markdown, have written Markdown parsers, have extensive experience supporting Markdown with end users – or all of the above.

  • John MacFarlane, of Pandoc
  • David Greenspan, of Meteor
  • Vicent Marti, of GitHub
  • Neil Williams, of Reddit
  • Benjamin Dumke-von der Ehe, of Stack Overflow / Stack Exchange
  • Jeff Atwood, of Discourse

How can I help?

Exercise our reference implementations, or find a community implementation in your preferred environment or language. Provide feedback!

If a CommonMark implementation does not already exist in your preferred environment or language, try implementing your own CommonMark parser. One of our major goals is to strongly specify Markdown, and to eliminate the many old inconsistencies and ambiguities that made using Markdown so difficult. Did we succeed?

Where can I find it?

spec.commonmark.org

The CommonMark specification.

code.commonmark.org

Reference implementation and validation test suite on GitHub.

talk.commonmark.org

Public discussion area and mailing list via Discourse.

commonmark.org/help

Quick reference card and interactive tutorial for learning Markdown.

spec.commonmark.org/dingus/

Live testing tool powered by the reference implementation.

When is the spec final?

The current version of the CommonMark spec is quite robust after many years of public feedback.

There are currently CommonMark implementations for dozens of programming languages, and the following sites and projects have adopted CommonMark:

  • Discourse
  • GitHub
  • GitLab
  • Reddit
  • Qt
  • Stack Overflow / Stack Exchange
  • Swift