Cleanup old template shit, good riddance
FossilOrigin-Name: 555fc3773213a18194ffb772aec29855553275a997e38962627f328d5457e9b8
29
Makefile
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="menubar">
|
||||
<a href="{{%s:prefix}}/blocked">{{ %s : blocked_str }}</a>
|
||||
<span class="bullet-separate">•</span>
|
||||
<a href="{{%s:prefix}}/muted">{{ %s : muted_str }}</a>
|
||||
<span class="bullet-separate">•</span>
|
||||
<a href="{{%s:prefix}}/favourites">{{ %s : favourited_str }}</a>
|
||||
</div>
|
|
@ -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>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="account-info">
|
||||
<div class="account-note">{{%s:acct_note}}</div>
|
||||
</div>
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="attachment-container attachment-gifv">
|
||||
<video width="256" autoplay muted>
|
||||
<source src="{{%s:src}}">
|
||||
[ GIFV ]
|
||||
</video>
|
||||
{{%s:sensitive}}
|
||||
</div>
|
|
@ -1,4 +0,0 @@
|
|||
<div class="attachment-container attachment-img">
|
||||
<img width="256" src="{{%s:src}}" loading="lazy">
|
||||
{{%s:sensitive}}
|
||||
</div>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="attachment-container attachment-link {{%s:sensitive}}">
|
||||
<a href="{{%s:url}}">Attachment</a>
|
||||
</div>
|
|
@ -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>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="attachments">
|
||||
{{%s:attachments}}
|
||||
</div>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="bar">
|
||||
<div style="max-height: {{%f:value}}%%;"></div>
|
||||
</div>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="bar-graph">
|
||||
{{%s:graph}}
|
||||
</div>
|
|
@ -1,4 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1><a href="{{ %s : back_ref }}" class="page-back-btn"><</a> {{ %s : page_title }}</h1>
|
||||
</div>
|
||||
{{%s : page_content}}
|
|
@ -1,7 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>Bookmarks</h1>
|
||||
</div>
|
||||
<div class="bookmarks-container">
|
||||
{{%s:statuses}}
|
||||
</div>
|
||||
{{%s:navigation}}
|
|
@ -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>
|
|
@ -1,21 +0,0 @@
|
|||
<div class="page-header">
|
||||
<a href="{{ %s : prefix }}{{ %s : back_link }}" class="page-header-button">←</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>
|
|
@ -1 +0,0 @@
|
|||
{{ %s : content }}
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
<img src="{{ %s : url }}" class="custom-emoji-react">
|
|
@ -1,6 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>Direct Messages</h1>
|
||||
</div>
|
||||
<div class="direct-container">
|
||||
{{%s:direct_content}}
|
||||
</div>
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
<a href="/status/{{%s:status_id}}/react/{{%s:emoji}}" class="emoji">{{%s:emoji}}</a>
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
<span class="emoji">{{%s:emoji}}</span>
|
|
@ -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>
|
|
@ -1,3 +0,0 @@
|
|||
<ul class="emoji-reactions">
|
||||
{{%s:emojis}}
|
||||
</ul>
|
|
@ -1 +0,0 @@
|
|||
<span class="e-{{%s:err_type}} {{%s:is_padded}}">{{%s:error}}</span>
|
|
@ -1,4 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>404</h1>
|
||||
<p>{{%s:error}}</p>
|
||||
</div>
|
|
@ -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 |
|
@ -1 +0,0 @@
|
|||
<img class="expand-btn-img" src="/img/compat_icons/maximize.png">
|
|
@ -1,7 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>Favorites</h1>
|
||||
</div>
|
||||
<div class="favourites-container">
|
||||
{{%s:statuses}}
|
||||
</div>
|
||||
{{%s:navigation}}
|
|
@ -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 |
|
@ -1 +0,0 @@
|
|||
<a href="{{%s:prefix}}/tag/{{%s:tag}}" style="font-size: {{%u:tag_size}}px;" class="hashtag-item">#{{%s:tag}}</a>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>Hashtag - #{{%s:tag}}</h1>
|
||||
</div>
|
||||
<div class="hashtags-container">
|
||||
{{%s:statuses}}
|
||||
</div>
|
||||
{{%s:navigation}}
|
|
@ -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>
|
|
@ -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">•</span>
|
||||
<a href="{{%s:prefix}}/about/license">{{ %s : license_link_str }}</a>
|
||||
<span class="bullet-separate">•</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>
|
|
@ -1 +0,0 @@
|
|||
Instance information
|
|
@ -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>
|
|
@ -1,4 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1><a href="{{ %s : back_ref }}" class="page-back-btn"><</a> {{ %s : interaction_str }}</h1>
|
||||
</div>
|
||||
{{ %s : accts }}
|
|
@ -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 |
|
@ -1 +0,0 @@
|
|||
<img class="like-btn-img {{ %s : favourite_active }}" src="{{ %s : prefix }}/img/compat_icons/star.png">
|
|
@ -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 |
|
@ -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>
|
|
@ -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>
|
|
@ -1 +0,0 @@
|
|||
asdasd
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -1,3 +0,0 @@
|
|||
<div class="notifications-container">
|
||||
{{%s:notifications}}
|
||||
</div>
|
|
@ -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>
|
|
@ -1,7 +0,0 @@
|
|||
<div class="simple-page">
|
||||
<h1>Notifications</h1>
|
||||
</div>
|
||||
<div class="notifications-container">
|
||||
{{%s:notifications}}
|
||||
</div>
|
||||
{{%s:navigation}}
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 |
|
@ -1 +0,0 @@
|
|||
<img class="repeat-btn-img {{ %s : repeat_active }}" src="{{ %s : prefix }}/img/compat_icons/repeat.png">
|
|
@ -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 |
|
@ -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 |
|
@ -1 +0,0 @@
|
|||
<img class="expand-btn-img" src="/img/compat_icons/corner-down-right.png">
|
|
@ -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>
|
||||
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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 }}
|
||||
|
|
@ -1 +0,0 @@
|
|||
<img title="{{%s:acct}}" class="pfp-interaction" src="{{%s:avatar}}">
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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">↑↑</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">↑</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">↓</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">↓↓</span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
|
@ -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">•</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>
|