Cleanup old template shit, good riddance

FossilOrigin-Name: 555fc3773213a18194ffb772aec29855553275a997e38962627f328d5457e9b8
This commit is contained in:
nekobit 2022-08-20 02:50:31 +00:00
parent 3b334562bf
commit aae83c2bd9
85 changed files with 0 additions and 1547 deletions

View file

@ -8,13 +8,6 @@ SRC = $(wildcard src/*.c)
OBJ = $(patsubst %.c,%.o,$(SRC))
HEADERS = $(wildcard src/*.h) config.h
PAGES_DIR = static
TMPL_DIR = templates
PAGES = $(wildcard $(PAGES_DIR)/*.tmpl)
TMPLS = $(wildcard $(TMPL_DIR)/*.tt)
PAGES_CMP = $(patsubst %.tmpl,%.ctmpl,$(PAGES))
PAGES_C = $(patsubst %.tmpl, %.c,$(PAGES))
PAGES_C_OBJ = $(patsubst %.c,%.o,$(PAGES_C))
TMPLS_C = $(patsubst %.tt,%.ctt,$(TMPLS))
TEST_DIR = test/unit
TESTS = $(wildcard $(TEST_DIR)/t*.c)
UNIT_TESTS = $(patsubst %.c,%.bin,$(TESTS))
@ -32,21 +25,11 @@ MASTODONT_URL = https://fossil.nekobit.net/mastodont-c
all:
$(MAKE) dep_build
$(MAKE) filec
$(MAKE) ctemplate
$(MAKE) make_ctmpls
$(MAKE) make_pages
$(MAKE) make_pagesc
$(MAKE) make_pagescobj
$(MAKE) $(TARGET)
install_deps:
cpan Template::Toolkit
make_ctmpls: $(TMPLS_C)
make_pages: $(PAGES_CMP)
make_pagesc: $(PAGES_C)
make_pagescobj: $(PAGES_C_OBJ)
$(TARGET): $(HEADERS) $(OBJ)
$(CC) -o $(TARGET) $(OBJ) $(PAGES_C_OBJ) $(LDFLAGS)
@ -57,17 +40,6 @@ emojitoc: scripts/emoji-to.o
$(CC) -o emojitoc $< $(LDFLAGS)
./emojitoc meta/emoji.json > src/emoji_codes.h
# Redirect stdout and stderr into separate contents as a hack
# Let bash do the work :)
$(PAGES_DIR)/%.ctmpl: $(PAGES_DIR)/%.tmpl $(TMPLS)
./ctemplate $< $(notdir $*) 2> $(PAGES_DIR)/$(notdir $*).c 1> $@
$(TMPL_DIR)/%.ctt: $(TMPL_DIR)/%.tt
./filec $< data_$(notdir $*)_tt > $@
ctemplate: src/template/main.o
$(CC) $(LDFLAGS) -o ctemplate $<
$(MASTODONT_DIR):
cd ..; fossil clone $(MASTODONT_URL) || true
cd treebird; ln -s ../mastodont-c .
@ -95,7 +67,6 @@ dep_build:
clean:
rm -f $(OBJ) src/file-to-c/main.o
rm -f $(PAGES_CMP)
rm -f $(TMPLS_C)
rm -f test/unit/*.bin
rm -f filec ctemplate
rm $(TARGET) || true

View file

@ -1,295 +0,0 @@
/*
* Treebird - Lightweight frontend for Pleroma
* Copyright (C) 2022 Nekobit
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// TODO error handling
enum args
{
ARG_FILENAME = 1,
ARG_VARIABLE
};
enum tmpl_type
{
TMPL_INT,
TMPL_UINT,
TMPL_STR,
TMPL_STRLEN,
TMPL_FLOAT,
};
struct tmpl_token
{
enum tmpl_type type;
char* token;
int used; // Internal use only
};
long filesize(FILE* file)
{
long orig = ftell(file);
fseek(file, 0, SEEK_END);
long size = ftell(file);
fseek(file, orig, SEEK_SET);
return size;
}
void chexput(const char* buf, size_t size)
{
for (size_t i = 0; i < size && buf; ++i)
{
printf("0X%hhX,", buf[i]);
}
}
char* strnws(char* str)
{
for (; isblank(*str); ++str);
return str;
}
char* strwsc(char* str, char stop)
{
for (; !isblank(*str) && *str != stop; ++str);
return str;
}
char* tkn_typetostr(enum tmpl_type tkn)
{
switch (tkn)
{
case TMPL_INT:
return "int";
case TMPL_STR:
return "const char*";
case TMPL_STRLEN:
return "char*";
case TMPL_UINT:
return "unsigned";
case TMPL_FLOAT:
return "float";
}
return "";
}
enum tmpl_type tkn_type(char* str)
{
if (strcmp(str, "string") == 0 ||
strcmp(str, "str") == 0 ||
strcmp(str, "%s") == 0)
return TMPL_STR;
else if (strcmp(str, "stringlen") == 0 ||
strcmp(str, "strlen") == 0 ||
strcmp(str, "%.s") == 0)
return TMPL_STRLEN;
else if (strcmp(str, "int") == 0 ||
strcmp(str, "i") == 0 ||
strcmp(str, "%d") == 0)
return TMPL_INT;
else if (strcmp(str, "unsigned") == 0 ||
strcmp(str, "uint") == 0 ||
strcmp(str, "%u") == 0)
return TMPL_UINT;
else if (strcmp(str, "float") == 0 ||
strcmp(str, "%f") == 0)
return TMPL_FLOAT;
// TODO Real error handling
return TMPL_INT;
}
char* parse_tmpl_token(char* buf, struct tmpl_token* tkn)
{
tkn->used = 0;
char* type_begin;
char* type_end;
char* tkn_begin;
char* tkn_end;
// skip {{
buf += 2;
type_begin = strnws(buf);
type_end = strwsc(type_begin, ':');
if (*type_end != ':') buf = strchr(buf, ':');
else buf = type_end;
*type_end = '\0';
tkn->type = tkn_type(type_begin);
++buf;
tkn_begin = strnws(buf);
tkn_end = strwsc(tkn_begin, '}');
if (*tkn_end == '}') buf = tkn_end + 2;
else buf = strstr(buf, "}}") + 2;
*tkn_end = '\0';
tkn->token = tkn_begin;
return buf;
}
void print_template(char* var, char* buf)
{
char* buf_prev = buf;
char* buf_curr = buf;
// Store result
struct tmpl_token* tokens = NULL;
size_t tokens_len = 0;
printf("#ifndef __%s\n"
"#define __%s\n"
"#include <stddef.h>\n"
"static const char data_%s[] = {", var, var, var);
while (1)
{
buf_curr = strstr(buf_curr, "{{");
if (!buf_curr) break;
// Create tokens array
tokens = realloc(tokens, sizeof(struct tmpl_token) * ++tokens_len);
if (!tokens)
{
perror("realloc");
break;
}
// Print up to this point
chexput(buf_prev, buf_curr - buf_prev);
buf_prev = buf_curr = parse_tmpl_token(buf_curr, tokens + (tokens_len-1));
// Print type
switch (tokens[tokens_len-1].type)
{
case TMPL_INT:
// I'm lazy so we'll use this
chexput("%d", 2);
break;
case TMPL_STR:
chexput("%s", 2);
break;
case TMPL_STRLEN:
chexput("%.s", 3);
break;
case TMPL_UINT:
chexput("%u", 2);
break;
case TMPL_FLOAT:
chexput("%f", 2);
break;
}
}
// Print remainder if any
chexput(buf_prev, strlen(buf_prev));
puts("0};");
// Only create struct and function when there are tokens detected
if (tokens_len)
{
printf("struct %s_template {", var);
int should_print = 0;
// Print tokens
for (size_t i = 0; i < tokens_len; ++i)
{
should_print = 1;
// Check if used
for (size_t j = 0; j < tokens_len; ++j)
{
if (i != j &&
strcmp(tokens[i].token, tokens[j].token) == 0 &&
tokens[j].used)
should_print = 0;
}
if (should_print)
{
printf("%s %s;\n", tkn_typetostr(tokens[i].type), tokens[i].token);
if (tokens[i].type == TMPL_STRLEN)
printf("size_t %s_len;\n", tokens[i].token);
tokens[i].used = 1;
}
}
// Generate function
printf("};\n");
printf("char* tmpl_gen_%s(struct %s_template* data, size_t* size);", var, var);
// Pipe the contents of the real function code into stderr, then we can redirect it
// We could also just write the file directly but this works better with the Makefile
// and I am lazy
fprintf(stderr, "#include \"%s.ctmpl\"\n"
"#include \"../src/easprintf.h\"\n"
"char* tmpl_gen_%s(struct %s_template* data, size_t* size){\n"
"char* ret;\n"
"size_t s = easprintf(&ret, data_%s, ", var, var, var, var);
for (size_t i = 0; i < tokens_len; ++i)
{
fprintf(stderr, "data->%s", tokens[i].token);
// No (null) strings, make them empty
if (tokens[i].type == TMPL_STR || tokens[i].type == TMPL_STRLEN)
fprintf(stderr, "?data->%s:\"\"", tokens[i].token);
fputs(i < tokens_len-1 ? ", " : "", stderr);
}
fputs(");\n"
"if (size) *size = s;\n"
"return ret;\n}", stderr);
}
// Done!
puts("\n#endif");
// Cleanup
free(tokens);
}
int main(int argc, char** argv)
{
char* buf;
FILE* file = fopen(argv[ARG_FILENAME], "rb");
long size = filesize(file);
if (!(buf = malloc(size)))
{
perror("malloc");
return 1;
}
if (fread(buf, 1, size, file) != size)
{
fputs("Didn't read correctly!", stderr);
free(buf);
return 1;
}
fclose(file);
buf[size-1] = '\0';
print_template(argv[ARG_VARIABLE], buf);
free(buf);
return 0;
}

View file

@ -1,28 +0,0 @@
<div class="simple-page">
<div class="about-header">
<h1><img id="about-icon" src="/treebird_logo.png"> <span>Treebird</span></h1>
</div>
<div class="about-content">
<p>Treebird is a Pleroma frontend that is lightweight, efficient, and true to the web. It's written in C with FCGI making it simple and fast to work with and deploy. It is very tight to the philosophy of how the internet has always worked; Javascript provides extra sugar (or scripting) to improve the experience but not a requirement, while still being simple enough that anyone can use it.</p>
<p>Treebird was created in response to PleromaFE performance issues and ironically a lack of PleromaAPI backend support. Treebird resembles GNU Social in appearance by default, but keeps the familiarity that many are used to of PleromaFE.</p>
<p>Treebird was created by <a href="/@nekobit@rdrama.cc">Nekobit</a>, who created <a href="https://fossil.nekobit.net/mastodont-c/home">mastodont-c</a>, a library that can communicate with Revolver's, Pleroma's, and Mastodon's REST APIs.</p>
<h3>Other contributors</h3>
<ul>
<li><a href="/@coyote@pl.lain.sh" alt="Created Solarized themes for Treebird">Coyote</a></li>
<li><a href="/@grumbulon@freecumextremist.com" alt="Helped with the original dark theme, and created the original treebird.dev website">Grumbulon</a></li>
<li><a href="/@khan@sleepy.cafe" alt="Started idea of treebird">Khan</a></li>
<li><a href="/@sam@froth.zone" alt="Testing with Nginx and documentation">SamTherapy</a></li>
<li><a href="/@pch_xyz@seediqbale.xyz" alt="Chinese (Traditional) translations">Pacific Coast Highway (pch_xyz)</a></li>
</ul>
<p>Treebird is licensed in AGPLv3, and mastodont-c is LGPLv3 licensed. Other licenses apply to libraries as well. <a href="/about/license">View the AGPLv3 license here.</a></p>
<a class="btn btn-single" href="https://fossil.nekobit.net/treebird/home">View the Fossil Repository</a> <a class="btn btn-single" href="/about/license">View the License</a>
</div>
</div>
<!-- Scripts -->
<script src="/js/worm.js"></script>

View file

@ -1,67 +0,0 @@
{{%s:is_blocked}}
{{%s:menubar}}
<div class="account">
<div class="acct-banner" style="background-image:url('{{%s:header}}');">
{{%s:follows_you}}
<div class="acct-info-data">
<span class="acct-displayname">{{%s:display_name}}</span>
<span class="acct-username">{{%s:acct}}</span>
</div>
<span class="menu-container user-options-btn">
Menu
<div class="menu menu-options">
<ul>
<li><a class="nolink" href="{{%s:prefix}}/user/{{%s:userid}}/action/{{%s:unsubscribe}}subscribe"><input class="btn-menu" type="button" value="{{%s:subscribe_text}}"></a></li>
<li><a class="nolink" href="{{%s:prefix}}/user/{{%s:userid}}/action/{{%s:unblock}}block"><input class="btn-menu" type="button" value="{{%s:block_text}}"></a></li>
<li><a class="nolink" href="{{%s:prefix}}/user/{{%s:userid}}/action/{{%s:unmute}}mute"><input class="btn-menu" type="button" value="{{%s:mute_text}}"></a></li>
</ul>
</div>
</span>
</div>
<div class="acct-header">
<a href="{{%s:prefix}}/@{{%s:acct}}" class="header-btn btn">
<span class="btn-header">{{%s:tab_statuses_text}}</span>
<span class="btn-content">{{%d:statuses_count}}</span>
</a>
<a href="{{%s:prefix}}/@{{%s:acct}}/following" class="header-btn btn">
<span class="btn-header">{{%s:tab_following_text}}</span>
<span class="btn-content">{{%d:following_count}}</span>
</a>
<a href="{{%s:prefix}}/@{{%s:acct}}/followers" class="header-btn btn">
<span class="btn-header">{{%s:tab_followers_text}}</span>
<span class="btn-content">{{%d:followers_count}}</span>
</a>
{{%s:follow_btn}}
</div>
<div class="acct-pfp-wrapper">
<img class="acct-pfp" src="{{%s:avatar}}">
</div>
</div>
{{%s:info}}
<table class="tabs ui-table">
<tr>
<td>
<a href="{{%s:prefix}}/@{{%s:acct}}/statuses"><input class="tab-btn btn {{%s:tab_statuses_focused}}" type="button" value="{{%s:tab_statuses_text}}"></a>
</td>
<td>
<a href="{{%s:prefix}}/@{{%s:acct}}/scrobbles"><input class="tab-btn btn {{%s:tab_scrobbles_focused}}" type="button" value="{{%s:tab_scrobbles_text}}"></a>
</td>
<td>
<a href="{{%s:prefix}}/@{{%s:acct}}/media"><input class="tab-btn btn {{%s:tab_media_focused}}" type="button" value="{{%s:tab_media_text}}"></a>
</td>
<td>
<a href="{{%s:prefix}}/@{{%s:acct}}/pinned"><input class="tab-btn btn {{%s:tab_pinned_focused}}" type="button" value="{{%s:tab_pinned_text}}"></a>
</td>
</tr>
</table>
<div class="account-content">
{{%s:acct_content}}
</div>

View file

@ -1,7 +0,0 @@
<div class="menubar">
<a href="{{%s:prefix}}/blocked">{{ %s : blocked_str }}</a>
<span class="bullet-separate">&bull;</span>
<a href="{{%s:prefix}}/muted">{{ %s : muted_str }}</a>
<span class="bullet-separate">&bull;</span>
<a href="{{%s:prefix}}/favourites">{{ %s : favourited_str }}</a>
</div>

View file

@ -1,3 +0,0 @@
<a href="{{%s:prefix}}/user/{{%s:userid}}/action/{{%s:unfollow}}follow" class="follow-btn btn {{%s:active}}">
{{%s:follow_text}}
</a>

View file

@ -1,3 +0,0 @@
<div class="account-info">
<div class="account-note">{{%s:acct_note}}</div>
</div>

View file

@ -1,36 +0,0 @@
<div class="account-sidebar" {{ %s : header }}>
<table class="acct-info">
<tr>
<td>
<img src="{{%s:avatar}}" class="acct-pfp" loading="lazy">
</td>
<td class="acct-info-right">
<span class="username">{{%s:username}}</span>
<span class="acct">@<span class="acct-js-grep">{{%s:acct}}</span></span>
</td>
</tr>
</table>
<table class="acct-stats">
<tr>
<td class="header-btn btn">
<a href="{{%s:prefix}}/@{{%s:acct}}">
<span class="btn-header">{{%s:statuses_text}}</span>
<span class="btn-content">{{%d:statuses_count}}</span>
</a>
</td>
<td class="header-btn btn">
<a href="{{%s:prefix}}/@{{%s:acct}}/following">
<span class="btn-header">{{%s:following_text}}</span>
<span class="btn-content">{{%d:following_count}}</span>
</a>
</td>
<td class="header-btn btn">
<a href="{{%s:prefix}}/@{{%s:acct}}/followers">
<span class="btn-header">{{%s:followers_text}}</span>
<span class="btn-content">{{%d:followers_count}}</span>
</a>
</td>
</tr>
</table>
</div>

View file

@ -1,19 +0,0 @@
<table class="account-stub">
<tr>
<td class="pfp-td">
<a href="{{%s:prefix}}/@{{%s:acct}}"><img src="{{%s:avatar}}"></a>
</td>
<td class="account-stub-info-wrapper">
<div class="account-stub-info">
<a href="{{%s:prefix}}/@{{%s:acct}}">
<div class="account-stub-top">
<span class="username">{{%s:display_name}}</span>
</div>
<div class="account-stub-bottom">
<span class="instance-info">@{{%s:acct}}</span>
</div>
</a>
</div>
</td>
</tr>
</table>

View file

@ -1,7 +0,0 @@
<div class="attachment-container attachment-audio">
<!-- Here even if not sensitive -->
<div class="sensitive-placeholder {{%s:sensitive}}"></div>
<audio width="256" controls preload="metadata">
<source src="{{%s:src}}">
</video>
</div>

View file

@ -1,7 +0,0 @@
<div class="attachment-container attachment-gifv">
<video width="256" autoplay muted>
<source src="{{%s:src}}">
[ GIFV ]
</video>
{{%s:sensitive}}
</div>

View file

@ -1,4 +0,0 @@
<div class="attachment-container attachment-img">
<img width="256" src="{{%s:src}}" loading="lazy">
{{%s:sensitive}}
</div>

View file

@ -1,3 +0,0 @@
<div class="attachment-container attachment-link {{%s:sensitive}}">
<a href="{{%s:url}}">Attachment</a>
</div>

View file

@ -1,7 +0,0 @@
<div class="attachment-container attachment-video">
<video width="256" controls preload="metadata">
<source src="{{%s:src}}">
[ VIDEO ]
</video>
{{%s:sensitive}}
</div>

View file

@ -1,3 +0,0 @@
<div class="attachments">
{{%s:attachments}}
</div>

View file

@ -1,3 +0,0 @@
<div class="bar">
<div style="max-height: {{%f:value}}%%;"></div>
</div>

View file

@ -1,3 +0,0 @@
<div class="bar-graph">
{{%s:graph}}
</div>

View file

@ -1,4 +0,0 @@
<div class="simple-page">
<h1><a href="{{ %s : back_ref }}" class="page-back-btn">&lt;</a> {{ %s : page_title }}</h1>
</div>
{{%s : page_content}}

View file

@ -1,7 +0,0 @@
<div class="simple-page">
<h1>Bookmarks</h1>
</div>
<div class="bookmarks-container">
{{%s:statuses}}
</div>
{{%s:navigation}}

View file

@ -1,19 +0,0 @@
<a href="{{%s:prefix}}/chats/{{%s:id}}#{{%s:message_id}}">
<table class="contact">
<tr>
<td class="pfp-td">
<img src="{{%s:avatar}}">
</td>
<td class="contact-right-td">
<div class="contact-right">
<div class="contact-info">
<span class="username" title="{{%s:acct}}">{{%s:display_name}}</span>
</div>
<div class="last-message">
<span class="chat-msg-preview">{{ %s : last_message }}</span>
</div>
</div>
</td>
</tr>
</table>
</a>

View file

@ -1,21 +0,0 @@
<div class="page-header">
<a href="{{ %s : prefix }}{{ %s : back_link }}" class="page-header-button">&larr;</a>
<img src="{{ %s : avatar }}" class="page-header-image avatar">
<a href="{{ %s : prefix }}/@{{%s:acct}}" class="page-header-title">{{ %s : acct }}</a>
</div>
<div class="chat-view">
{{ %s : messages }}
<div class="anchor"></div>
</div>
<form action="" method="post">
<table class="chatbox ui-table">
<tr>
<td>
<textarea></textarea>
</td>
<td>
<input type="submit" class="chatbox-btn btn" value="Send">
</td>
</tr>
</table>
</form>

View file

@ -1 +0,0 @@
{{ %s : content }}

View file

@ -1,42 +0,0 @@
<div class="simple-page">
<form action="appearance" method="post" enctype="multipart/form-data">
<!-- Lets server know we sent it -->
<input type="hidden" name="set" value="1">
<h1>Appearance</h1>
<input class="btn btn-single" type="submit" value="Save">
<h3>Theme variant</h3>
<ul>
<li>
<label for="cfgthemevar">Theme variant</label>
<select name="theme" id="cfgthemevar">
<option value="treebird" title="Created by nekobit (@neko@rdrama.cc) | Former dark variant created by Grumbulon (@grumbulon@freecumextremist.com)">Treebird - Default, simple theme</option>
<option value="solarized" title="Created by coyote (@coyote@pl.lain.sh)">Solarized - Solarized colors for pleasant viewing</option>
</select>
</li>
</ul>
<h3>Color Scheme</h3>
<ul>
<li>
<input type="radio" id="cfglight" name="themeclr" value="0" checked>
<label for="cfglight">Light</label>
</li>
<li>
<input type="radio" id="cfgdark" name="themeclr" value="1">
<label for="cfgdark">Dark</label>
</li>
</ul>
<h3>Background</h3>
<ul>
<li>
<input type="file" name="file">
</li>
</ul>
<ul>
<li>
Sidebar opacity: <input type="range" name="sidebaropacity" min="0" max="255" value="255">
</li>
</ul>
<input class="btn btn-single" type="submit" value="Save">
</form>
</div>

View file

@ -1,94 +0,0 @@
<div class="simple-page">
<form action="general" method="post">
<!-- Lets server know we sent it -->
<input type="hidden" name="set" value="1">
<h1>General</h1>
<input class="btn btn-single" type="submit" value="Save">
<h3>Locales</h3>
<ul>
<li>
<label for="cfglang">Language:</label>
<select name="lang" id="cfglang">
<option value="0">English</option>
<option value="1">Spanish</option>
<option value="2">Chinese (Traditional)</option>
</select>
</li>
</ul>
<h3>JavaScript</h3>
<ul>
<li>
<input type="checkbox" id="cfgjs" name="js" value="1" {{%s:js_on}}>
<label for="cfgjs">Enable JavaScript - If disabled, overrides options below</label>
</li>
<!-- <li> -->
<!-- <input type="checkbox" id="cfgjsactions" name="jsactions" value="1" {{%s:jsactions_on}}> -->
<!-- <label for="cfgjsactions">Quick actions - Likes, Boosts, etc done in background</label> -->
<!-- </li> -->
<!-- <li> -->
<!-- <input type="checkbox" id="cfgjsreply" name="jsreply" value="1" {{%s:jsreply_on}}> -->
<!-- <label for="cfgjsreply">Quick reply - Replies don't require redirects</label> -->
<!-- </li> -->
<!-- <li> -->
<!-- <input type="checkbox" id="cfgjslive" name="jslive" value="1" {{%s:jslive_on}}> -->
<!-- <label for="cfgjslive">Live update - Statuses, chats, and reactions fetch on the fly</label> -->
<!-- </li> -->
</ul>
<h3>Statuses</h3>
<ul>
<li>
<input type="checkbox" id="cfgstatattachments" name="statattachments" value="1" {{%s:status_attachments_on}}>
<label for="cfgstatattachments">Show attachments - If disabled, attachments are links instead</label>
</li>
<li>
<input type="checkbox" id="cfgstatgreentexts" name="statgreentexts" value="1" {{%s:status_greentexts_on}}>
<label for="cfgstatgreentexts">Show greentexts</label>
</li>
<li>
<input type="checkbox" id="cfgstatdope" name="statdope" value="1" {{%s:status_dopameme_on}}>
<label for="cfgstatdope">Show dopameme numbers - Likes, comments, and boost counts</label>
</li>
<li>
<input type="checkbox" id="cfgstatoneclicksoftware" name="statoneclicksoftware" value="1" {{%s:status_oneclicksoftware_on}}>
<label for="cfgstatoneclicksoftware">Show Like-Boost button - Show a button in the status which likes and boosts a post</label>
</li>
<li>
<input type="checkbox" id="interactimg" name="interact_img" value="1" {{%s:status_interact_img_on}}>
<label for="interactimg">Use IMG for interaction buttons - Compatibility</label>
</li>
<!-- <li> -->
<!-- <input type="checkbox" id="cfgstatemojolikes" name="statemojolikes" value="1" {{%s:status_emojo_likes_on}}> -->
<!-- <label for="cfgstatemojolikes">Convert Emoji reacts to likes - Also disables the emoji reaction button</label> -->
<!-- </li> -->
<!-- <li> -->
<!-- <input type="checkbox" id="cfgstathidemuted" name="stathidemuted" value="1" {{%s:status_hide_muted_on}}> -->
<!-- <label for="cfgstathidemuted">Hide statuses from muted users and threads - If disabled, statuses will appear collapsed</label> -->
<!-- </li> -->
</ul>
<h3>Instance</h3>
<ul>
<!-- <li> -->
<!-- <input type="checkbox" id="cfginstanceshowshoutbox" name="instanceshowshoutbox" value="1" {{%s:instance_show_shoutbox_on}}> -->
<!-- <label for="cfginstanceshowshoutbox">Show instance shoutbox (JS required)</label> -->
<!-- </li> -->
<li>
<input type="checkbox" id="cfginstancepanel" name="instancepanel" value="1" {{%s:instance_panel_on}}>
<label for="cfginstancepanel">Show instance panel - <em>Admins should <strong>not</strong> use the instance panel for major announcements</em></label>
</li>
</ul>
<h3>Notifications</h3>
<ul>
<li>
<input type="checkbox" id="cfgnotifembed" name="notifembed" value="1" {{%s:notifications_embed_on}}>
<label for="cfgnotifembed">Display notifications in iFrame - iFrames separate loading from the main page</label>
</li>
</ul>
<input class="btn btn-single" type="submit" value="Save">
</form>
</div>

View file

@ -1,5 +0,0 @@
<ul class="sidebar-config">
<li><a class="sidebarbtn-sub {{%s:general_active}}" href="{{%s:prefix}}/config/general">{{%s:general}}</a></li>
<li><a class="sidebarbtn-sub {{%s:appearance_active}}" href="{{%s:prefix}}/config/appearance">{{%s:appearance}}</a></li>
<li><a class="sidebarbtn-sub {{%s:account_active}}" href="{{%s:prefix}}/config/account">{{%s:account}}</a></li>
</ul>

View file

@ -1,19 +0,0 @@
<table class="chat-contact">
<tr>
<td>
<a href="{{%s:prefix}}/@{{%s:acct}}"><img src="{{%s:avatar}}"></a>
</td>
<td class="account-stub-info-wrapper">
<div class="account-stub-info">
<a href="{{%s:prefix}}/@{{%s:acct}}">
<div class="account-stub-top">
<span class="username">{{%s:display_name}}</span>
</div>
<div class="account-stub-bottom">
<span class="instance-info">@{{%s:acct}}</span>
</div>
</a>
</div>
</td>
</tr>
</table>

View file

@ -1 +0,0 @@
<img src="{{ %s : url }}" class="custom-emoji-react">

View file

@ -1,6 +0,0 @@
<div class="simple-page">
<h1>Direct Messages</h1>
</div>
<div class="direct-container">
{{%s:direct_content}}
</div>

View file

@ -1,21 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Embed</title>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="/{{ %s : stylesheet }}.css">
<style>
html, body
{
margin: 0;
padding: 0;
background-color: unset;
}
</style>
</head>
<body>
<div class="embed">
{{ %s : embed }}
</div>
</body>
</html>

View file

@ -1 +0,0 @@
<a href="/status/{{%s:status_id}}/react/{{%s:emoji}}" class="emoji">{{%s:emoji}}</a>

View file

@ -1,81 +0,0 @@
<div class="emoji-picker">
<table class="tabs ui-table">
<tr>
<td>
<label for="cat-smileys">
<span class="tab-btn btn btn-alt">😃</span>
</label>
</td>
<td>
<label for="cat-animals">
<span class="tab-btn btn btn-alt">🐻</span>
</label>
</td>
<td>
<label for="cat-food">
<span class="tab-btn btn btn-alt">🍔</span>
</label>
</td>
<td>
<label for="cat-travel">
<span class="tab-btn btn btn-alt">🚀</span>
</label>
</td>
<td>
<label for="cat-activities">
<span class="tab-btn btn btn-alt">⚽</span>
</label>
</td>
<td>
<label for="cat-objects">
<span class="tab-btn btn btn-alt">🔧</span>
</label>
</td>
<td>
<label for="cat-symbols">
<span class="tab-btn btn btn-alt">🔢</span>
</label>
</td>
<td>
<label for="cat-flags">
<span class="tab-btn btn btn-alt">🎌</span>
</label>
</td>
</tr>
</table>
<div class="emoji-picker-emojos-wrapper">
<input type="radio" class="hidden" id="cat-smileys" name="emoji-cat" checked>
<div class="emoji-picker-emojos">
{{%s:emojis_smileys}}
</div>
<input type="radio" class="hidden" id="cat-animals" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_animals}}
</div>
<input type="radio" class="hidden" id="cat-food" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_food}}
</div>
<input type="radio" class="hidden" id="cat-travel" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_travel}}
</div>
<input type="radio" class="hidden" id="cat-activities" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_activities}}
</div>
<input type="radio" class="hidden" id="cat-objects" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_objects}}
</div>
<input type="radio" class="hidden" id="cat-symbols" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_symbols}}
</div>
<input type="radio" class="hidden" id="cat-flags" name="emoji-cat">
<div class="emoji-picker-emojos">
{{%s:emojis_flags}}
</div>
</div>
</div>

View file

@ -1 +0,0 @@
<span class="emoji">{{%s:emoji}}</span>

View file

@ -1 +0,0 @@
<a href="{{%s:prefix}}/status/{{%s:status_id}}/react/{{%s:emoji}}" class="emoji-react-box {{%s:custom_emoji}} btn btn-alt {{%s:emoji_active}}"><span class="emoji">{{%s:emoji_display}}</span> <span class="emoji-num">{{%u:emoji_count}}<span></a>

View file

@ -1,3 +0,0 @@
<ul class="emoji-reactions">
{{%s:emojis}}
</ul>

View file

@ -1 +0,0 @@
<span class="e-{{%s:err_type}} {{%s:is_padded}}">{{%s:error}}</span>

View file

@ -1,4 +0,0 @@
<div class="simple-page">
<h1>404</h1>
<p>{{%s:error}}</p>
</div>

View file

@ -1 +0,0 @@
<svg class="expand" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 3h6v6M14 10l6.1-6.1M9 21H3v-6M10 14l-6.1 6.1"/></svg>

Before

Width:  |  Height:  |  Size: 268 B

View file

@ -1 +0,0 @@
<img class="expand-btn-img" src="/img/compat_icons/maximize.png">

View file

@ -1,7 +0,0 @@
<div class="simple-page">
<h1>Favorites</h1>
</div>
<div class="favourites-container">
{{%s:statuses}}
</div>
{{%s:navigation}}

View file

@ -1 +0,0 @@
<svg class="follow" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"></path><circle cx="8.5" cy="7" r="4"></circle><line x1="20" y1="8" x2="20" y2="14"></line><line x1="23" y1="11" x2="17" y2="11"></line></svg>

Before

Width:  |  Height:  |  Size: 385 B

View file

@ -1 +0,0 @@
<a href="{{%s:prefix}}/tag/{{%s:tag}}" style="font-size: {{%u:tag_size}}px;" class="hashtag-item">#{{%s:tag}}</a>

View file

@ -1,7 +0,0 @@
<div class="simple-page">
<h1>Hashtag - #{{%s:tag}}</h1>
</div>
<div class="hashtags-container">
{{%s:statuses}}
</div>
{{%s:navigation}}

View file

@ -1,3 +0,0 @@
<span class="in-reply-to">
<svg class="in-reply-to-icon" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 9l6 6-6 6"/><path d="M4 4v7a4 4 0 0 0 4 4h11"/></svg> <a class="in-reply-to-id" href="{{%s:prefix}}/status/{{%s:status_id}}#{{%s:status_id}}"> <span class="in-reply-to-text">{{%s:in_reply_to_text}}</span> <span class="acct">{{%s:acct}}</span></a>
</span>

View file

@ -1,87 +0,0 @@
<!DOCTYPE html>
<html {{ %s : background_url }}>
<head>
<meta charset="utf-8">
<title>{{ %s : title }}</title>
<link rel="icon" type="image/png" href="/favicon.png">
<link rel="stylesheet" type="text/css" href="/treebird.css">
{{ %s : theme_str }}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="{{ %s : title }} is a decentralized social media platform">
<style>
{{ %s : sidebar_css }}
</style>
</head>
<body>
<div id="main-page">
<header id="navbar">
<label for="leftbar-show">
<svg class="leftbar-btn navbar-btn" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="3" y1="12" x2="21" y2="12"></line><line x1="3" y1="6" x2="21" y2="6"></line><line x1="3" y1="18" x2="21" y2="18"></line></svg>
</label>
<a href="{{ %s : prefix }}/"><img src="/treebird_logo.png" height="42"></a>
<span class="info">{{ %s : name }}</span>
<label for="rightbar-show">
<svg class="rightbar-btn navbar-btn" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 17H2a3 3 0 0 0 3-3V9a7 7 0 0 1 14 0v5a3 3 0 0 0 3 3zm-8.27 4a2 2 0 0 1-3.46 0"></path></svg>
</label>
<label for="searchbar-show">
<svg class="search-btn-show" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
</label>
<input type="checkbox" class="hidden" id="searchbar-show">
<div id="navbar-right-container">
<div id="navbar-right">
{{ %s : sidebar_cnt }}
<!-- Searchbox -->
<form action="{{ %s : prefix }}/search" method="get">
<input type="text" class="group group-left group-inputbox" placeholder="{{ %s : placeholder }}" id="searchbox" name="q"><!-- i hate HTML
--><input type="submit" class="btn group group-right" value="{{ %s : search_btn }}">
</form>
</div>
</div>
</header>
<input type="checkbox" id="leftbar-show" class="hidden">
<input type="checkbox" id="rightbar-show" class="hidden">
<table id="content" class="ui-table">
<!-- Navigation -->
<tr>
<td id="leftbar" class="sidebar">
<ul>
<li><a class="sidebarbtn {{ %s : active_home }}" href="{{ %s : prefix}}/">{{ %s : home }}</a></li>
<li><a class="sidebarbtn {{ %s : active_local }}" href="{{ %s : prefix}}/local/">{{ %s : local}}</a></li>
<li><a class="sidebarbtn {{ %s : active_federated }}" href="{{ %s : prefix}}/federated/">{{ %s : federated }}</a></li>
<li><a class="sidebarbtn {{ %s : active_notifications }}" href="{{ %s : prefix}}/notifications">{{ %s : notifications }}</a></li>
<li><a class="sidebarbtn {{ %s : active_lists }}" href="{{ %s : prefix}}/lists">{{ %s : lists }}</a></li>
<li><a class="sidebarbtn {{ %s : active_favourites }}" href="{{ %s : prefix}}/favourites">{{ %s : favourites }}</a></li>
<li><a class="sidebarbtn {{ %s : active_bookmarks }}" href="{{ %s : prefix}}/bookmarks">{{ %s : bookmarks }}</a></li>
<li><a class="sidebarbtn {{ %s : active_direct }}" href="{{ %s : prefix}}/direct">{{ %s : direct }}</a></li>
<li><a class="sidebarbtn {{ %s : active_chats }}" href="{{ %s : prefix}}/chats">{{ %s : chats }}</a></li>
<li><a class="sidebarbtn {{ %s : active_config }}" href="{{ %s : prefix}}/config">{{ %s : config }}</a></li>
</ul>
{{ %s : sidebar_leftbar }}
{{ %s : instance_panel }}
<div class="mini-links">
<a href="{{%s:prefix}}/about">{{ %s : about_link_str }}</a>
<span class="bullet-separate">&bull;</span>
<a href="{{%s:prefix}}/about/license">{{ %s : license_link_str }}</a>
<span class="bullet-separate">&bull;</span>
<a href="https://fossil.nekobit.net/treebird">{{ %s : source_link_str }}</a>
</div>
</td>
<!-- Display for posts -->
<td id="main">
{{ %s : main }}
</td>
<!-- Notifications and such -->
<td id="rightbar" class="sidebar">
{{ %s : sidebar_rightbar }}
</td>
</tr>
</table>
</div>
<!-- Source -->
<script src="/js/main.js"></script>
<script src="/js/emoji.js"></script>
</body>
</html>

View file

@ -1 +0,0 @@
Instance information

View file

@ -1,39 +0,0 @@
<div class="status-interact">
<table class="ui-table">
<tr>
<td>
{{ %s : reply_btn }}
</td>
<td>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input class="itype" type="hidden" name="itype" value="{{%s:unrepeat}}repeat">
<label class="repeat-btn pointer statbtn">
{{ %s : repeat_btn }}
<span class="count">{{%s:repeats_count}}</span>
<input class="hidden" type="submit" value="{{%s:repeat_text}}">
</label>
</form>
</td>
<td>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input class="itype" type="hidden" name="itype" value="{{%s:unfavourite}}like">
<label class="pointer statbtn like-btn">
{{ %s : like_btn }}
<span class="count">{{%s:favourites_count}}</span>
<input class="hidden" type="submit" value="{{%s:favourites_text}}">
</label>
</form>
</td>
{{%s:likeboost_btn}}
{{%s:reactions_btn}}
<td>
<a target="_parent" href="{{%s:prefix}}/status/{{%s:status_id}}#{{%s:status_id}}" class="pointer statbtn view-btn">
{{ %s : expand_btn }}
</a>
</td>
<td>
<a href="#{{%s:status_id}}" class="time">{{%s:rel_time}}</a>
</td>
</tr>
</table>
</div>

View file

@ -1,4 +0,0 @@
<div class="simple-page">
<h1><a href="{{ %s : back_ref }}" class="page-back-btn">&lt;</a> {{ %s : interaction_str }}</h1>
</div>
{{ %s : accts }}

View file

View file

@ -1,2 +0,0 @@
<svg class="like {{%s:favourite_active}}" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>

Before

Width:  |  Height:  |  Size: 344 B

View file

@ -1 +0,0 @@
<img class="like-btn-img {{ %s : favourite_active }}" src="{{ %s : prefix }}/img/compat_icons/star.png">

View file

@ -1 +0,0 @@
<svg class="like" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>

Before

Width:  |  Height:  |  Size: 319 B

View file

@ -1,9 +0,0 @@
<td>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input class="itype" type="hidden" name="itype" value="likeboost">
<label class="pointer statbtn likeboost-btn">
<svg class="one-click-software" width="20" height="20" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g><g stroke-width="1.98"><path d="m19.15 8.5061 2.7598 2.7598-2.7598 2.7598"/><path d="m14.756 11.325s2.5484-0.05032 6.3258 0.01026m-15.639 10.807-2.7598-2.7598 2.7598-2.7598"/><path d="m22.4 15.327v1.2259c0 1.156-1.2356 2.7598-2.7598 2.7598h-16.664"/></g><polygon transform="matrix(.60736 0 0 .60736 .60106 .63577)" points="18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2 15.09 8.26 22 9.27 17 14.14" stroke-width="2.9656"/></g></svg>
<input class="hidden" type="submit" value="L+R">
</label>
</form>
</td>

View file

@ -1,15 +0,0 @@
<li>
<a href="{{%s:prefix}}/lists/for/{{%s:list_id}}" class="btn split list-item">{{%s:list}}</a><label for="list-edit-{{%s:list_id}}"><span class="btn edit-list-btn">Edit</span></label>
<input type="checkbox" id="list-edit-{{%s:list_id}}" class="list-radio-show hidden" name="list-radio" class="hidden">
<div class="list-edit-content">
<form action="{{%s:prefix}}/lists/edit/{{%s:list_id}}" method="post">
<input type="text" name="title">
<select name="replies_policy">
<option value="0">None</option>
<option value="1">List</option>
<option value="2">Followed</option>
</select>
</form>
</div>
</li>

View file

@ -1 +0,0 @@
asdasd

View file

@ -1,17 +0,0 @@
<div class="lists-view">
<h1 class="lists-view-header">Lists</h1>
<div class="lists-view-container">
<ul class="large-list center">
{{%s:lists}}
</ul>
<ul class="large-list center create-list">
<form action="{{%s:prefix}}/lists" method="post">
<li>
<input type="text" name="title" class="create-list-form"><input type="submit" value="Create list" class="create-list-btn btn">
</li>
</form>
</ul>
</div>
</div>

View file

@ -1,29 +0,0 @@
<div class="simple-page">
<h1>{{%s:login_header}}</h1>
{{%s:error}}
<form action="{{%s:prefix}}/login" method="post">
<div class="form-group">
<label for="login-username">{{%s:username}}: </label>
<input type="text" id="login-username" name="username">
</div>
<div class="form-group">
<label for="login-password">{{%s:password}}: </label>
<input type="password" id="login-password" name="password"><br>
</div>
<div class="form-group">
<input class="btn" type="submit" value="{{%s:login_submit}}">
</div>
</form>
<h6>{{%s:instance_text}}</h6>
<form action="{{%s:prefix}}/login/oauth" method="post">
<div class="form-group">
<label for="instance-url">{{%s:instance_url}}: </label>
<input type="url" id="instance-url" name="instance">
<input class="btn" type="submit" value="{{%s:instance_submit}}">
</div>
</form>
</div>

View file

@ -1,6 +0,0 @@
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:itype}}">
<input type="submit" class="btn-menu" value="{{%s:text}}">
</form>
</li>

View file

@ -1,10 +0,0 @@
<div class="message-container {{ %s : is_you }}">
<img src="{{ %s : avatar }}" class="avatar">
<div class="message-wrapper">
<div class="message" id="{{ %s : id }}">
<span class="content">{{ %s : content }}</span>
<span class="time">12:00</span>
</div>
</div>
</div>

View file

@ -1,32 +0,0 @@
<table class="navigation ui-table">
<tr>
<td class="nav-up btn">
<form action="" method="post">
<label class="pointer">
<span class="nav-btn">Up</span>
<input type="submit" class="hidden">
</label>
</form>
</td>
<td class="nav-prev btn">
<form action="" method="post">
<label class="pointer">
<input type="hidden" name="start_id" value="{{%s:start_id}}">
<input type="hidden" name="min_id" value="{{%s:min_id}}">
<span class="nav-btn {{%s:prev_active}}">Previous</span>
{{%s:prev_submit}}
</label>
</form>
</td>
<td class="nav-next btn">
<form action="" method="post">
<label class="pointer">
<input type="hidden" name="start_id" value="{{%s:start_id}}">
<input type="hidden" name="max_id" value="{{%s:max_id}}">
<span class="nav-btn">Next</span>
<input type="submit" class="hidden">
</label>
</form>
</td>
</tr>
</table>

View file

@ -1,10 +0,0 @@
<div class="notification-info">
<img src="{{%s:avatar}}" loading="lazy" class="avatar">
<div class="notification-user">
<span class="notification-text-group-with-icon">
<span class="username">{{%s:username}}</span>
<span class="action">{{%s:action}}</span>
</span>
{{%s:action_item}} <!-- If any -->
</div>
</div>

View file

@ -1,25 +0,0 @@
<table class="notification notification-regular ui-table">
<tr>
<td class="pfp-td">
<img src="{{%s:avatar}}" loading="lazy">
</td>
<td class="notification-table-bit">
<table class="ui-table">
<tr>
<td>
<div class="notification-info-format">
<span class="notification-text-group-with-icon">
<span title="{{%s:acct}}" class="username">{{%s:display_name}}</span>
<span class="action">{{%s:action}}</span>
</span>
{{%s:notif_svg}}
</div>
<span class="notification-content">
<a href="{{%s:prefix}}/@{{%s:acct}}">@{{%s:acct}}</a>
</span>
</td>
</tr>
</table>
</td>
</tr>
</table>

View file

@ -1,17 +0,0 @@
<table class="notification-compact notification ui-table">
<tr>
<td class="pfp-compact-td">
<img src="{{%s:avatar}}">
</td>
<td>
<div class="notification-info">
<span class="notification-text-group{{%s:has_icon}}">
<span title="{{%s:acct}}" class="username">{{%s:display_name}}</span>
<span class="action">{{%s:action}}</span>
</span> {{%s:notif_svg}}
</div>
<div class="notification-content {{%s:is_status}}">{{%s:content}}</div>
<div class="notification-stats">{{%s:stats}}</div>
</td>
</tr>
</table>

View file

@ -1,3 +0,0 @@
<div class="notifications-container">
{{%s:notifications}}
</div>

View file

@ -1,25 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Notifications embed</title>
<link rel="stylesheet" type="text/css" href="/treebird.css">
{{ %s : theme_str }}
<style>
html, body
{
background-color: unset;
scrollbar-color: #808080 #eaecf0;
scrollbar-width: thin;
}
</style>
</head>
<body>
<div class="sidebar-embed-container">
{{%s:navigation_box}}
<div class="sidebar-embed-notifs">
{{%s:notifications}}
</div>
</div>
</body>
</html>

View file

@ -1,7 +0,0 @@
<div class="simple-page">
<h1>Notifications</h1>
</div>
<div class="notifications-container">
{{%s:notifications}}
</div>
{{%s:navigation}}

View file

@ -1,64 +0,0 @@
<form class="reply-form" action="{{%s:prefix}}/status/create" method="post" enctype="multipart/form-data">
{{%s:reply_input}}
<div class="statusbox">
<textarea name="content" placeholder="Just landed in N.Y." rows="5">{{%s:content}}</textarea>
<div class="statusfooter">
<div class="statusfooter-left">
<label>
<input type="file" name="file" class="hidden" multiple>
<div class="file-upload-btn btn-icon">
<svg xmlns="http://www.w3.org/2000/svg" width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48"></path></svg>
</div>
</label>
<select name="contenttype" class="content-type">
<option value="plaintext">Plain Text</option>
<option value="markdown">Markdown</option>
<option value="html">HTML</option>
<option value="bbcode">BBCode</option>
</select>
<div class="post-group">
<!-- Local -->
<label>
<input type="radio" name="visibility" value="local" class="hidden" {{ %s : local_checked }}>
<div class="visibility-icon vis-local">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 9v11a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V9"/><path d="M9 22V12h6v10M2 10.6L12 2l10 8.6"/></svg>
</div>
</label>
<!-- Direct -->
<label>
<input type="radio" name="visibility" value="direct" class="hidden" {{ %s : direct_checked }}>
<div class="visibility-icon vis-direct">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z"></path><polyline points="22,6 12,13 2,6"></polyline></svg>
</div>
</label>
<!-- Private -->
<label>
<input type="radio" name="visibility" value="private" class="hidden" {{ %s : private_checked }} {{ %s : private_disabled }}>
<div class="visibility-icon vis-private">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 10 0v4"></path></svg>
</div>
</label>
<!-- Unlisted -->
<label>
<input type="radio" name="visibility" value="unlisted" class="hidden" {{ %s : unlisted_checked }} {{ %s : unlisted_disabled }}>
<div class="visibility-icon vis-unlisted">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="3" y="11" width="18" height="11" rx="2" ry="2"></rect><path d="M7 11V7a5 5 0 0 1 9.9-1"></path></svg>
</div>
</label>
<!-- Public -->
<label>
<input type="radio" name="visibility" value="public" class="hidden" {{ %s : public_checked }} {{ %s : public_disabled }}>
<div class="visibility-icon vis-public">
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg>
</div>
</label>
</div>
</div>
<div class="statusfooter-right">
<input type="submit" value="Post" class="btn post-btn">
</div>
</div>
<div class="file-uploads-container hidden"></div>
</div>
</form>

View file

@ -1,15 +0,0 @@
<div class="sidebar-login">
<form action="{{%s:prefix}}/login" method="post">
<div class="form-group">
<label for="login-username">{{%s:username}}: </label>
<input type="text" id="login-username" name="username">
</div>
<div class="form-group">
<label for="login-password">{{%s:password}}: </label>
<input type="password" id="login-password" name="password"><br>
</div>
<div class="form-group">
<input class="btn" type="submit" value="{{%s:login}}">
</div>
</form>
</div>

View file

@ -1,7 +0,0 @@
<td>
<a target="_parent" href="{{%s:prefix}}/status/{{%s:status_id}}/react#{{%s:status_id}}" class="pointer statbtn react-btn">
<svg class="emoji-btn" width="20" height="20" fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><circle cx="12" cy="12" r="10"/><g><line x1="9" x2="9" y1="6.9367" y2="11.755" stroke-width="1.7916"/><line x1="15" x2="15" y1="6.9367" y2="11.755" stroke-width="1.7916"/><path d="m7.0891 15.099s4.7206 4.7543 9.7109 0" stroke-linecap="round" stroke-linejoin="miter" stroke-width="1.9764"/></g></svg>
</a>
{{%s:emoji_picker}}
</td>

View file

@ -1,2 +0,0 @@
<svg class="repeat {{%s:repeat_active}}" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 2.1l4 4-4 4"/><path d="M3 12.2v-2a4 4 0 0 1 4-4h12.8M7 21.9l-4-4 4-4"/><path d="M21 11.8v2a4 4 0 0 1-4 4H4.2"/></svg>

Before

Width:  |  Height:  |  Size: 344 B

View file

@ -1 +0,0 @@
<img class="repeat-btn-img {{ %s : repeat_active }}" src="{{ %s : prefix }}/img/compat_icons/repeat.png">

View file

@ -1 +0,0 @@
<svg class="repeat" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M17 2.1l4 4-4 4"/><path d="M3 12.2v-2a4 4 0 0 1 4-4h12.8M7 21.9l-4-4 4-4"/><path d="M21 11.8v2a4 4 0 0 1-4 4H4.2"/></svg>

Before

Width:  |  Height:  |  Size: 322 B

View file

@ -1,2 +0,0 @@
<svg class="reply" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="#000000" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M14 9l6 6-6 6"/><path d="M4 4v7a4 4 0 0 0 4 4h11"/></svg>

Before

Width:  |  Height:  |  Size: 258 B

View file

@ -1 +0,0 @@
<img class="expand-btn-img" src="/img/compat_icons/corner-down-right.png">

View file

@ -1,5 +0,0 @@
<a target="_parent" href="{{%s:prefix}}/status/{{%s:status_id}}/reply#{{%s:status_id}}" class="pointer statbtn reply-btn">
{{ %s : reply_btn }}
<span class="count">{{%s:reply_count}}</span>
</a>

View file

@ -1,28 +0,0 @@
<div id="scrobble-{{%s:scrobble_id}}" class="scrobble ui-table">
<table class="scrobblist-info">
<td class="pfp-compact-td">
<img class="pfp-img-scrobble" src="{{%s:avatar}}">
</td>
<td class="scrobblist-info-text">
<span class="username">{{%s:username}}</span> <span class="scrobblist-activity">{{%s:activity}}</span>
</td>
</table>
<table class="scrobbles">
<tr class="scrobble-title">
<td class="scrobble-key">{{%s:title_key}}</td>
<td class="scrobble-value">{{%s:title}}</td>
</tr>
<tr class="scrobble-artist">
<td class="scrobble-key">{{%s:artist_key}}</td>
<td class="scrobble-value">{{%s:artist}}</td>
</tr>
<tr class="scrobble-album">
<td class="scrobble-key">{{%s:album_key}}</td>
<td class="scrobble-value">{{%s:album}}</td>
</tr>
<tr class="scrobble-length">
<td class="scrobble-key">{{%s:length_key}}</td>
<td class="scrobble-value">{{%d:length}}</td>
</tr>
</table>
</div>

View file

@ -1,17 +0,0 @@
<table class="tabs ui-table">
<tr>
<td>
<a href="{{%s:prefix}}/search/statuses?q={{%s:query}}"><input class="tab-btn btn {{%s:statuses_active}}" type="button" value="{{%s:statuses}}"></a>
</td>
<td>
<a href="{{%s:prefix}}/search/accounts?q={{%s:query}}"><input class="tab-btn btn {{%s:accounts_active}}" type="button" value="{{%s:accounts}}"></a>
</td>
<td>
<a href="{{%s:prefix}}/search/hashtags?q={{%s:query}}"><input class="tab-btn btn {{%s:hashtags_active}}" type="button" value="{{%s:hashtags}}"></a>
</td>
</tr>
</table>
<div class="search-results">
{{%s:results}}
</div>

View file

@ -1,34 +0,0 @@
<table class="tabs ui-table">
<tr>
<td>
<label for="statuses-results-hidden">
<span class="tab-btn btn">{{%s:statuses}}</span>
</label>
</td>
<td>
<label for="accounts-results-hidden">
<span class="tab-btn btn">{{%s:accounts}}</span>
</label>
</td>
<td>
<label for="hashtags-results-hidden">
<span class="tab-btn btn">{{%s:hashtags}}</span>
</label>
</td>
</tr>
</table>
<div class="search-results">
<input type="radio" class="search-page-hidden hidden" id="statuses-results-hidden" name="searchpage" checked>
<div class="statuses-results search-page">
{{%s:statuses_results}}
</div>
<input type="radio" class="search-page-hidden hidden" id="accounts-results-hidden" name="searchpage">
<div class="accounts-results search-page">
{{%s:accounts_results}}
</div>
<input type="radio" class="search-page-hidden hidden" id="hashtags-results-hidden" name="searchpage">
<div class="hashtags-results search-page">
{{%s:hashtags_results}}
</div>
</div>

View file

@ -1,54 +0,0 @@
<input type="checkbox" class="status-hide" id="status-toggle-{{%s:status_id}}" {{ %s:thread_hidden }}>
<div class="status" id="{{%s:status_id}}">
{{ %s : notif_info }}
<table class="status-table ui-table">
<tr>
<td class="pfp-td {{%s:is_cat}} {{%s:is_bun}}">
<img src="{{%s:avatar}}" loading="lazy">
</td>
<td class="status-info">
<div class="poster-stats">
<span class="username">{{%s:username}}</span>
<a class="instance-info" href="{{%s:prefix}}/@{{%s:acct}}">{{%s:acct}}</a>
<span class="alignend">
<div class="menu-container status-visibility">
{{%s:visibility}}
<div class="menu">
<ul>
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:unmute}}mute">
<input type="submit" class="btn-menu" value="{{%s:unmute_btn}}">
</form>
</li>
<li>
<form action="{{%s:prefix}}/status/{{%s:status_id}/interact" method="post">
<input type="hidden" name="itype" value="{{%s:unbookmark}}bookmark">
<input type="submit" class="btn-menu" value="{{%s:unbookmark_btn}}">
</form>
</li>
{{%s:pin_status}}
{{%s:delete_status}}
</ul>
</div>
</div>
<label for="status-toggle-{{%s:status_id}}" class="status-view"></label>
</span>
</div>
<div class="status-data">
{{%s:in_reply_to_str}}
<span class="status-content">
{{%s:status_content}}
</span>
{{%s:attachments}}
{{%s:interactions}}
{{%s:emoji_reactions}}
{{%s:interaction_btns}}
</div>
</td>
</tr>
</table>
</div>
<input type="checkbox" class="quickreply-hide hidden" id="status-quickreply-{{%s:status_id}}">
{{ %s : reply }}

View file

@ -1 +0,0 @@
<img title="{{%s:acct}}" class="pfp-interaction" src="{{%s:avatar}}">

View file

@ -1,11 +0,0 @@
<div class="status-interactions">
<div class="status-interactions-labels">
<!-- Reblog count -->
{{%s:reblogs_count}}
<!-- Favourites count -->
{{%s:favourites_count}}
</div>
<div class="status-interactions-pfps">
{{%s:users}}
</div>
</div>

View file

@ -1,4 +0,0 @@
<a href="{{%s:prefix}}/status/{{%s:status_id}}/{{%s:action}}" class="header-btn btn">
<span class="btn-header">{{%s:header}}</span>
<span class="btn-content">{{%d:value}}</span>
</a>

View file

@ -1,52 +0,0 @@
<div class="simple-page">
<h1>Test page</h1>
<p>Test your nginx/apache and browser here</p>
<form action="test" method="get">
<input name="value" type="text">
<input type="submit" value="GET">
</form>
<form action="test" method="post">
<input name="value" type="text">
<input type="submit" value="POST">
</form>
<table id="env-table" class="present">
<tr>
<th><b>ENV</b></th>
<th><b>Value</b></th>
</tr>
<tr>
<td>HTTP_COOKIE</td>
<td>{{%s:HTTP_COOKIE}}</td>
</tr>
<tr>
<td>PATH_INFO</td>
<td>{{%s:PATH_INFO}}</td>
</tr>
<tr>
<td>QUERY_STRING</td>
<td>{{%s:QUERY_STRING}}</td>
</tr>
<tr>
<td>REQUEST_METHOD</td>
<td>{{%s:REQUEST_METHOD}}</td>
</tr>
<tr>
<td>SCRIPT_NAME</td>
<td>{{%s:SCRIPT_NAME}}</td>
</tr>
<tr>
<td>HTTP_REFERER</td>
<td>{{%s:HTTP_REFERER}}</td>
</tr>
<tr>
<td>HTTP_USER_AGENT</td>
<td>{{%s:HTTP_USER_AGENT}}</td>
</tr>
<tr>
<td>CONTENT_LENGTH</td>
<td>{{%s:CONTENT_LENGTH}}</td>
</tr>
</table>
</div>

View file

@ -1,16 +0,0 @@
<table class="navigation ui-table">
<tr>
<td class="thread-nav-stub">
<a class="thread-nav-btn btn" href="{{ %s : prefix }}/status/{{ %s : status_first }}#{{ %s : status_first }}"><span class="nav-symbol">&uarr;&uarr;</span></a>
</td>
<td class="thread-nav-td">
<a class="thread-nav-btn btn" href="{{ %s : prefix }}/status/{{ %s : status_before }}#{{ %s : status_before }}"><span class="nav-symbol">&uarr;</span> Up</a>
</td>
<td class="thread-nav-td">
<a class="thread-nav-btn btn" href="{{ %s : prefix }}/status/{{ %s : status_after }}#{{ %s : status_after }}"><span class="nav-symbol">&darr;</span> Down</a>
</td>
<td class="thread-nav-stub">
<a class="thread-nav-btn btn thread-nav-stub" href="{{ %s : prefix }}/status/{{ %s : status_last }}#{{ %s : status_last }}"><span class="nav-symbol">&darr;&darr;</span></a>
</td>
</tr>
</table>

View file

@ -1,14 +0,0 @@
<div class="menubar">
<form action="." method="post">
{{ %s : only_media }}
<input type="checkbox" name="only_media" value="1" {{ %s : only_media_active }}>
<span class="bullet-separate">&bull;</span>
{{ %s : replies }}
<select name="replies_only">
<option value="0">Show replies</option>
<option value="1">Self</option>
<option value="2">Following</option>
</select>
<input type="submit" value="Filter">
</form>
</div>