cinera: Add IRC unfurl tags and GitHub sponsors
New config field: instance_title
This commit is contained in:
parent
8dffa513cc
commit
26e304f62c
|
@ -23,7 +23,7 @@ typedef struct
|
||||||
version CINERA_APP_VERSION = {
|
version CINERA_APP_VERSION = {
|
||||||
.Major = 0,
|
.Major = 0,
|
||||||
.Minor = 10,
|
.Minor = 10,
|
||||||
.Patch = 10
|
.Patch = 11
|
||||||
};
|
};
|
||||||
|
|
||||||
#include <stdarg.h> // NOTE(matt): varargs
|
#include <stdarg.h> // NOTE(matt): varargs
|
||||||
|
@ -1416,6 +1416,7 @@ publicly, then we can set ignore_privacy to \"true\" and save the resources othe
|
||||||
"The ID of a person (see also person) who indexes a project. They will then appear in the credits menu of each entry in the project. Note that setting an indexer in the configuration \
|
"The ID of a person (see also person) who indexes a project. They will then appear in the credits menu of each entry in the project. Note that setting an indexer in the configuration \
|
||||||
file credits this person for the entire project, but indexers may \"uncredit\" people in the [video] node of a HMML file."
|
file credits this person for the entire project, but indexers may \"uncredit\" people in the [video] node of a HMML file."
|
||||||
},
|
},
|
||||||
|
{ "instance_title", "The name of the instance, used as the cinera:title on the global search page." },
|
||||||
{ "js_path", "Path relative to assets_root_dir and assets_root_url where JavaScript files are located." },
|
{ "js_path", "Path relative to assets_root_dir and assets_root_url where JavaScript files are located." },
|
||||||
{ "lineage", 0, 0, "A slash-separated string of all project IDs from the top of the family tree to the present project." },
|
{ "lineage", 0, 0, "A slash-separated string of all project IDs from the top of the family tree to the present project." },
|
||||||
{ "lineage_without_origin", 0, 0, "Same as the $lineage, without the first component (the $origin)." },
|
{ "lineage_without_origin", 0, 0, "Same as the $lineage, without the first component (the $origin)." },
|
||||||
|
@ -1534,6 +1535,7 @@ typedef enum
|
||||||
IDENT_IMAGES_PATH,
|
IDENT_IMAGES_PATH,
|
||||||
IDENT_INCLUDE,
|
IDENT_INCLUDE,
|
||||||
IDENT_INDEXER,
|
IDENT_INDEXER,
|
||||||
|
IDENT_INSTANCE_TITLE,
|
||||||
IDENT_JS_PATH,
|
IDENT_JS_PATH,
|
||||||
IDENT_LINEAGE,
|
IDENT_LINEAGE,
|
||||||
IDENT_LINEAGE_WITHOUT_ORIGIN,
|
IDENT_LINEAGE_WITHOUT_ORIGIN,
|
||||||
|
@ -3705,6 +3707,16 @@ CopyStringToBufferHTMLSafe_(int LineNumber, buffer *Dest, string String)
|
||||||
*Dest->Ptr = '\0';
|
*Dest->Ptr = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CopyStringToBufferHTMLSafeSurrounded(Dest, Pre, String, Post) CopyStringToBufferHTMLSafeSurrounded_(__LINE__, Dest, Pre, String, Post)
|
||||||
|
void
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded_(int LineNumber, buffer *Dest, string Pre, string String, string Post)
|
||||||
|
{
|
||||||
|
// NOTE(matt): Only the String gets HTML-encoded. The Pre and Post parts get copied as-is
|
||||||
|
CopyStringToBufferNoFormat_(LineNumber, Dest, Pre);
|
||||||
|
CopyStringToBufferHTMLSafe_(LineNumber, Dest, String);
|
||||||
|
CopyStringToBufferNoFormat_(LineNumber, Dest, Post);
|
||||||
|
}
|
||||||
|
|
||||||
#define CopyStringToBufferHTMLSafeBreakingOnSlash(Dest, String) CopyStringToBufferHTMLSafeBreakingOnSlash_(__LINE__, Dest, String)
|
#define CopyStringToBufferHTMLSafeBreakingOnSlash(Dest, String) CopyStringToBufferHTMLSafeBreakingOnSlash_(__LINE__, Dest, String)
|
||||||
void
|
void
|
||||||
CopyStringToBufferHTMLSafeBreakingOnSlash_(int LineNumber, buffer *Dest, string String)
|
CopyStringToBufferHTMLSafeBreakingOnSlash_(int LineNumber, buffer *Dest, string String)
|
||||||
|
@ -11029,6 +11041,16 @@ HMMLToBuffers(buffers *CollationBuffers, template *BespokeTemplate, string BaseF
|
||||||
CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
|
CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
|
||||||
"\"></script>");
|
"\"></script>");
|
||||||
|
|
||||||
|
CopyStringToBuffer(&CollationBuffers->IncludesPlayer,
|
||||||
|
"\n"
|
||||||
|
"\n <meta property=\"cinera:type\" content=\"entry\">");
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
|
||||||
|
Wrap0("\n <meta property=\"cinera:title\" content=\""), Title, Wrap0("\">"));
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
|
||||||
|
Wrap0("\n <meta property=\"cinera:project\" content=\""), CurrentProject->Title, Wrap0("\">"));
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesPlayer,
|
||||||
|
Wrap0("\n <meta property=\"cinera:project_lineage\" content=\""), CurrentProject->WrittenLineage, Wrap0("\">"));
|
||||||
|
|
||||||
asset *JSPlayerPost = GetAsset(Wrap0(BuiltinAssets[ASSET_JS_PLAYER_POST].Filename), ASSET_JS);
|
asset *JSPlayerPost = GetAsset(Wrap0(BuiltinAssets[ASSET_JS_PLAYER_POST].Filename), ASSET_JS);
|
||||||
ConstructResolvedAssetURL(&URL, JSPlayerPost, PAGE_PLAYER);
|
ConstructResolvedAssetURL(&URL, JSPlayerPost, PAGE_PLAYER);
|
||||||
CopyStringToBuffer(&PlayerBuffers.Script,
|
CopyStringToBuffer(&PlayerBuffers.Script,
|
||||||
|
@ -13967,6 +13989,25 @@ SearchToBuffer(buffers *CollationBuffers, db_header_project *StoredP, project *P
|
||||||
CopyStringToBuffer(&CollationBuffers->IncludesSearch,
|
CopyStringToBuffer(&CollationBuffers->IncludesSearch,
|
||||||
"\" defer></script>");
|
"\" defer></script>");
|
||||||
|
|
||||||
|
if(P)
|
||||||
|
{
|
||||||
|
CopyStringToBuffer(&CollationBuffers->IncludesSearch,
|
||||||
|
"\n"
|
||||||
|
"\n <meta property=\"cinera:type\" content=\"project\">");
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
|
||||||
|
Wrap0("\n <meta property=\"cinera:title\" content=\""), P->Title, Wrap0("\">"));
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
|
||||||
|
Wrap0("\n <meta property=\"cinera:project_lineage\" content=\""), P->WrittenLineage, Wrap0("\">"));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CopyStringToBuffer(&CollationBuffers->IncludesSearch,
|
||||||
|
"\n"
|
||||||
|
"\n <meta property=\"cinera:type\" content=\"instance\">");
|
||||||
|
CopyStringToBufferHTMLSafeSurrounded(&CollationBuffers->IncludesSearch,
|
||||||
|
Wrap0("\n <meta property=\"cinera:title\" content=\""), Config->InstanceTitle, Wrap0("\">"));
|
||||||
|
}
|
||||||
|
|
||||||
OpenNodeNewLine(B, &IndentationLevel, NODE_DIV, 0);
|
OpenNodeNewLine(B, &IndentationLevel, NODE_DIV, 0);
|
||||||
AppendStringToBuffer(B, Wrap0(" class=\"cineraQueryContainer\">"));
|
AppendStringToBuffer(B, Wrap0(" class=\"cineraQueryContainer\">"));
|
||||||
|
|
||||||
|
|
|
@ -560,6 +560,8 @@ typedef struct
|
||||||
string DatabaseLocation;
|
string DatabaseLocation;
|
||||||
string CacheDir;
|
string CacheDir;
|
||||||
|
|
||||||
|
string InstanceTitle;
|
||||||
|
|
||||||
string GlobalTemplatesDir;
|
string GlobalTemplatesDir;
|
||||||
string GlobalSearchTemplatePath;
|
string GlobalSearchTemplatePath;
|
||||||
string GlobalSearchDir;
|
string GlobalSearchDir;
|
||||||
|
@ -903,6 +905,7 @@ InitTypeSpecs(void)
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_HMML_DIR, TRUE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_HMML_DIR, TRUE);
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_IMAGES_PATH, TRUE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_IMAGES_PATH, TRUE);
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_INDEXER, FALSE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_INDEXER, FALSE);
|
||||||
|
PushTypeSpecField(Root, FT_STRING, IDENT_INSTANCE_TITLE, TRUE);
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_JS_PATH, TRUE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_JS_PATH, TRUE);
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_LOG_LEVEL, TRUE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_LOG_LEVEL, TRUE);
|
||||||
PushTypeSpecField(Root, FT_STRING, IDENT_OWNER, TRUE);
|
PushTypeSpecField(Root, FT_STRING, IDENT_OWNER, TRUE);
|
||||||
|
@ -2046,6 +2049,12 @@ SetDefaults(scope_tree *Root, memory_book *TypeSpecs)
|
||||||
PushDefaultIntPair(SupportPatreon, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
|
PushDefaultIntPair(SupportPatreon, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
|
||||||
PushDefaultPair(SupportPatreon, IDENT_URL, Wrap0("https://patreon.com/$person"));
|
PushDefaultPair(SupportPatreon, IDENT_URL, Wrap0("https://patreon.com/$person"));
|
||||||
|
|
||||||
|
scope_tree *SupportGitHub = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("github"));
|
||||||
|
PushDefaultPair(SupportGitHub, IDENT_ICON, Wrap0("cinera_sprite_github.png"));
|
||||||
|
PushDefaultIntPair(SupportGitHub, IDENT_ICON_TYPE, IT_GRAPHICAL);
|
||||||
|
PushDefaultIntPair(SupportGitHub, IDENT_ICON_VARIANTS, GetArtVariantFromString(Wrap0("normal")));
|
||||||
|
PushDefaultPair(SupportGitHub, IDENT_URL, Wrap0("https://github.com/sponsors/$person"));
|
||||||
|
|
||||||
scope_tree *SupportSendOwl = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("sendowl"));
|
scope_tree *SupportSendOwl = PushDefaultScope(TypeSpecs, Root, IDENT_SUPPORT, Wrap0("sendowl"));
|
||||||
PushDefaultPair(SupportSendOwl, IDENT_ICON, Wrap0("cinera_sprite_sendowl.png"));
|
PushDefaultPair(SupportSendOwl, IDENT_ICON, Wrap0("cinera_sprite_sendowl.png"));
|
||||||
|
|
||||||
|
@ -4581,6 +4590,7 @@ PrintConfig(config *C, bool ShouldClearTerminal)
|
||||||
int AvailableColumns = TermCols - StringLength(Typography.Margin);
|
int AvailableColumns = TermCols - StringLength(Typography.Margin);
|
||||||
TypesetPair(&Typography, 0, IDENT_DB_LOCATION, C->DatabaseLocation, AvailableColumns);
|
TypesetPair(&Typography, 0, IDENT_DB_LOCATION, C->DatabaseLocation, AvailableColumns);
|
||||||
TypesetPair(&Typography, 0, IDENT_CACHE_DIR, C->CacheDir, AvailableColumns);
|
TypesetPair(&Typography, 0, IDENT_CACHE_DIR, C->CacheDir, AvailableColumns);
|
||||||
|
TypesetPair(&Typography, 0, IDENT_INSTANCE_TITLE, C->InstanceTitle, AvailableColumns);
|
||||||
|
|
||||||
fprintf(stderr, "\n");
|
fprintf(stderr, "\n");
|
||||||
TypesetPair(&Typography, 0, IDENT_GLOBAL_TEMPLATES_DIR, C->GlobalTemplatesDir, AvailableColumns);
|
TypesetPair(&Typography, 0, IDENT_GLOBAL_TEMPLATES_DIR, C->GlobalTemplatesDir, AvailableColumns);
|
||||||
|
@ -4800,6 +4810,8 @@ ResolveVariables(scope_tree *S)
|
||||||
// NOTE(matt): String
|
// NOTE(matt): String
|
||||||
case IDENT_DB_LOCATION:
|
case IDENT_DB_LOCATION:
|
||||||
{ Result->DatabaseLocation = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS); } break;
|
{ Result->DatabaseLocation = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS); } break;
|
||||||
|
case IDENT_INSTANCE_TITLE:
|
||||||
|
{ Result->InstanceTitle = ResolveString(Result, &Errors, S, Pair, TRUE); } break;
|
||||||
case IDENT_GLOBAL_SEARCH_DIR:
|
case IDENT_GLOBAL_SEARCH_DIR:
|
||||||
{
|
{
|
||||||
Result->GlobalSearchDir = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS);
|
Result->GlobalSearchDir = StripSlashes(ResolveString(Result, &Errors, S, Pair, TRUE), P_ABS);
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
Loading…
Reference in New Issue