Finished composer base, fixed issues, Missing tables

Update composer.php, content.php, and 5 more files...
This commit is contained in:
2022-06-27 11:35:39 +02:00
parent a44ddf3671
commit 9313ceff83
7 changed files with 708 additions and 440 deletions

View File

@@ -1,9 +1,9 @@
<?php
// Making sure the file is included and not accessed directly.
/*if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
if(basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"])) {
header('HTTP/1.1 403 Forbidden');
die();
}*/
}
// Including required helpers.
include_once 'config.php';
@@ -33,6 +33,7 @@ abstract class ComposerTemplates {
// Defining the different types of elements available.
abstract class ComposerElementTypes {
const UNSET = "unset";
const RAW = "raw";
const H1 = "h1";
const H2 = "h2";
const H3 = "h3";
@@ -60,7 +61,7 @@ abstract class ComposerElementTypes {
}
// Defining modifiers.
abstract class ComposerElementModifiersTest {
abstract class ComposerElementModifiers {
// Generic > 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 '<meta property="og:title" content="' . (is_null($title_prefix) ? '' : $title_prefix) .
(is_null($this->metadata->opengraph->title) ?
localize("content.default.opengraph.title") :
localize_private($this->metadata->opengraph->title, $this->strings, false)) .
'" /><meta property="og:description" content="' . (is_null($this->metadata->opengraph->description) ?
localize("content.default.opengraph.description") :
localize_private($this->metadata->opengraph->description, $this->strings, false)) .
'" /><meta property="og:type" content="' . (is_null($type_override) ?
(is_null($this->metadata->opengraph->type) ? "website" : $this->metadata->opengraph->type)
: $type_override) . '" /><meta property="og:url" content="' .
(is_null($url_override) ? (is_null($this->metadata->opengraph->url) ?
$host_uri : $this->metadata->opengraph->url) : $url_override) .
'" /><meta property="og:image" content="' . $final_image_uri . '"/>';
//<meta property="og:image:type" content="image/png"/>
}
}
@@ -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 = '<div class="card p-0 mx-0"><div class="px-card py-10 border-bottom px-20">' .
'<div class="container-fluid"><h2 class="card-title font-size-18 m-0">' .
'<i class="' . $this->article->icon . '"></i>&nbsp;&nbsp;' . localize($this->article->title) .
'<i class="' . $this->article->icon . '"></i>&nbsp;&nbsp;' .
localize_private($this->article->title, $contentRoot->strings, false) .
'<span class="card-title font-size-18 m-0 text-super-muted float-right hidden-xs-and-down">' .
'\$subTitle' . '</span></h2></div></div>' .
'<article id="content-item-container" class="py-01 pb-0 bg-light-lm rounded-bottom px-0 bg-very-dark title-bkgd">' .
@@ -250,35 +305,41 @@ class ComposerContentMetadata {
}
return $inner_html;
}
/*function start_content_card($iconClasses, $title, $subTitle) {
echo('<div class="card p-0 mx-0"><div class="px-card py-10 border-bottom px-20"><div class="container-fluid">');
echo('<h2 class="card-title font-size-18 m-0"><i class="'.$iconClasses.'"></i>&nbsp;&nbsp;'.localize($title));
echo('<span class="card-title font-size-18 m-0 text-super-muted float-right hidden-xs-and-down">'.$subTitle.'</span></h2>');
echo('</div></div>');
}
class ComposerContentMetadataHead {
public ?string $title;
public ?string $description;
function end_content_card() {
echo('</div>');
}*/
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 .= '<a href="' . $this->link . '">';
}
switch($this->type) {
case ComposerElementTypes::UNSET:
$htmlCode .= "<p>error.unset !</p>";
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 .= '<p class="' .
(ComposerElementModifiersTest::is_modifier_in_modifiers(
ComposerElementModifiersTest::GENERIC_MARGIN_NO_TOP, $this->modifiers)
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->modifiers)
? 'mt-0 mb-10' : 'my-10') . ' ml-md-' . ($_paragraph_ident_level * 5) . '">' .
$this->get_inner_html($contentRoot) . '</p>';
break;
case ComposerElementTypes::BUTTON:
// Composing the button.
$htmlCode .= '<button class="' . (is_null($this->color) ? '' : 'btn-' . $this->color) .
$this->get_modifiers_classes() . '">' . $this->get_inner_html($contentRoot) . '</button>';
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 .= '<code class="code ' . $this->get_modifiers_classes() .
' ml-md-' . ($_paragraph_ident_level * 5) . '">';
' 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 .= '<div class="mt-10 p-' . $_container_padding .
(empty($_container_classes) ? '' : ' ' . $_container_classes) . '">' .
// FIXME: Can be re-standardized if a check for the default mt-10 is added at the end after adding the mods.
$htmlCode .= '<div class="' .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::CONTAINER_CARD, $this->modifiers
) ? ComposerElementModifiers::get_modifier_classes(
ComposerElementModifiers::CONTAINER_CARD ) . "m-0 " : "") .
'p-' . $_container_padding .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->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) . '</div>';
break;
case ComposerElementTypes::COLLAPSE:
break;
// Composing collapse.
$htmlCode .= '<details class="collapse-panel w-full' .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP, $this->modifiers
) ? ' ' . ComposerElementModifiers::get_modifier_classes(
ComposerElementModifiers::GENERIC_MARGIN_NO_TOP) : '') . '" ' .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::DETAILS_CLOSED, $this->modifiers
) ? "closed" : "open") . '>';
$htmlCode .= '<summary class="collapse-header p-10 px-15 text-truncate without-arrow' .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::DETAILS_NO_ROUNDING, $this->modifiers
) ? ' rounded-0' : '') . ' border-left-0 border-right-0">';
$_title = "title";
$_subtitle = "subtitle";
$htmlCode .= '<h4 class="font-size-16 m-0 align-middle no-select">' .
'<i class="fad fa-angle-down hidden-collapse-closed font-size-24"></i>' .
'<i class="fad fa-angle-up hidden-collapse-open font-size-24"></i>' .
'<span class="font-weight-semi-bold align-top">&nbsp;&nbsp;'.$_title.
'<span class="ml-20 text-muted">'.$_subtitle.'</span></span></h4></summary>';
$htmlCode .= '<div class="collapse-content' .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL, $this->modifiers
) ? " " . ComposerElementModifiers::get_modifier_classes(
ComposerElementModifiers::CONTAINER_SCROLL_HORIZONTAL ) : "") .
(ComposerElementModifiers::is_modifier_in_modifiers(
ComposerElementModifiers::GENERIC_PADDING_NONE, $this->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) . '</div></details>';
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 .= '</a>';
}
return $htmlCode;
}
}

View File

@@ -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('<p>Not array node !</p>');
@@ -615,7 +615,6 @@ function createElementNode(mixed $elementNode, string $prepend="", string $appen
default:
printErrorTextElement(sprintf(localize("error.content.data.part.unknown"), $elementNode["type"]));
break;
}
}*/
}/**/
?>

View File

@@ -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",

View File

@@ -26,39 +26,34 @@ if($content_has_error) {
<?php
include 'headers.php';
// Setting up the common variables.
// Setting up the page's title, description and opengraph tags.
if($content_has_error) {
$_metaTitle = localize("error.content.title.generic");
$_metaDescription = $content_error_message;
echo('<title>' . localize("error.content.title.generic") . ' - Nibble Poker</title>');
echo('<meta name="description" content="'.$content_error_message.'">');
echo('<meta property="og:title" content="Nibble Poker - '.localize("error.content.title.generic").'" />');
echo('<meta property="og:description" content="'.$content_error_message.'"/>');
echo('<meta property="og:type" content="website" />');
echo('<meta property="og:url" content="' . $host_uri . '" />');
echo('<meta property="og:image" content="' . $host_uri . '/resources/Azias/logos/opengraph.png"/>');
echo('<meta property="og:image:type" content="image/png"/>');
} 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('<title>'.$content->get_head_title().' - Nibble Poker</title>');
echo('<meta name="description" content="'.$content->get_head_description().'">');
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('<title>' . localize("content.title.search.card") . ' - Nibble Poker</title>');
echo('<meta name="description" content="">');
echo('<meta property="og:title" content="Nibble Poker - '.localize("content.title.search.card").'" />');
echo('<meta property="og:description" content=""/>');
echo('<meta property="og:type" content="website" />');
echo('<meta property="og:url" content="' . $host_uri . '" />');
echo('<meta property="og:image" content="' . $host_uri . '/resources/Azias/logos/opengraph.png"/>');
echo('<meta property="og:image:type" content="image/png"/>');
}
}
//$content->metadata->title
// Printing the title, meta and opengraph tags.
echo('<title>'.$_metaTitle.' - Nibble Poker</title>');
echo('<meta name="description" content="'.$_metaDescription.'">');
echo('<meta property="og:title" content="Nibble Poker - '.$_metaTitle.'" />');
echo('<meta property="og:description" content="'.$_metaDescription.'"/>');
?>
<meta property="og:type" content="website" />
<meta property="og:url" content="<?php echo($host_uri); ?>/" />
<meta property="og:image" content="<?php echo($host_uri); ?>/resources/Azias/logos/opengraph.png"/>
<meta property="og:image:type" content="image/png"/>
<link href="/resources/GliderJs/1.7.6/glider.min.css" rel="stylesheet" />
</head>
<body class="with-custom-webkit-scrollbars with-custom-css-scrollbars dark-mode" data-dm-shortcut-enabled="true" data-sidebar-shortcut-enabled="true">

View File

@@ -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": "<a href=\"https://github.com/aziascreations/PB-ListComPort\"><i class=\"fab fa-github\"></i></a>"}
}
},
"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 <code class=\"code\">mode</code> command, and the <i>Device Manager</i> 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 <str>|--divider <str>] [-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 <str>, --divider <str> 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": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
]
]
}]
}
}
]
}
},
{
"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": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}
]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
]
]
}]
}
}
]
}
},
{
"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": "<span class=\"text-monospace\">2.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">2.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">2.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">2.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">1.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">1.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">1.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">1.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
]]
}]
}
}
]
}
},
{"type": "spacer", "size": 1}
],
"tags": ["application", "lscom", "purebasic", "windows"]
}

View File

@@ -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": "<a href=\"https://github.com/aziascreations/PB-ListComPort\"><i class=\"fab fa-github\"></i></a>"}
"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 <code class=\"code\">mode</code> command, and the <i>Device Manager</i> 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 <code class=\"code\">mode</code> command, and the <i>Device Manager</i> 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 <str>|--divider <str>] [-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 <str>, --divider <str> 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 <str>|--divider <str>] [-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 <str>, --divider <str> 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": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
]
]
}]
}
}
]
}
},
{
"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": "<span class=\"text-monospace\">lscom_eng_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom_eng_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}
]
}
],[
{"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": "<span class=\"text-monospace\">lscom_fra_x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x64.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
],[
{"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": "<span class=\"text-monospace\">lscom-x86.exe</span><i class=\"fas fa-download ml-10\"></i>"}
}]
}
]
]
}]
}
}
]
}
},
{
"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": "<span class=\"text-monospace\">2.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.1.0/2.1.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">2.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">2.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/2.0.0/2.0.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">2.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">1.1.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.1.0/1.1.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">1.1.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
],[
{"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": "<span class=\"text-monospace\">1.0.0.zip</span><i class=\"fas fa-download ml-10\"></i>"}
},{
"type": "button", "modifiers": ["thin"],
"link": "https://files.nibblepoker.lu/downloads/PB-ListComPort/1.0.0/1.0.0.tar.gz",
"content": {"en": "<span class=\"text-monospace\">1.0.0.tar.gz</span><i class=\"fas fa-download ml-10\"></i>"}
}]}
]]
}]
}
}
]
}
"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"]
]
}

View File

@@ -31,7 +31,7 @@
"article": {
"icon": "fad fa-terminal",
"title": "title.article",
"tags": ["fuck", "you"]
"tags": ["joe", "mama"]
}
},
"elements": [