From 9313ceff83949648963acfc3327ef32a030a380e Mon Sep 17 00:00:00 2001 From: Herwin Date: Mon, 27 Jun 2022 11:35:39 +0200 Subject: [PATCH] Finished composer base, fixed issues, Missing tables Update composer.php, content.php, and 5 more files... --- commons/composer.php | 259 ++++++++++++++---- commons/content.php | 7 +- commons/strings.json | 10 + content/index.php | 51 ++-- content/items/lscom-cli.bak.json | 370 +++++++++++++++++++++++++ content/items/lscom-cli.json | 449 +++++++------------------------ content/items/test2.json | 2 +- 7 files changed, 708 insertions(+), 440 deletions(-) create mode 100644 content/items/lscom-cli.bak.json diff --git a/commons/composer.php b/commons/composer.php index f63dbae..ca7791f 100644 --- a/commons/composer.php +++ b/commons/composer.php @@ -1,9 +1,9 @@ Margin const GENERIC_MARGIN_NO_TOP = ["no-top-margin", "mt-0"]; const GENERIC_MARGIN_NO_BOTTOM = ["no-bottom-margin", "mb-0"]; @@ -75,21 +76,30 @@ abstract class ComposerElementModifiersTest { const GENERIC_PADDING_NO_BOTTOM = ["no-bottom-padding", "pb-0"]; const GENERIC_PADDING_NO_LEFT = ["no-left-padding", "pl-0"]; const GENERIC_PADDING_NO_RIGHT = ["no-right-padding", "pr-0"]; - const GENERIC_PADDING_NO_X = ["no-y-padding", "px-0"]; - const GENERIC_PADDING_NO_Y = ["no-x-padding", "py-0"]; + const GENERIC_PADDING_NO_X = ["no-x-padding", "px-0"]; + const GENERIC_PADDING_NO_Y = ["no-y-padding", "py-0"]; const GENERIC_PADDING_NONE = ["no-padding", "p-0" ]; // Containers - const CONTAINER_SCROLL_HORIZONTAL = ["h-scroll", "overflow-x-scroll hide-scrollbar"]; + const CONTAINER_SCROLL_HORIZONTAL = ["horizontal-scroll", "overflow-x-scroll hide-scrollbar"]; const CONTAINER_CARD = ["card", "card"]; // Buttons - const BUTTON_THIN = ["thin", "?thin"]; - const BUTTON_THICK = ["thick", "?thick"]; + const BUTTON_THIN = ["thin", "btn-sm"]; + const BUTTON_THICK = ["thick", "btn-lg"]; + const BUTTON_ROUNDED = ["rounded", "btn-rounded"]; + const BUTTON_CIRCLE = ["circle", "rounded-circle"]; // Horizontal ruler const HR_SUBTLE = ["subtle", "subtle"]; + // Collapse + const DETAILS_NO_ROUNDING = ["no-rounding", ""]; + const DETAILS_CLOSED = ["closed", ""]; + + // Code + const CODE_BLOCK = ["code-block", "w-full d-inline-block"]; + // Other internal constants const _INDEX_KEY = 0; const _INDEX_CLASSES = 1; @@ -106,33 +116,33 @@ abstract class ComposerElementModifiersTest { /** * Returns the given modifier's constant's key - * @param array $modifier_data A modifier constant defined in "ComposerElementModifiersTest". + * @param array $modifier_data A modifier constant defined in "ComposerElementModifiers". * @return string The modifier's key or an empty string if an error was encountered. */ static function get_modifier_key(array $modifier_data) : string { - return sizeof($modifier_data) >= 1 ? $modifier_data[ComposerElementModifiersTest::_INDEX_KEY] : ''; + return sizeof($modifier_data) >= 1 ? $modifier_data[ComposerElementModifiers::_INDEX_KEY] : ''; } /** * Returns the given modifier's constant's classes - * @param array $modifier_data A modifier constant defined in "ComposerElementModifiersTest". + * @param array $modifier_data A modifier constant defined in "ComposerElementModifiers". * @return string The modifier's classes or an empty string if an error was encountered. */ static function get_modifier_classes(array $modifier_data) : string { - return sizeof($modifier_data) >= 2 ? $modifier_data[ComposerElementModifiersTest::_INDEX_CLASSES] : ''; + return sizeof($modifier_data) >= 2 ? $modifier_data[ComposerElementModifiers::_INDEX_CLASSES] : ''; } /** * @param string $modifier_key * @return string The resolved DOM classes, or an empty string if the given modifier is unknown. */ - static function getClassesFromKey(string $modifier_key) : string { - foreach(ComposerElementModifiersTest::getConstants() as $constant_values) { + static function get_classes_from_key(string $modifier_key) : string { + foreach(ComposerElementModifiers::getConstants() as $constant_values) { if(!is_array($constant_values)) { continue; } - if($modifier_key == $constant_values[ComposerElementModifiersTest::_INDEX_KEY]) { - return $constant_values[ComposerElementModifiersTest::_INDEX_CLASSES]; + if($modifier_key == $constant_values[ComposerElementModifiers::_INDEX_KEY]) { + return $constant_values[ComposerElementModifiers::_INDEX_CLASSES]; } } return ""; @@ -140,7 +150,7 @@ abstract class ComposerElementModifiersTest { static function is_modifier_in_modifiers(array $modifier_data, array $modifiers) : bool { foreach($modifiers as $modifier) { - if($modifier_data[ComposerElementModifiersTest::_INDEX_KEY] == $modifier) { + if($modifier_data[ComposerElementModifiers::_INDEX_KEY] == $modifier) { return true; } } @@ -182,7 +192,46 @@ class ComposerContent { $htmlCode .= $element->get_html($this); } - return $this->metadata->apply_template($htmlCode); + return $this->metadata->apply_template($this, $htmlCode); + } + + public function get_head_title() : string { + if(!is_null($this->metadata->head->title)) { + return localize_private($this->metadata->head->title, $this->strings, false); + } + + return localize("content.default.head.title"); + } + + public function get_head_description() : string { + if(!is_null($this->metadata->head->title)) { + return localize_private($this->metadata->head->description, $this->strings, false); + } + + return localize("content.default.head.description"); + } + + public function get_opengraph_tags(?string $title_prefix, ?string $type_override, ?string $url_override, + ?string $image_url_override, ?string $image_url_fallback) : string { + global $host_uri; + + $final_image_uri = (is_null($image_url_override) ? (is_null($this->metadata->opengraph->image) ? + $image_url_fallback : $this->metadata->opengraph->image) : $image_url_override); + + return 'metadata->opengraph->title, $this->strings, false)) . + '" />metadata->opengraph->description, $this->strings, false)) . + '" />metadata->opengraph->type) + : $type_override) . '" />'; + // } } @@ -190,14 +239,16 @@ class ComposerContentMetadata { public string $title; public string $description; public string $template; + public ComposerContentMetadataHead $head; public ComposerContentMetadataOpengraph $opengraph; public ?ComposerContentMetadataArticle $article; - function __construct(string $title, string $description, string $template, ComposerContentMetadataOpengraph $opengraph, - ?ComposerContentMetadataArticle $article) { + function __construct(string $title, string $description, string $template, ComposerContentMetadataHead $head, + ComposerContentMetadataOpengraph $opengraph, ?ComposerContentMetadataArticle $article) { $this->title = $title; $this->description = $description; $this->template = $template; + $this->head = $head; $this->opengraph = $opengraph; $this->article = $article; @@ -212,6 +263,9 @@ class ComposerContentMetadata { key_exists("title", $json_data) ? $json_data["title"] : "", key_exists("description", $json_data) ? $json_data["description"] : "", key_exists("template", $json_data) ? $json_data["template"] : "", + ComposerContentMetadataHead::from_json( + key_exists("head", $json_data) ? $json_data["head"] : array() + ), ComposerContentMetadataOpengraph::from_json( key_exists("opengraph", $json_data) ? $json_data["opengraph"] : array() ), @@ -220,12 +274,13 @@ class ComposerContentMetadata { ); } - function apply_template(string $inner_html) : string { + function apply_template(ComposerContent $contentRoot, string $inner_html) : string { switch($this->template) { case ComposerTemplates::ARTICLE: $inner_html = '
' . '

' . - '  ' . localize($this->article->title) . + '  ' . + localize_private($this->article->title, $contentRoot->strings, false) . '' . '\$subTitle' . '

' . '
' . @@ -250,35 +305,41 @@ class ComposerContentMetadata { } return $inner_html; } - - /*function start_content_card($iconClasses, $title, $subTitle) { - echo('
'); - echo('

  '.localize($title)); - echo(''.$subTitle.'

'); - echo('
'); } + +class ComposerContentMetadataHead { + public ?string $title; + public ?string $description; - function end_content_card() { - echo('
'); - }*/ + function __construct(?string $title, ?string $description) { + $this->title = $title; + $this->description = $description; + } + + static function from_json(array $json_data) : ComposerContentMetadataHead { + return new ComposerContentMetadataHead( + key_exists("title", $json_data) ? $json_data["title"] : null, + key_exists("description", $json_data) ? $json_data["description"] : null + ); + } } class ComposerContentMetadataOpengraph { - private ?string $title; - private ?string $description; - private ?string $type; - private ?string $url; - private ?string $image; - private ?string $imageType; + public ?string $title; + public ?string $description; + public ?string $type; + public ?string $url; + public ?string $image; + public ?string $image_type; function __construct(?string $title, ?string $description, ?string $type, ?string $url, ?string $image, - ?string $imageType) { + ?string $image_type) { $this->title = $title; $this->description = $description; $this->type = $type; $this->url = $url; $this->image = $image; - $this->imageType = $imageType; + $this->image_type = $image_type; } static function from_json(array $json_data) : ComposerContentMetadataOpengraph { @@ -288,13 +349,9 @@ class ComposerContentMetadataOpengraph { key_exists("type", $json_data) ? $json_data["type"] : null, key_exists("url", $json_data) ? $json_data["url"] : null, key_exists("image", $json_data) ? $json_data["image"] : null, - key_exists("imageType", $json_data) ? $json_data["imageType"] : null, + key_exists("image_type", $json_data) ? $json_data["image_type"] : null, ); } - - public function __get($property) { - return is_null($this->$property) ? "" : $this->$property; - } } class ComposerContentMetadataArticle { @@ -326,6 +383,7 @@ class ComposerElement { // Global parameters private string $type; private ?array $modifiers; + private ?string $link; // Any direct element-container private ?array $parts; @@ -353,11 +411,15 @@ class ComposerElement { // Code's parameters private ?array $code; - function __construct(string $type, ?array $modifiers, ?array $parts, ?string $content, bool $localize, - ?int $padding, ?int $margin, ?int $size, ?array $head, ?array $body, ?int $colspan, - ?int $rowspan, ?int $indent, ?array $code) { + // Button's parameters + private ?string $color; + + function __construct(string $type, ?array $modifiers, ?string $link, ?array $parts, ?string $content, + bool $localize, ?int $padding, ?int $margin, ?int $size, ?array $head, ?array $body, + ?int $colspan, ?int $rowspan, ?int $indent, ?array $code, ?string $color) { $this->type = $type; $this->modifiers = $modifiers; + $this->link = $link; $this->parts = $parts; $this->content = $content; $this->localize = $localize; @@ -370,6 +432,7 @@ class ComposerElement { $this->rowspan = $rowspan; $this->indent = $indent; $this->code = $code; + $this->color = $color; } static function from_json_array(array $json_dataArray) : array { @@ -383,7 +446,8 @@ class ComposerElement { static function from_json(array $json_data) : ComposerElement { return new ComposerElement( key_exists("type", $json_data) ? $json_data["type"] : ComposerElementTypes::UNSET, - key_exists("modifiers", $json_data) ? $json_data["modifiers"] : null, + key_exists("modifiers", $json_data) ? $json_data["modifiers"] : [], + key_exists("link", $json_data) ? $json_data["link"] : null, key_exists("parts", $json_data) ? ComposerElement::from_json_array($json_data["parts"]) : null, key_exists("content", $json_data) ? $json_data["content"] : null, key_exists("localize", $json_data) ? $json_data["localize"] : true, @@ -396,6 +460,7 @@ class ComposerElement { key_exists("rowspan", $json_data) ? $json_data["rowspan"] : null, key_exists("indent", $json_data) ? $json_data["indent"] : null, key_exists("code", $json_data) ? $json_data["code"] : null, + key_exists("color", $json_data) ? $json_data["color"] : null, ); } @@ -473,7 +538,7 @@ class ComposerElement { // Combining classes. foreach($this->modifiers as $modifier) { /** @var string $modifier */ - $classes .= ComposerElementModifiersTest::getClassesFromKey($modifier) . ' '; + $classes .= ComposerElementModifiers::get_classes_from_key($modifier) . ' '; } // Removing redundant and useless spaces. @@ -491,10 +556,18 @@ class ComposerElement { public function get_html(ComposerContent $contentRoot) : string { $htmlCode = ""; + if(!is_null($this->link)) { + $htmlCode .= ''; + } + switch($this->type) { case ComposerElementTypes::UNSET: $htmlCode .= "

error.unset !

"; break; + + case ComposerElementTypes::RAW: + $htmlCode .= $this->get_inner_html($contentRoot); + break; case ComposerElementTypes::H1: case ComposerElementTypes::H2: @@ -517,14 +590,18 @@ class ComposerElement { // Composing the paragraph $htmlCode .= '

' . $this->get_inner_html($contentRoot) . '

'; break; case ComposerElementTypes::BUTTON: + // Composing the button. + $htmlCode .= ''; + break; case ComposerElementTypes::CODE: @@ -532,8 +609,9 @@ class ComposerElement { $_paragraph_ident_level = is_null($this->indent) ? 0 : $this->indent; // Opening the code element. + // Note: The "mt-10" may have to be removed if it clashes with 'no-margin-top' ! $htmlCode .= ''; + ' mt-10 ml-md-' . ($_paragraph_ident_level * 5) . '">'; // Adding code lines. if(!is_null($this->code)) { @@ -564,19 +642,75 @@ class ComposerElement { // Defining the padding's size. $_container_padding = is_null($this->padding) ? 10 : $this->padding; - // Getting the modifiers' classes - $_container_classes = $this->get_modifiers_classes(); - // Composing the container. - $htmlCode .= '
' . + // FIXME: Can be re-standardized if a check for the default mt-10 is added at the end after adding the mods. + $htmlCode .= '
modifiers + ) ? "" : " mt-10") . + (ComposerElementModifiers::is_modifier_in_modifiers( + ComposerElementModifiers::GENERIC_PADDING_NO_X, $this->modifiers + ) ? " " . ComposerElementModifiers::get_modifier_classes( + ComposerElementModifiers::GENERIC_PADDING_NO_X ) : "") . + (ComposerElementModifiers::is_modifier_in_modifiers( + ComposerElementModifiers::GENERIC_PADDING_NO_BOTTOM, $this->modifiers + ) ? " " . ComposerElementModifiers::get_modifier_classes( + ComposerElementModifiers::GENERIC_PADDING_NO_BOTTOM ) : "") . + (ComposerElementModifiers::is_modifier_in_modifiers( + ComposerElementModifiers::GENERIC_PADDING_NO_TOP, $this->modifiers + ) ? " " . ComposerElementModifiers::get_modifier_classes( + ComposerElementModifiers::GENERIC_PADDING_NO_TOP ) : "") . + (ComposerElementModifiers::is_modifier_in_modifiers( + ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL, $this->modifiers + ) ? " " . ComposerElementModifiers::get_modifier_classes( + ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL ) : "") . '">' . $this->get_inner_html($contentRoot) . '
'; - break; case ComposerElementTypes::COLLAPSE: - break; + // Composing collapse. + $htmlCode .= '
modifiers + ) ? "closed" : "open") . '>'; + $htmlCode .= ''; + + $_title = "title"; + $_subtitle = "subtitle"; + + $htmlCode .= '

' . + '' . + '' . + '  '.$_title. + ''.$_subtitle.'

'; + + $htmlCode .= '
modifiers + ) ? " p-0 py-01" : "") . + (ComposerElementModifiers::is_modifier_in_modifiers( + ComposerElementModifiers::DETAILS_NO_ROUNDING, $this->modifiers + ) ? " rounded-0" : "") . ' border-0 border-bottom">' . + $this->get_inner_html($contentRoot) . '
'; + break; + case ComposerElementTypes::SPACER: // Defining the spacer's size. $_spacer_size = is_null($this->size) ? 1 : $this->size; @@ -588,10 +722,13 @@ class ComposerElement { case ComposerElementTypes::IMAGE: break; + case ComposerElementTypes::TABLE: break; + case ComposerElementTypes::GRID: break; + case ComposerElementTypes::GLIDER: break; @@ -600,6 +737,10 @@ class ComposerElement { break; } + if(!is_null($this->link)) { + $htmlCode .= '
'; + } + return $htmlCode; } } diff --git a/commons/content.php b/commons/content.php index 58bf658..b734fd3 100644 --- a/commons/content.php +++ b/commons/content.php @@ -186,9 +186,9 @@ function processStandardContentSubNode(mixed $elementNode, string $prepend="", s echo($prepend.getContentItemText($elementNode["content"], false, true).$append); } } -} +}*/ -function createElementNode(mixed $elementNode, string $prepend="", string $append="") : void { +/*function createElementNode(mixed $elementNode, string $prepend="", string $append="") : void { // Checking if we actually have a JSON object. if(!is_array($elementNode)) { echo('

Not array node !

'); @@ -615,7 +615,6 @@ function createElementNode(mixed $elementNode, string $prepend="", string $appen default: printErrorTextElement(sprintf(localize("error.content.data.part.unknown"), $elementNode["type"])); break; - } -}*/ +}/**/ ?> diff --git a/commons/strings.json b/commons/strings.json index 2781f44..410f614 100644 --- a/commons/strings.json +++ b/commons/strings.json @@ -144,6 +144,11 @@ "content.commons.download.multiple": "Downloads", "content.commons.version": "Version", + "content.default.head.title" : "No title found !", + "content.default.head.description" : "No description found !", + "content.default.opengraph.title" : "No title found !", + "content.default.opengraph.description" : "No description found !", + "about.biography.title": "Who am I ?", "about.philosophy.title": "Projects philosophy", "about.skills.title": "Skills", @@ -295,6 +300,11 @@ "content.commons.download.multiple": "Téléchargements", "content.commons.version": "Version", + "content.default.head.title" : "Aucun titre trouvé !", + "content.default.head.description" : "Aucune description trouvée !", + "content.default.opengraph.title" : "Aucun titre trouvé !", + "content.default.opengraph.description" : "Aucune description trouvée !", + "about.biography.title": "Qui suis-je ?", "about.philosophy.title": "Philosophie des projets", "about.skills.title": "Compétences", diff --git a/content/index.php b/content/index.php index 37a5e22..c1dc3b1 100644 --- a/content/index.php +++ b/content/index.php @@ -26,39 +26,34 @@ if($content_has_error) { ' . localize("error.content.title.generic") . ' - Nibble Poker'); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); } else { - $_metaTitle = localize("error.content.data.no.title"); - $_metaDescription = localize("error.content.data.no.description"); - /*if($requested_content_display_type == ContentDisplayType::CONTENT) { - if(array_key_exists("meta", $requested_item_data)) { - if(array_key_exists("title", $requested_item_data["meta"])) { - $_metaTitle = getContentItemText($requested_item_data["meta"]["title"]); - } - if(array_key_exists("description", $requested_item_data["meta"])) { - $_metaDescription = getContentItemText($requested_item_data["meta"]["description"]); - } - } + if($requested_content_display_type == ContentDisplayType::CONTENT) { + echo(''.$content->get_head_title().' - Nibble Poker'); + echo(''); + echo($content->get_opengraph_tags("Nibble Poker - ", "website", $host_uri, + null, $host_uri . "/resources/Azias/logos/opengraph.png")); } else { - $_metaTitle = localize("content.title.search.card"); - $_metaDescription = ""; - }/**/ + echo('' . localize("content.title.search.card") . ' - Nibble Poker'); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + echo(''); + } } - //$content->metadata->title - - // Printing the title, meta and opengraph tags. - echo(''.$_metaTitle.' - Nibble Poker'); - echo(''); - echo(''); - echo(''); ?> - - - - diff --git a/content/items/lscom-cli.bak.json b/content/items/lscom-cli.bak.json new file mode 100644 index 0000000..1450bae --- /dev/null +++ b/content/items/lscom-cli.bak.json @@ -0,0 +1,370 @@ +{ + "title": { + "icon": "fad fa-terminal", + "page": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, + "card": { + "main": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, + "sub": {"en": ""} + } + }, + "meta": { + "title": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, + "description": { + "en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.", + "fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM." + } + }, + "parts": [ + { + "type": "container", "padding": 20, + "modifiers": ["no-bottom-padding", "no-top-margin"], + "content": { + "parts": [ + { + "type": "h1", + "content": {"en": "Introduction"} + },{ + "type": "paragraph", "indent": 2, + "content": {"en": "A simple cli tool that can list COM ports with their full name easily and cleanly."} + },{ + "type": "paragraph", "indent": 2, + "content": { + "en": "This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port." + } + },{ + "type": "paragraph", "indent": 2, + "content": { + "en": "The earliest version of Windows that can be used is Windows XP x64 or Windows Vista due to the fact that RegGetValueW is not available on older versions of Windows." + } + } + ] + } + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-top-padding", "no-bottom-padding"], + "content": { + "parts": [ + { + "type": "h1", + "content": {"en": "Usage", "fr": "Utilisation"} + },{ + "type": "code", "indent": 2, + "modifiers": ["full-width", "horizontal-scroll"], + "code": [ + "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", + " [-h|--help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort] [-S|--sort-reverse]", + " [-t|--tab-padding] [-v|--version] [-V|--version-only]", + "", + "Launch arguments:", + " -a, --show-all Display the complete port's name (Equal to '-dfn')", + " -d, --show-device Displays the port's device name", + " -D , --divider Uses the given string or char as a separator (Can be empty string !)", + " -f, --show-friendly Displays the port's friendly name", + " -h, --help Display this help text", + " -n, --show-name-raw Displays the port's raw name (See remarks section)", + " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", + " -s, --sort Sorts the port based on their raw names in an ascending order", + " -S, --sort-reverse Sorts the port based on their raw names in a descending order", + " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", + " -v, --version Shows the utility's version number and other info", + " -V, --version-only Shows the utility's version number only (Overrides '-v')" + ] + } + ] + } + }, + + { + "type": "container", "padding": 20, + "modifiers": ["no-top-padding", "no-bottom-padding"], + "content": { + "parts": [ + { + "type": "h1", + "content": {"en": "Output formatting", "fr": "Formatage de sortie"} + },{ + "type": "code", "indent": 2, + "modifiers": ["full-width", "horizontal-scroll"], + "code": [ + " *┬> No launch arguments:", + " └──> ${Raw name} => COM1", + " *┬> '-d' or '-f'", + " ├──> ${Device name} => \\Device\\Serial1", + " └──> ${Friendly name} => Communications Port", + " *┬> '-d' and '-f'", + " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", + " *┬> '-n' and '-d'", + " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", + " *┬> '-n' and '-f'", + " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", + " *┬> '-ndf' or '-a'", + " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", + " *┬> '-ndfp' or '-ap'", + " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", + " *┬> '-ndfD \";\"' or '-aD \";\"'", + " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" + ] + } + ] + } + }, + + { + "type": "container", "padding": 10, + "modifiers": ["no-top-margin"], + "content": { + "parts": [ + { + "type": "h1", "modifiers": ["no-top-margin"], + "content": {"key": "content.commons.version.current"} + },{ + "type": "spacer", "size": 1 + },{ + "type": "container", "padding": 0, + "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], + "content": { + "parts": [{ + "type": "table", + "modifiers": ["striped", "inner-bordered"], + "head": [ + {"key": "content.commons.cpu.responsive"}, + {"key": "content.commons.lang"}, + {"key": "content.commons.download.single"} + ], + "body": [ + [ + {"key": "content.commons.cpu.x64", "rowspan": 2}, + {"key": "lang.english"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_eng_x64.exe"} + }] + } + ],[ + {"key": "lang.french"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_fra_x64.exe"} + }] + } + ],[ + {"key": "content.commons.cpu.x86", "rowspan": 2}, + {"key": "lang.english"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_eng_x86.exe"} + }] + } + ],[ + {"key": "lang.french"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_fra_x86.exe"} + }] + } + ] + ] + }] + } + } + ] + } + }, + + { + "type": "container", "padding": 10, + "modifiers": ["no-top-margin"], + "content": { + "parts": [ + { + "type": "h1", "modifiers": ["no-top-margin"], + "content": {"key": "content.commons.version.previous.multiple"} + },{ + "type": "spacer", "size": 1 + },{ + "type": "container", "padding": 0, + "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], + "content": { + "parts": [{ + "type": "table", + "modifiers": ["striped", "inner-bordered"], + "head": [ + {"key": "content.commons.version"}, + {"key": "content.commons.cpu.responsive"}, + {"key": "content.commons.lang"}, + {"key": "content.commons.download.single"} + ], + "body": [ + [ + {"en": "v2.0.0", "rowspan": 4}, + {"key": "content.commons.cpu.x64", "rowspan": 2}, + {"key": "lang.english"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_eng_x64.exe"} + }] + } + ],[ + {"key": "lang.french"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_fra_x64.exe"} + }] + } + ],[ + {"key": "content.commons.cpu.x86", "rowspan": 2}, + {"key": "lang.english"}, + { + "parts": [ + { + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_eng_x86.exe"} + } + ] + } + ],[ + {"key": "lang.french"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom_fra_x86.exe"} + }] + } + ],[ + {"en": "v1.1.0", "rowspan": 2}, + {"key": "content.commons.cpu.x64"}, + {"key": "lang.english", "rowspan": 2}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom-x64.exe"} + }] + } + ],[ + {"key": "content.commons.cpu.x86"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom-x86.exe"} + }] + } + ],[ + {"en": "v1.0.0", "rowspan": 2}, + {"key": "content.commons.cpu.x64"}, + {"key": "lang.english", "rowspan": 2}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x64.exe", + "modifiers": ["thin"], + "content": {"en": "lscom-x64.exe"} + }] + } + ],[ + {"key": "content.commons.cpu.x86"}, + { + "parts": [{ + "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x86.exe", + "modifiers": ["thin"], + "content": {"en": "lscom-x86.exe"} + }] + } + ] + ] + }] + } + } + ] + } + }, + + { + "type": "container", "padding": 10, + "modifiers": ["no-top-margin"], + "content": { + "parts": [ + { + "type": "h1", "modifiers": ["no-top-margin"], + "content": {"key": "content.commons.version.source"} + },{ + "type": "spacer", "size": 1 + },{ + "type": "container", "padding": 0, + "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], + "content": { + "parts": [{ + "type": "table", "modifiers": ["striped", "inner-bordered"], + "head": [{"key": "content.commons.version"}, {"key": "content.commons.download.multiple"}], + "body": [[ + {"en": "v2.1.0"}, + {"parts": [{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.zip", + "content": {"en": "2.1.0.zip"} + },{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz", + "content": {"en": "2.1.0.tar.gz"} + }]} + ],[ + {"en": "v2.0.0"}, + {"parts": [{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.zip", + "content": {"en": "2.0.0.zip"} + },{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz", + "content": {"en": "2.0.0.tar.gz"} + }]} + ],[ + {"en": "v1.1.0"}, + {"parts": [{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.zip", + "content": {"en": "1.1.0.zip"} + },{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz", + "content": {"en": "1.1.0.tar.gz"} + }]} + ],[ + {"en": "v1.0.0"}, + {"parts": [{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.zip", + "content": {"en": "1.0.0.zip"} + },{ + "type": "button", "modifiers": ["thin"], + "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz", + "content": {"en": "1.0.0.tar.gz"} + }]} + ]] + }] + } + } + ] + } + }, + + {"type": "spacer", "size": 1} + ], + "tags": ["application", "lscom", "purebasic", "windows"] +} diff --git a/content/items/lscom-cli.json b/content/items/lscom-cli.json index 1450bae..816eaee 100644 --- a/content/items/lscom-cli.json +++ b/content/items/lscom-cli.json @@ -1,370 +1,123 @@ { - "title": { - "icon": "fad fa-terminal", - "page": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, - "card": { - "main": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, - "sub": {"en": ""} + "strings": { + "en": { + "meta.title": "PB-ListComPort", + "meta.description": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.", + "article.subtitle": "subtitle here", + "intro.title": "Introduction", + "intro.p1": "A simple cli tool that can list COM ports with their full name easily and cleanly.", + "intro.p2": "This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port.", + "intro.p3": "The earliest version of Windows that can be used is Windows XP x64 or Windows Vista due to the fact that RegGetValueW is not available on older versions of Windows.", + "usage.title": "Usage", + "formatting.title": "Output formatting" + }, + "fr": { + "meta.title": "PB-ListComPort", + "meta.description": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM.", + "article.subtitle": "subtitle here", + "intro.title": "Introduction", + "_intro.p1": "", + "_intro.p2": "", + "_intro.p3": "", + "usage.title": "Utilisation", + "formatting.title": "Formatage de sortie" } }, - "meta": { - "title": {"en": "PB-ListComPort", "fr": "PB-ListComPort"}, - "description": { - "en": "A simple CLI tool that can list COM ports with their name, friendly name and device name easily and cleanly.", - "fr": "Un petit utilitaire pour invité de commande qui permet de facilement lister les noms, noms formatés et chemin des ports COM." + "metadata": { + "template": "article", + "head": { + "title": "meta.title", + "description": "meta.description" + }, + "opengraph": { + "title": "meta.title", + "description": "meta.description", + "type": null, + "url": null, + "image": null, + "image_type": null + }, + "article": { + "icon": "fad fa-terminal", + "title": "meta.title", + "_subtitle": "article.subtitle", + "tags": ["application", "lscom", "purebasic", "windows"] } }, - "parts": [ + "elements": [ { "type": "container", "padding": 20, "modifiers": ["no-bottom-padding", "no-top-margin"], - "content": { - "parts": [ - { - "type": "h1", - "content": {"en": "Introduction"} - },{ - "type": "paragraph", "indent": 2, - "content": {"en": "A simple cli tool that can list COM ports with their full name easily and cleanly."} - },{ - "type": "paragraph", "indent": 2, - "content": { - "en": "This tool is intended to replace the tedious task of having to use the mode command, and the Device Manager to find a newly plugged-in device that provides a COM port." - } - },{ - "type": "paragraph", "indent": 2, - "content": { - "en": "The earliest version of Windows that can be used is Windows XP x64 or Windows Vista due to the fact that RegGetValueW is not available on older versions of Windows." - } - } - ] - } + "parts": [ + {"type": "h1", "content": "intro.title"}, + {"type": "paragraph", "indent": 2, "content": "intro.p1"}, + {"type": "paragraph", "indent": 2, "content": "intro.p2"}, + {"type": "paragraph", "indent": 2, "content": "intro.p3"} + ] }, { "type": "container", "padding": 20, "modifiers": ["no-top-padding", "no-bottom-padding"], - "content": { - "parts": [ - { - "type": "h1", - "content": {"en": "Usage", "fr": "Utilisation"} - },{ - "type": "code", "indent": 2, - "modifiers": ["full-width", "horizontal-scroll"], - "code": [ - "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", - " [-h|--help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort] [-S|--sort-reverse]", - " [-t|--tab-padding] [-v|--version] [-V|--version-only]", - "", - "Launch arguments:", - " -a, --show-all Display the complete port's name (Equal to '-dfn')", - " -d, --show-device Displays the port's device name", - " -D , --divider Uses the given string or char as a separator (Can be empty string !)", - " -f, --show-friendly Displays the port's friendly name", - " -h, --help Display this help text", - " -n, --show-name-raw Displays the port's raw name (See remarks section)", - " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", - " -s, --sort Sorts the port based on their raw names in an ascending order", - " -S, --sort-reverse Sorts the port based on their raw names in a descending order", - " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", - " -v, --version Shows the utility's version number and other info", - " -V, --version-only Shows the utility's version number only (Overrides '-v')" - ] - } - ] - } + "parts": [ + {"type": "h1", "content": "usage.title"}, + { + "type": "code", "indent": 2, + "modifiers": ["horizontal-scroll", "code-block"], + "code": [ + "lscom.exe [-a|--show-all] [-d|--show-device] [-D |--divider ] [-f|--show-friendly]", + " [-h|--help] [-n|--show-name-raw] [-P|--no-pretty] [-s|--sort] [-S|--sort-reverse]", + " [-t|--tab-padding] [-v|--version] [-V|--version-only]", + "", + "Launch arguments:", + " -a, --show-all Display the complete port's name (Equal to '-dfn')", + " -d, --show-device Displays the port's device name", + " -D , --divider Uses the given string or char as a separator (Can be empty string !)", + " -f, --show-friendly Displays the port's friendly name", + " -h, --help Display this help text", + " -n, --show-name-raw Displays the port's raw name (See remarks section)", + " -P, --no-pretty Disables the pretty printing format (Equal to -D \" \")", + " -s, --sort Sorts the port based on their raw names in an ascending order", + " -S, --sort-reverse Sorts the port based on their raw names in a descending order", + " -t, --tab-padding Use tabs for padding between the types of names (Overrides '-D')", + " -v, --version Shows the utility's version number and other info", + " -V, --version-only Shows the utility's version number only (Overrides '-v')" + ] + } + ] }, { "type": "container", "padding": 20, "modifiers": ["no-top-padding", "no-bottom-padding"], - "content": { - "parts": [ - { - "type": "h1", - "content": {"en": "Output formatting", "fr": "Formatage de sortie"} - },{ - "type": "code", "indent": 2, - "modifiers": ["full-width", "horizontal-scroll"], - "code": [ - " *┬> No launch arguments:", - " └──> ${Raw name} => COM1", - " *┬> '-d' or '-f'", - " ├──> ${Device name} => \\Device\\Serial1", - " └──> ${Friendly name} => Communications Port", - " *┬> '-d' and '-f'", - " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", - " *┬> '-n' and '-d'", - " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", - " *┬> '-n' and '-f'", - " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", - " *┬> '-ndf' or '-a'", - " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", - " *┬> '-ndfp' or '-ap'", - " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", - " *┬> '-ndfD \";\"' or '-aD \";\"'", - " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" - ] - } - ] - } - }, - - { - "type": "container", "padding": 10, - "modifiers": ["no-top-margin"], - "content": { - "parts": [ - { - "type": "h1", "modifiers": ["no-top-margin"], - "content": {"key": "content.commons.version.current"} - },{ - "type": "spacer", "size": 1 - },{ - "type": "container", "padding": 0, - "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], - "content": { - "parts": [{ - "type": "table", - "modifiers": ["striped", "inner-bordered"], - "head": [ - {"key": "content.commons.cpu.responsive"}, - {"key": "content.commons.lang"}, - {"key": "content.commons.download.single"} - ], - "body": [ - [ - {"key": "content.commons.cpu.x64", "rowspan": 2}, - {"key": "lang.english"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_eng_x64.exe"} - }] - } - ],[ - {"key": "lang.french"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_fra_x64.exe"} - }] - } - ],[ - {"key": "content.commons.cpu.x86", "rowspan": 2}, - {"key": "lang.english"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_eng_x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_eng_x86.exe"} - }] - } - ],[ - {"key": "lang.french"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/lscom_fra_x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_fra_x86.exe"} - }] - } - ] - ] - }] - } - } - ] - } - }, - - { - "type": "container", "padding": 10, - "modifiers": ["no-top-margin"], - "content": { - "parts": [ - { - "type": "h1", "modifiers": ["no-top-margin"], - "content": {"key": "content.commons.version.previous.multiple"} - },{ - "type": "spacer", "size": 1 - },{ - "type": "container", "padding": 0, - "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], - "content": { - "parts": [{ - "type": "table", - "modifiers": ["striped", "inner-bordered"], - "head": [ - {"key": "content.commons.version"}, - {"key": "content.commons.cpu.responsive"}, - {"key": "content.commons.lang"}, - {"key": "content.commons.download.single"} - ], - "body": [ - [ - {"en": "v2.0.0", "rowspan": 4}, - {"key": "content.commons.cpu.x64", "rowspan": 2}, - {"key": "lang.english"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_eng_x64.exe"} - }] - } - ],[ - {"key": "lang.french"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_fra_x64.exe"} - }] - } - ],[ - {"key": "content.commons.cpu.x86", "rowspan": 2}, - {"key": "lang.english"}, - { - "parts": [ - { - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_eng_x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_eng_x86.exe"} - } - ] - } - ],[ - {"key": "lang.french"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/lscom_fra_x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom_fra_x86.exe"} - }] - } - ],[ - {"en": "v1.1.0", "rowspan": 2}, - {"key": "content.commons.cpu.x64"}, - {"key": "lang.english", "rowspan": 2}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom-x64.exe"} - }] - } - ],[ - {"key": "content.commons.cpu.x86"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/lscom-x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom-x86.exe"} - }] - } - ],[ - {"en": "v1.0.0", "rowspan": 2}, - {"key": "content.commons.cpu.x64"}, - {"key": "lang.english", "rowspan": 2}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x64.exe", - "modifiers": ["thin"], - "content": {"en": "lscom-x64.exe"} - }] - } - ],[ - {"key": "content.commons.cpu.x86"}, - { - "parts": [{ - "type": "button", "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/lscom-x86.exe", - "modifiers": ["thin"], - "content": {"en": "lscom-x86.exe"} - }] - } - ] - ] - }] - } - } - ] - } - }, - - { - "type": "container", "padding": 10, - "modifiers": ["no-top-margin"], - "content": { - "parts": [ - { - "type": "h1", "modifiers": ["no-top-margin"], - "content": {"key": "content.commons.version.source"} - },{ - "type": "spacer", "size": 1 - },{ - "type": "container", "padding": 0, - "modifiers": ["no-bottom-padding", "no-top-margin", "card", "horizontal-scroll"], - "content": { - "parts": [{ - "type": "table", "modifiers": ["striped", "inner-bordered"], - "head": [{"key": "content.commons.version"}, {"key": "content.commons.download.multiple"}], - "body": [[ - {"en": "v2.1.0"}, - {"parts": [{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.zip", - "content": {"en": "2.1.0.zip"} - },{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz", - "content": {"en": "2.1.0.tar.gz"} - }]} - ],[ - {"en": "v2.0.0"}, - {"parts": [{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.zip", - "content": {"en": "2.0.0.zip"} - },{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz", - "content": {"en": "2.0.0.tar.gz"} - }]} - ],[ - {"en": "v1.1.0"}, - {"parts": [{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.zip", - "content": {"en": "1.1.0.zip"} - },{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz", - "content": {"en": "1.1.0.tar.gz"} - }]} - ],[ - {"en": "v1.0.0"}, - {"parts": [{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.zip", - "content": {"en": "1.0.0.zip"} - },{ - "type": "button", "modifiers": ["thin"], - "link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz", - "content": {"en": "1.0.0.tar.gz"} - }]} - ]] - }] - } - } - ] - } + "parts": [ + {"type": "h1", "content": "formatting.title"}, + { + "type": "code", "indent": 2, + "modifiers": ["horizontal-scroll", "code-block"], + "code": [ + " *┬> No launch arguments:", + " └──> ${Raw name} => COM1", + " *┬> '-d' or '-f'", + " ├──> ${Device name} => \\Device\\Serial1", + " └──> ${Friendly name} => Communications Port", + " *┬> '-d' and '-f'", + " └──> ${Friendly name} [${Device name}] => Communications Port [\\Device\\Serial1]", + " *┬> '-n' and '-d'", + " └──> ${Raw name} [$DeviceName] => COM1 [\\Device\\Serial1]", + " *┬> '-n' and '-f'", + " └──> ${Raw name} - ${Friendly name} => COM1 - Communications Port", + " *┬> '-ndf' or '-a'", + " └──> ${Raw name} - ${Friendly name} [${Device name}] => COM1 - Communications Port [\\Device\\Serial1]", + " *┬> '-ndfp' or '-ap'", + " └──> ${Raw name} ${Friendly name} ${Device name} => COM1 Communications Port \\Device\\Serial1", + " *┬> '-ndfD \";\"' or '-aD \";\"'", + " └──> ${Raw name};${Friendly name};${Device name} => COM1;Communications Port;\\Device\\Serial1" + ] + } + ] }, {"type": "spacer", "size": 1} - ], - "tags": ["application", "lscom", "purebasic", "windows"] + ] } diff --git a/content/items/test2.json b/content/items/test2.json index ed9a990..7ba14b5 100644 --- a/content/items/test2.json +++ b/content/items/test2.json @@ -31,7 +31,7 @@ "article": { "icon": "fad fa-terminal", "title": "title.article", - "tags": ["fuck", "you"] + "tags": ["joe", "mama"] } }, "elements": [