aboutsummaryrefslogtreecommitdiffstats
path: root/template/admin
diff options
context:
space:
mode:
authorThomas Lange <code@nerdmind.de>2017-02-24 21:27:59 +0100
committerThomas Lange <code@nerdmind.de>2017-02-24 21:27:59 +0100
commit52b077a48c743ba4d08ac00520a0bf1ef6deef5f (patch)
treeb4205c194167e0e03e273957cdd0aab3be9fdf01 /template/admin
downloadblog-52b077a48c743ba4d08ac00520a0bf1ef6deef5f.tar.gz
blog-52b077a48c743ba4d08ac00520a0bf1ef6deef5f.tar.xz
blog-52b077a48c743ba4d08ac00520a0bf1ef6deef5f.zip
Initial commit.v1.0
Diffstat (limited to 'template/admin')
-rw-r--r--template/admin/html/403.php2
-rw-r--r--template/admin/html/404.php2
-rw-r--r--template/admin/html/auth.php30
-rw-r--r--template/admin/html/database.php26
-rw-r--r--template/admin/html/home.php34
-rw-r--r--template/admin/html/main.php52
-rw-r--r--template/admin/html/page/delete.php4
-rw-r--r--template/admin/html/page/form.php91
-rw-r--r--template/admin/html/page/index.php10
-rw-r--r--template/admin/html/page/insert.php4
-rw-r--r--template/admin/html/page/item.php16
-rw-r--r--template/admin/html/page/update.php4
-rw-r--r--template/admin/html/pagination.php45
-rw-r--r--template/admin/html/post/delete.php4
-rw-r--r--template/admin/html/post/form.php91
-rw-r--r--template/admin/html/post/index.php10
-rw-r--r--template/admin/html/post/insert.php4
-rw-r--r--template/admin/html/post/item.php16
-rw-r--r--template/admin/html/post/update.php4
-rw-r--r--template/admin/html/user/delete.php6
-rw-r--r--template/admin/html/user/form.php97
-rw-r--r--template/admin/html/user/index.php10
-rw-r--r--template/admin/html/user/insert.php4
-rw-r--r--template/admin/html/user/item.php15
-rw-r--r--template/admin/html/user/update.php4
-rw-r--r--template/admin/lang/de.php118
-rw-r--r--template/admin/lang/en.php118
-rw-r--r--template/admin/rsrc/background.pngbin0 -> 1245 bytes
-rw-r--r--template/admin/rsrc/font/font-awesome.woff2bin0 -> 77160 bytes
-rw-r--r--template/admin/rsrc/font/kadwa-n-400.woff2bin0 -> 18108 bytes
-rw-r--r--template/admin/rsrc/font/ruda-n-400.woff2bin0 -> 9120 bytes
-rw-r--r--template/admin/rsrc/font/ruda-n-700.woff2bin0 -> 9116 bytes
-rw-r--r--template/admin/rsrc/icon-public-domain.svg1
-rw-r--r--template/admin/rsrc/main.css275
-rw-r--r--template/admin/rsrc/main.js94
35 files changed, 1191 insertions, 0 deletions
diff --git a/template/admin/html/403.php b/template/admin/html/403.php
new file mode 100644
index 0000000..aebddb7
--- /dev/null
+++ b/template/admin/html/403.php
@@ -0,0 +1,2 @@
+<h1><i class="fa fa-exclamation-triangle"></i><?=$Language->template('403_heading_text')?></h1>
+<p><?=$Language->template('403_heading_desc')?></p>
diff --git a/template/admin/html/404.php b/template/admin/html/404.php
new file mode 100644
index 0000000..4f841b6
--- /dev/null
+++ b/template/admin/html/404.php
@@ -0,0 +1,2 @@
+<h1><i class="fa fa-exclamation-triangle"></i><?=$Language->template('404_heading_text')?></h1>
+<p><?=$Language->template('404_heading_desc')?></p> \ No newline at end of file
diff --git a/template/admin/html/auth.php b/template/admin/html/auth.php
new file mode 100644
index 0000000..a33be5d
--- /dev/null
+++ b/template/admin/html/auth.php
@@ -0,0 +1,30 @@
+<h1><?=$Language->template('authentication_text')?></h1>
+<p><?=$Language->template('authentication_desc')?></p>
+
+<?php if(isset($FORM['INFO']['LIST'])): ?>
+ <?php foreach($FORM['INFO']['LIST'] as $message): ?>
+ <div class="red"><?=$message?></div>
+ <?php endforeach; ?>
+<?php endif; ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=Application::getSecurityToken()?>" />
+
+ <section class="flex">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-user-secret"></i></div>
+ <div class="form-label-flex"><label for="L_USERNAME"><?=$Language->template('LABEL_USERNAME')?></label></div>
+ <div class="form-field-flex"><input id="L_USERNAME" name="username" value="<?=escapeHTML($FORM['DATA']['USERNAME'])?>" /></div>
+ </section>
+ </section>
+ <section class="flex">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-key"></i></div>
+ <div class="form-label-flex"><label for="L_PASSWORD"><?=$Language->template('LABEL_PASSWORD')?></label></div>
+ <div class="form-field-flex"><input type="password" id="L_PASSWORD" name="password" /></div>
+ </section>
+ </section>
+ <section class="flex flex-padding background">
+ <input type="submit" name="auth" value="Auth" />
+ </section>
+</form> \ No newline at end of file
diff --git a/template/admin/html/database.php b/template/admin/html/database.php
new file mode 100644
index 0000000..92c5103
--- /dev/null
+++ b/template/admin/html/database.php
@@ -0,0 +1,26 @@
+<h1><i class="fa fa-database"></i><?=$Language->template('overview_database_text')?></h1>
+<p><?=$Language->template('overview_database_desc')?></p>
+
+<?php if(isset($FORM['INFO'])): ?>
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <div class="red"><?=$message?></div>
+ <?php endforeach; ?>
+<?php endif; ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+ <section class="flex flex-padding">
+ <textarea id="content-editor" placeholder="<?=$Language->template('database_warning')?>" name="command"><?=escapeHTML($FORM['COMMAND'])?></textarea>
+ </section>
+
+<?php if(isset($FORM['RESULT'])): ?>
+ <section class="flex flex-padding background flex-direction-column">
+ <pre id="database-result"><?=escapeHTML($FORM['RESULT'])?></pre>
+ </section>
+<?php endif; ?>
+
+ <section class="flex flex-padding background">
+ <input type="submit" name="execute" value="Execute" />
+ </section>
+</form> \ No newline at end of file
diff --git a/template/admin/html/home.php b/template/admin/html/home.php
new file mode 100644
index 0000000..6701f35
--- /dev/null
+++ b/template/admin/html/home.php
@@ -0,0 +1,34 @@
+<h1><i class="fa fa-dashboard"></i><?=$Language->template('overview_dashboard_text')?></h1>
+<p><?=$Language->template('overview_dashboard_desc')?></p>
+
+<h2><i class="fa fa-newspaper-o"></i><?=$Language->template('last_post')?></h2>
+<p><strong><?=$Language->text('posts')?>:</strong> <?=$COUNT['POST']?> | <a href="<?=Application::getAdminURL('post/')?>"><?=$Language->text('post_overview')?></a> | <a href="<?=Application::getAdminURL('post/insert.php')?>"><?=$Language->text('insert')?></a></p>
+<?php if(!empty($LAST['POST'])): ?>
+ <ul class="item-list">
+ <?=$LAST['POST']?>
+ </ul>
+<?php else: ?>
+ <p><em><?=$Language->template('home_no_posts')?></em></p>
+<?php endif; ?>
+
+<h2><i class="fa fa-file-text-o"></i><?=$Language->template('last_page')?></h2>
+<p><strong><?=$Language->text('pages')?>:</strong> <?=$COUNT['PAGE']?> | <a href="<?=Application::getAdminURL('page/')?>"><?=$Language->text('page_overview')?></a> | <a href="<?=Application::getAdminURL('page/insert.php')?>"><?=$Language->text('insert')?></a></p>
+
+<?php if(!empty($LAST['PAGE'])): ?>
+ <ul class="item-list">
+ <?=$LAST['PAGE']?>
+ </ul>
+<?php else: ?>
+ <p><em><?=$Language->template('home_no_pages')?></em></p>
+<?php endif; ?>
+
+<h2><i class="fa fa-user"></i><?=$Language->template('last_user')?></h2>
+<p><strong><?=$Language->text('users')?>:</strong> <?=$COUNT['USER']?> | <a href="<?=Application::getAdminURL('user/')?>"><?=$Language->text('user_overview')?></a> | <a href="<?=Application::getAdminURL('user/insert.php')?>"><?=$Language->text('insert')?></a></p>
+
+<?php if(!empty($LAST['USER'])): ?>
+ <ul class="item-list">
+ <?=$LAST['USER']?>
+ </ul>
+<?php else: ?>
+ <p><em><?=$Language->template('home_no_users')?></em></p>
+<?php endif; ?>
diff --git a/template/admin/html/main.php b/template/admin/html/main.php
new file mode 100644
index 0000000..d2fba38
--- /dev/null
+++ b/template/admin/html/main.php
@@ -0,0 +1,52 @@
+<!DOCTYPE html>
+<html lang="<?=$BLOGMETA['LANG']?>">
+<head>
+ <meta charset="UTF-8" />
+ <meta name="referrer" content="origin-when-crossorigin" />
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
+ <link rel="stylesheet" href="<?=Application::getTemplateURL('rsrc/main.css')?>" />
+ <script src="<?=Application::getTemplateURL('rsrc/main.js')?>"></script>
+ <title><?=escapeHTML($NAME)?> | Administration</title>
+</head>
+<body>
+ <header id="main-header">
+ <section class="header-line">
+ <div class="header-content">
+ <a href="<?=Application::getAdminURL()?>"><img id="header-logo" src="<?=Application::getTemplateURL('rsrc/icon-public-domain.svg')?>" alt="Administration" /></a>
+ <div id="header-text">Administration</div>
+ <div id="header-desc">PHP7 blogging application by <span>Nerdmind</span>!</div>
+ </div>
+ </section>
+ <section class="header-line">
+ <div class="header-content">
+ <nav id="main-navi">
+ <?php if(Application::isAuthenticated()): ?>
+ <ul>
+ <li><a href="<?=Application::getAdminURL()?>" title="<?=$Language->template('overview_dashboard_text')?>"><i class="fa fa-dashboard"></i><span>Dashboard</span></a></li>
+ <li><a href="<?=Application::getAdminURL('post/')?>" title="<?=$Language->text('post_overview')?>"><i class="fa fa-newspaper-o"></i><span><?=$Language->text('posts')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('page/')?>" title="<?=$Language->text('page_overview')?>"><i class="fa fa-file-text-o"></i><span><?=$Language->text('pages')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('user/')?>" title="<?=$Language->text('user_overview')?>"><i class="fa fa-user"></i><span><?=$Language->text('users')?></span></a></li>
+ <li><a href="<?=Application::getAdminURL('database.php')?>" title="<?=$Language->template('overview_database_text')?>"><i class="fa fa-database"></i><span><?=$Language->template('overview_database_text')?></span></a></li>
+ </ul>
+ <ul>
+ <li><a href="<?=Application::getAdminURL('auth.php?action=logout&amp;token='.Application::getSecurityToken())?>"><i class="fa fa-sign-out"></i><span>Logout</span></a></li>
+ </ul>
+ <?php else: ?>
+ <ul>
+ <li><a href="<?=Application::getAdminURL('auth.php')?>"><i class="fa fa-sign-in"></i><span>Login</span></a></li>
+ </ul>
+ <?php endif; ?>
+ </nav>
+ </div>
+ </section>
+ </header>
+ <section id="main-content">
+ <main>
+ <?=$HTML?>
+ </main>
+ <footer id="main-footer">
+ <i class="fa fa-bug"></i> Report bugs via email to <a href="mailto:Thomas Lange <code@nerdmind.de>">code@nerdmind.de</a>!
+ </footer>
+ </section>
+</body>
+</html> \ No newline at end of file
diff --git a/template/admin/html/page/delete.php b/template/admin/html/page/delete.php
new file mode 100644
index 0000000..95451d8
--- /dev/null
+++ b/template/admin/html/page/delete.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_page')?></h1>
+<p><?=$Language->template('delete_page_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/page/form.php b/template/admin/html/page/form.php
new file mode 100644
index 0000000..cf87f82
--- /dev/null
+++ b/template/admin/html/page/form.php
@@ -0,0 +1,91 @@
+<?php if(isset($FORM['INFO'])): ?>
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <div class="red"><?=$message?></div>
+ <?php endforeach; ?>
+<?php endif; ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-database"></i></div>
+ <div class="form-label-flex"><label for="L_ID">ID</label></div>
+ <div class="form-field-flex"><input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="L_ID" name="id" placeholder="[AUTO_INCREMENT]" value="<?=escapeHTML($FORM['DATA']['ID'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-user"></i></div>
+ <div class="form-label-flex"><label for="L_USER"><?=$Language->template('LABEL_USER')?></label></div>
+ <div class="form-field-flex">
+ <select id="L_USER" name="user">
+ <?php foreach($FORM['USER_LIST'] as $user): ?>
+ <option value="<?=$user['ID']?>"<?=($FORM['DATA']['USER'] === $user['ID']) ? ' selected' : '' ?>><?=escapeHTML($user['FULLNAME'])?> [<?=$user['USERNAME']?>]</option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-file-text-o"></i></div>
+ <div class="form-label-flex"><label for="L_NAME"><?=$Language->template('LABEL_NAME')?></label></div>
+ <div class="form-field-flex"><input id="L_NAME" name="name" value="<?=escapeHTML($FORM['DATA']['NAME'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-link"></i></div>
+ <div class="form-label-flex"><label for="L_SLUG"><?=$Language->template('LABEL_SLUG')?></label></div>
+ <div class="form-field-flex"><input id="L_SLUG" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" /></div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_INSERT"><?=$Language->template('LABEL_INSERT')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_INSERT" name="time_insert" placeholder="[YYYY-MM-DD HH:II:SS]" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_UPDATE"><?=$Language->template('LABEL_UPDATE')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_UPDATE" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : '[CURRENT_TIMESTAMP]')?>" value="" /></div>
+ </section>
+ </section>
+ <section class="flex flex-padding">
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </section>
+ <section class="flex flex-padding background">
+ <ul class="button-list emoticons">
+ <?php foreach(getEmoticons() as $emoticon => $data):?>
+ <li onmousedown="emoticonReplace('<?=$emoticon?>')" title="<?=$data[1]?>"><?=$data[0]?></li>
+ <?php endforeach; ?>
+ </ul>
+ </section>
+ <section class="flex flex-padding background">
+ <ul class="button-list markdown">
+ <li onmousedown="markdownReplace('bold');" class="fa fa-bold" title="Bold"></li>
+ <li onmousedown="markdownReplace('italic');" class="fa fa-italic" title="Italic"></li>
+ <li onmousedown="markdownReplace('header');" class="fa fa-header" title="Heading"></li>
+ <li onmousedown="markdownReplace('link');" class="fa fa-link" title="Link"></li>
+ <li onmousedown="markdownReplace('image');" class="fa fa-picture-o" title="Image"></li>
+ <li onmousedown="markdownReplace('code');" class="fa fa-code" title="Code"></li>
+ <li onmousedown="markdownReplace('quote');" class="fa fa-quote-right" title="Quote"></li>
+ <li onmousedown="markdownReplace('list_ul');" class="fa fa-list-ul" title="List [unordered]"></li>
+ <li onmousedown="markdownReplace('list_ol');" class="fa fa-list-ol" title="List [ordered]"></li>
+ </ul>
+ </section>
+<?php else: ?>
+ <section class="flex flex-padding background flex-direction-column">
+ <?=$HTML?>
+ </section>
+<?php endif; ?>
+
+ <section class="flex flex-padding background">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input type="submit" name="delete" value="<?=$Language->text('delete')?>" onclick="return confirm('<?=$Language->template('sure')?>')" />
+ <?php endif; ?>
+ </section>
+</form> \ No newline at end of file
diff --git a/template/admin/html/page/index.php b/template/admin/html/page/index.php
new file mode 100644
index 0000000..4d090ca
--- /dev/null
+++ b/template/admin/html/page/index.php
@@ -0,0 +1,10 @@
+<h1><i class="fa fa-file-text-o"></i><?=$Language->text('page_overview')?><a class="brackets" href="<?=Application::getAdminURL("page/insert.php")?>"><?=$Language->text('insert')?></a></h1>
+<p><?=$Language->template('overview_page_desc')?></p>
+
+<ul class="item-list">
+ <?php foreach($LIST['PAGES'] as $page): ?>
+ <?php echo $page; ?>
+ <?php endforeach; ?>
+</ul>
+
+<?=$PAGINATION['HTML']?> \ No newline at end of file
diff --git a/template/admin/html/page/insert.php b/template/admin/html/page/insert.php
new file mode 100644
index 0000000..d45d79c
--- /dev/null
+++ b/template/admin/html/page/insert.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-file-text-o"></i><?=$Language->text('insert_page')?></h1>
+<p><?=$Language->template('insert_page_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/page/item.php b/template/admin/html/page/item.php
new file mode 100644
index 0000000..e1e67b7
--- /dev/null
+++ b/template/admin/html/page/item.php
@@ -0,0 +1,16 @@
+<li class="content">
+ <header>
+ <h2><i class="fa fa-file-text-o"></i><?=escapeHTML($PAGE['ATTR']['NAME'])?><span>#<?=$PAGE['ID']?></span></h2>
+ <div><a class="brackets" href="<?=Application::getAdminURL("user/update.php?id={$USER['ID']}")?>"><?=escapeHTML($USER['ATTR']['FULLNAME'])?></a></div>
+ </header>
+ <article>
+ <p><?=excerpt($PAGE['BODY']['HTML'])?></p>
+ </article>
+ <footer>
+ <ul>
+ <li><a href="<?=$PAGE['URL']?>" target="_blank" title="<?=$Language->text('select_page')?>"><i class="fa fa-external-link"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("page/update.php?id={$PAGE['ID']}")?>" title="<?=$Language->text('update_page')?>"><i class="fa fa-pencil-square-o"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("page/delete.php?id={$PAGE['ID']}")?>" title="<?=$Language->text('delete_page')?>"><i class="fa fa-trash-o"></i></a></li>
+ </ul>
+ </footer>
+</li> \ No newline at end of file
diff --git a/template/admin/html/page/update.php b/template/admin/html/page/update.php
new file mode 100644
index 0000000..d15d784
--- /dev/null
+++ b/template/admin/html/page/update.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-file-text-o"></i><?=$Language->text('update_page')?></h1>
+<p><?=$Language->template('update_page_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/pagination.php b/template/admin/html/pagination.php
new file mode 100644
index 0000000..31b5378
--- /dev/null
+++ b/template/admin/html/pagination.php
@@ -0,0 +1,45 @@
+<section id="site-navi">
+ <?php if($THIS > 1): ?>
+ <div><a href="<?=sprintf($HREF, $THIS-1)?>"><i class="fa fa-arrow-left"></i></a></div>
+ <?php else: ?>
+ <div><a class="disabled"><i class="fa fa-arrow-left"></i></a></div>
+ <?php endif; ?>
+
+ <section>
+ <div>
+ <ol>
+ <?php for($currentItem = 1; $currentItem <= $LAST; ++$currentItem): ?>
+ <?php
+ $href = sprintf($HREF, $currentItem);
+ $class = NULL;
+ $currentItemHTML = $currentItem;
+ if($currentItem === $THIS) {
+ $class = ' class="active"';
+ }
+
+ echo '<li'.$class.'><a href="'.$href.'">'.$currentItemHTML.'</a></li>';
+ ?>
+
+ <?php endfor; ?>
+ </ol>
+ </div>
+ </section>
+
+ <?php if($THIS < $LAST): ?>
+ <div><a href="<?=sprintf($HREF, $THIS+1)?>"><i class="fa fa-arrow-right"></i></a></div>
+ <?php else: ?>
+ <div><a class="disabled"><i class="fa fa-arrow-right"></i></a></div>
+ <?php endif; ?>
+</section>
+
+<script>
+ var prevPageURL = <?php echo json_encode($THIS > 1 ? sprintf($HREF, $THIS-1) : FALSE); ?>;
+ var nextPageURL = <?php echo json_encode($THIS < $LAST ? sprintf($HREF, $THIS+1) : FALSE); ?>;
+
+ document.addEventListener('keyup', function(event) {
+ if(!event.ctrlKey && !event.shiftKey) {
+ (event.keyCode === 37 && prevPageURL) && (window.location.href = prevPageURL);
+ (event.keyCode === 39 && nextPageURL) && (window.location.href = nextPageURL);
+ }
+ }, false)
+</script> \ No newline at end of file
diff --git a/template/admin/html/post/delete.php b/template/admin/html/post/delete.php
new file mode 100644
index 0000000..9be4566
--- /dev/null
+++ b/template/admin/html/post/delete.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_post')?></h1>
+<p><?=$Language->template('delete_post_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/post/form.php b/template/admin/html/post/form.php
new file mode 100644
index 0000000..cba4aa8
--- /dev/null
+++ b/template/admin/html/post/form.php
@@ -0,0 +1,91 @@
+<?php if(isset($FORM['INFO'])): ?>
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <div class="red"><?=$message?></div>
+ <?php endforeach; ?>
+<?php endif; ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-database"></i></div>
+ <div class="form-label-flex"><label for="L_ID">ID</label></div>
+ <div class="form-field-flex"><input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="L_ID" name="id" placeholder="[AUTO_INCREMENT]" value="<?=escapeHTML($FORM['DATA']['ID'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-user"></i></div>
+ <div class="form-label-flex"><label for="L_USER"><?=$Language->template('LABEL_USER')?></label></div>
+ <div class="form-field-flex">
+ <select id="L_USER" name="user">
+ <?php foreach($FORM['USER_LIST'] as $user): ?>
+ <option value="<?=$user['ID']?>"<?=($FORM['DATA']['USER'] === $user['ID']) ? ' selected' : '' ?>><?=escapeHTML($user['FULLNAME'])?> [<?=$user['USERNAME']?>]</option>
+ <?php endforeach; ?>
+ </select>
+ </div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-newspaper-o"></i></div>
+ <div class="form-label-flex"><label for="L_NAME"><?=$Language->template('LABEL_NAME')?></label></div>
+ <div class="form-field-flex"><input id="L_NAME" name="name" value="<?=escapeHTML($FORM['DATA']['NAME'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-link"></i></div>
+ <div class="form-label-flex"><label for="L_SLUG"><?=$Language->template('LABEL_SLUG')?></label></div>
+ <div class="form-field-flex"><input id="L_SLUG" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" /></div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_INSERT"><?=$Language->template('LABEL_INSERT')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_INSERT" name="time_insert" placeholder="[YYYY-MM-DD HH:II:SS]" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_UPDATE"><?=$Language->template('LABEL_UPDATE')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_UPDATE" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : '[CURRENT_TIMESTAMP]')?>" value="" /></div>
+ </section>
+ </section>
+ <section class="flex flex-padding">
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </section>
+ <section class="flex flex-padding background flex-emoticons">
+ <ul class="button-list emoticons">
+ <?php foreach(getEmoticons() as $emoticon => $data):?>
+ <li onmousedown="emoticonReplace('<?=$emoticon?>')" title="<?=$data[1]?>"><?=$data[0]?></li>
+ <?php endforeach; ?>
+ </ul>
+ </section>
+ <section class="flex flex-padding background">
+ <ul class="button-list markdown">
+ <li onmousedown="markdownReplace('bold');" class="fa fa-bold" title="Bold"></li>
+ <li onmousedown="markdownReplace('italic');" class="fa fa-italic" title="Italic"></li>
+ <li onmousedown="markdownReplace('header');" class="fa fa-header" title="Heading"></li>
+ <li onmousedown="markdownReplace('link');" class="fa fa-link" title="Link"></li>
+ <li onmousedown="markdownReplace('image');" class="fa fa-picture-o" title="Image"></li>
+ <li onmousedown="markdownReplace('code');" class="fa fa-code" title="Code"></li>
+ <li onmousedown="markdownReplace('quote');" class="fa fa-quote-right" title="Quote"></li>
+ <li onmousedown="markdownReplace('list_ul');" class="fa fa-list-ul" title="List [unordered]"></li>
+ <li onmousedown="markdownReplace('list_ol');" class="fa fa-list-ol" title="List [ordered]"></li>
+ </ul>
+ </section>
+<?php else: ?>
+ <section class="flex flex-padding background flex-direction-column">
+ <?=$HTML?>
+ </section>
+<?php endif; ?>
+
+ <section class="flex flex-padding background">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input type="submit" name="delete" value="<?=$Language->text('delete')?>" onclick="return confirm('<?=$Language->template('sure')?>')" />
+ <?php endif; ?>
+ </section>
+</form> \ No newline at end of file
diff --git a/template/admin/html/post/index.php b/template/admin/html/post/index.php
new file mode 100644
index 0000000..481cafe
--- /dev/null
+++ b/template/admin/html/post/index.php
@@ -0,0 +1,10 @@
+<h1><i class="fa fa-newspaper-o"></i><?=$Language->text('post_overview')?><a class="brackets" href="<?=Application::getAdminURL("post/insert.php")?>"><?=$Language->text('insert')?></a></h1>
+<p><?=$Language->template('overview_post_desc')?></p>
+
+<ul class="item-list">
+ <?php foreach($LIST['POSTS'] as $post): ?>
+ <?php echo $post; ?>
+ <?php endforeach; ?>
+</ul>
+
+<?=$PAGINATION['HTML']?> \ No newline at end of file
diff --git a/template/admin/html/post/insert.php b/template/admin/html/post/insert.php
new file mode 100644
index 0000000..df4b26d
--- /dev/null
+++ b/template/admin/html/post/insert.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-newspaper-o"></i><?=$Language->text('insert_post')?></h1>
+<p><?=$Language->template('insert_post_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/post/item.php b/template/admin/html/post/item.php
new file mode 100644
index 0000000..1b942bd
--- /dev/null
+++ b/template/admin/html/post/item.php
@@ -0,0 +1,16 @@
+<li class="content">
+ <header>
+ <h2><i class="fa fa-newspaper-o"></i><?=escapeHTML($POST['ATTR']['NAME'])?><span>#<?=$POST['ID']?></span></h2>
+ <div><a class="brackets" href="<?=Application::getAdminURL("user/update.php?id={$USER['ID']}")?>"><?=escapeHTML($USER['ATTR']['FULLNAME'])?></a></div>
+ </header>
+ <article>
+ <p><?=excerpt($POST['BODY']['HTML'])?></p>
+ </article>
+ <footer>
+ <ul>
+ <li><a href="<?=$POST['URL']?>" target="_blank" title="<?=$Language->text('select_post')?>"><i class="fa fa-external-link"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("post/update.php?id={$POST['ID']}")?>" title="<?=$Language->text('update_post')?>"><i class="fa fa-pencil-square-o"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("post/delete.php?id={$POST['ID']}")?>" title="<?=$Language->text('delete_post')?>"><i class="fa fa-trash-o"></i></a></li>
+ </ul>
+ </footer>
+</li> \ No newline at end of file
diff --git a/template/admin/html/post/update.php b/template/admin/html/post/update.php
new file mode 100644
index 0000000..baa119e
--- /dev/null
+++ b/template/admin/html/post/update.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-newspaper-o"></i><?=$Language->text('update_post')?></h1>
+<p><?=$Language->template('update_post_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/user/delete.php b/template/admin/html/user/delete.php
new file mode 100644
index 0000000..dac4185
--- /dev/null
+++ b/template/admin/html/user/delete.php
@@ -0,0 +1,6 @@
+<h1><i class="fa fa-trash-o"></i><?=$Language->text('delete_user')?></h1>
+<p><?=$Language->template('delete_user_desc')?></p>
+
+<p class="red"><?=$Language->template('delete_user_warning')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/user/form.php b/template/admin/html/user/form.php
new file mode 100644
index 0000000..c284187
--- /dev/null
+++ b/template/admin/html/user/form.php
@@ -0,0 +1,97 @@
+<?php if(isset($FORM['INFO'])): ?>
+ <?php foreach($FORM['INFO'] as $message): ?>
+ <div class="red"><?=$message?></div>
+ <?php endforeach; ?>
+<?php endif; ?>
+
+<form action="" method="POST">
+ <input type="hidden" name="token" value="<?=$FORM['TOKEN']?>" />
+
+<?php if($FORM['TYPE'] !== 'DELETE'): ?>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-database"></i></div>
+ <div class="form-label-flex"><label for="L_ID">ID</label></div>
+ <div class="form-field-flex"><input<?=($FORM['TYPE'] === 'UPDATE') ? ' disabled="disabled"' : '';?> id="L_ID" name="id" placeholder="[AUTO_INCREMENT]" value="<?=escapeHTML($FORM['DATA']['ID'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-key"></i></div>
+ <div class="form-label-flex"><label for="L_PASSWORD"><?=$Language->template('LABEL_PASSWORD')?></label></div>
+ <div class="form-field-flex"><input id="L_PASSWORD" name="password" placeholder="[NO CHANGE]" value="<?=escapeHTML($FORM['DATA']['PASSWORD'])?>" type="password" /></div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-user"></i></div>
+ <div class="form-label-flex"><label for="L_FULLNAME"><?=$Language->template('LABEL_FULLNAME')?></label></div>
+ <div class="form-field-flex"><input id="L_FULLNAME" name="fullname" value="<?=escapeHTML($FORM['DATA']['FULLNAME'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-envelope-o"></i></div>
+ <div class="form-label-flex"><label for="L_MAILADDR"><?=$Language->template('LABEL_MAILADDR')?></label></div>
+ <div class="form-field-flex"><input id="L_MAILADDR" name="mailaddr" value="<?=escapeHTML($FORM['DATA']['MAILADDR'])?>" /></div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-user-secret"></i></div>
+ <div class="form-label-flex"><label for="L_USERNAME"><?=$Language->template('LABEL_USERNAME')?></label></div>
+ <div class="form-field-flex"><input id="L_USERNAME" name="username" value="<?=escapeHTML($FORM['DATA']['USERNAME'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-link"></i></div>
+ <div class="form-label-flex"><label for="L_SLUG"><?=$Language->template('LABEL_SLUG')?></label></div>
+ <div class="form-field-flex"><input id="L_SLUG" name="slug" value="<?=escapeHTML($FORM['DATA']['SLUG'])?>" /></div>
+ </section>
+ </section>
+ <section class="flex flex-responsive">
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_INSERT"><?=$Language->template('LABEL_INSERT')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_INSERT" name="time_insert" placeholder="[YYYY-MM-DD HH:II:SS]" value="<?=escapeHTML($FORM['DATA']['TIME_INSERT'])?>" /></div>
+ </section>
+ <section>
+ <div class="form-icon-flex"><i class="fa fa-clock-o"></i></div>
+ <div class="form-label-flex"><label for="L_TIME_UPDATE"><?=$Language->template('LABEL_UPDATE')?></label></div>
+ <div class="form-field-flex"><input id="L_TIME_UPDATE" name="time_update" placeholder="<?=escapeHTML($FORM['DATA']['TIME_UPDATE'] ? $FORM['DATA']['TIME_UPDATE'] : '[CURRENT_TIMESTAMP]')?>" value="" /></div>
+ </section>
+ </section>
+ <section class="flex flex-padding">
+ <textarea id="content-editor" name="body" placeholder="[…]"><?=escapeHTML($FORM['DATA']['BODY'])?></textarea>
+ </section>
+ <section class="flex flex-padding background">
+ <ul class="button-list emoticons">
+ <?php foreach(getEmoticons() as $emoticon => $data):?>
+ <li onmousedown="emoticonReplace('<?=$emoticon?>')" title="<?=$data[1]?>"><?=$data[0]?></li>
+ <?php endforeach; ?>
+ </ul>
+ </section>
+ <section class="flex flex-padding background">
+ <ul class="button-list markdown">
+ <li onmousedown="markdownReplace('bold');" class="fa fa-bold" title="Bold"></li>
+ <li onmousedown="markdownReplace('italic');" class="fa fa-italic" title="Italic"></li>
+ <li onmousedown="markdownReplace('header');" class="fa fa-header" title="Heading"></li>
+ <li onmousedown="markdownReplace('link');" class="fa fa-link" title="Link"></li>
+ <li onmousedown="markdownReplace('image');" class="fa fa-picture-o" title="Image"></li>
+ <li onmousedown="markdownReplace('code');" class="fa fa-code" title="Code"></li>
+ <li onmousedown="markdownReplace('quote');" class="fa fa-quote-right" title="Quote"></li>
+ <li onmousedown="markdownReplace('list_ul');" class="fa fa-list-ul" title="List [unordered]"></li>
+ <li onmousedown="markdownReplace('list_ol');" class="fa fa-list-ol" title="List [ordered]"></li>
+ </ul>
+ </section>
+<?php else: ?>
+ <section class="flex flex-padding background flex-direction-column">
+ <?=$HTML?>
+ </section>
+<?php endif; ?>
+
+ <section class="flex flex-padding background">
+ <?php if($FORM['TYPE'] === 'INSERT'): ?>
+ <input type="submit" name="insert" value="<?=$Language->text('insert')?>" />
+ <?php elseif($FORM['TYPE'] === 'UPDATE'): ?>
+ <input type="submit" name="update" value="<?=$Language->text('update')?>" />
+ <?php elseif($FORM['TYPE'] === 'DELETE'): ?>
+ <input type="submit" name="delete" value="<?=$Language->text('delete')?>" onclick="return confirm('<?=$Language->template('sure')?>')" />
+ <?php endif; ?>
+ </section>
+</form> \ No newline at end of file
diff --git a/template/admin/html/user/index.php b/template/admin/html/user/index.php
new file mode 100644
index 0000000..6b23536
--- /dev/null
+++ b/template/admin/html/user/index.php
@@ -0,0 +1,10 @@
+<h1><i class="fa fa-user"></i><?=$Language->text('user_overview')?><a class="brackets" href="<?=Application::getAdminURL("user/insert.php")?>"><?=$Language->text('insert')?></a></h1>
+<p><?=$Language->template('overview_user_desc')?></p>
+
+<ul class="item-list">
+ <?php foreach($LIST['USERS'] as $user): ?>
+ <?php echo $user; ?>
+ <?php endforeach; ?>
+</ul>
+
+<?=$PAGINATION['HTML']?> \ No newline at end of file
diff --git a/template/admin/html/user/insert.php b/template/admin/html/user/insert.php
new file mode 100644
index 0000000..54598ee
--- /dev/null
+++ b/template/admin/html/user/insert.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-user"></i><?=$Language->text('insert_user')?></h1>
+<p><?=$Language->template('insert_user_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/html/user/item.php b/template/admin/html/user/item.php
new file mode 100644
index 0000000..df8e5b1
--- /dev/null
+++ b/template/admin/html/user/item.php
@@ -0,0 +1,15 @@
+<li class="content">
+ <header>
+ <h2><i class="fa fa-user"></i><?=escapeHTML($USER['ATTR']['FULLNAME'])?><span>#<?=$USER['ID']?></span></h2>
+ </header>
+ <article>
+ <p><?=excerpt($USER['BODY']['HTML'])?></p>
+ </article>
+ <footer>
+ <ul>
+ <li><a href="<?=$USER['URL']?>" target="_blank" title="<?=$Language->text('select_user')?>"><i class="fa fa-external-link"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("user/update.php?id={$USER['ID']}")?>" title="<?=$Language->text('update_user')?>"><i class="fa fa-pencil-square-o"></i></a></li>
+ <li><a href="<?=Application::getAdminURL("user/delete.php?id={$USER['ID']}")?>" title="<?=$Language->text('delete_user')?>"><i class="fa fa-trash-o"></i></a></li>
+ </ul>
+ </footer>
+</li> \ No newline at end of file
diff --git a/template/admin/html/user/update.php b/template/admin/html/user/update.php
new file mode 100644
index 0000000..6f7ddae
--- /dev/null
+++ b/template/admin/html/user/update.php
@@ -0,0 +1,4 @@
+<h1><i class="fa fa-user"></i><?=$Language->text('update_user')?></h1>
+<p><?=$Language->template('update_user_desc')?></p>
+
+<?=$HTML?> \ No newline at end of file
diff --git a/template/admin/lang/de.php b/template/admin/lang/de.php
new file mode 100644
index 0000000..d9966ae
--- /dev/null
+++ b/template/admin/lang/de.php
@@ -0,0 +1,118 @@
+<?php
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# Admin: Internationalization [DE] [Thomas Lange <code@nerdmind.de>] #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# #
+# This file contains template internationalization strings for the DE language #
+# and is completely independend from the core internationalization strings. #
+# #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+
+#===============================================================================
+# Item last text
+#===============================================================================
+$LANGUAGE['last_post'] = 'Letzter Post';
+$LANGUAGE['last_page'] = 'Letzte Seite';
+$LANGUAGE['last_user'] = 'Letzter Benutzer';
+
+#===============================================================================
+# Insert item description
+#===============================================================================
+$LANGUAGE['insert_page_desc'] = 'Hier kannst du eine neue Seite erstellen und veröffentlichen.';
+$LANGUAGE['insert_post_desc'] = 'Hier kannst du einen neuen Beitrag erstellen und veröffentlichen.';
+$LANGUAGE['insert_user_desc'] = 'Hier kannst du einen neuen Benutzer erstellen und veröffentlichen.';
+
+#===============================================================================
+# Update item description
+#===============================================================================
+$LANGUAGE['update_page_desc'] = 'Hier kannst du eine vorhandene Seite bearbeiten und die Änderungen abspeichern.';
+$LANGUAGE['update_post_desc'] = 'Hier kannst du einen vorhandenen Beitrag bearbeiten und die Änderungen abspeichern.';
+$LANGUAGE['update_user_desc'] = 'Hier kannst du deinen vorhandenen Benutzer bearbeiten und die Änderungen abspeichern.';
+
+#===============================================================================
+# Delete item description
+#===============================================================================
+$LANGUAGE['delete_page_desc'] = 'Falls du diese Seite nicht mehr benötigst kannst du sie über den folgenden Button permanent löschen.';
+$LANGUAGE['delete_post_desc'] = 'Falls du diesen Beitrag nicht mehr benötigst kannst du ihn über den folgenden Button permanent löschen.';
+$LANGUAGE['delete_user_desc'] = 'Falls du diesen Benutzer nicht mehr benötigst kannst du ihn über den folgenden Button permanent löschen.';
+
+#===============================================================================
+# Item overview description
+#===============================================================================
+$LANGUAGE['overview_page_desc'] = 'Hier siehst du alle vorhandenen Seiten.';
+$LANGUAGE['overview_post_desc'] = 'Hier siehst du alle vorhandenen Beiträge.';
+$LANGUAGE['overview_user_desc'] = 'Hier siehst du alle vorhandenen Benutzer.';
+
+#===============================================================================
+# Dashboard overview text
+#===============================================================================
+$LANGUAGE['overview_dashboard_text'] = 'Dashboard';
+
+#===============================================================================
+# Dashboard overview text
+#===============================================================================
+$LANGUAGE['overview_dashboard_desc'] = 'Willkommen im Administrationsbereich. Hier kannst du deine Inhalte verwalten.';
+
+#===============================================================================
+# Database overview text
+#===============================================================================
+$LANGUAGE['overview_database_text'] = 'Datenbank';
+
+#===============================================================================
+# Database overview text
+#===============================================================================
+$LANGUAGE['overview_database_desc'] = 'Datenbankoperationen mit SQL-Befehlen durchführen.';
+
+#===============================================================================
+# Authentication
+#===============================================================================
+$LANGUAGE['authentication_text'] = 'Authentifizierung';
+$LANGUAGE['authentication_desc'] = 'Um deine Inhalte zu verwalten musst du dich zuerst authentifizieren.';
+
+#===============================================================================
+# No items exists
+#===============================================================================
+$LANGUAGE['home_no_pages'] = 'Es gibt keine letzte Seite zum anzeigen hier. Du musst zuerst eine erstellen.';
+$LANGUAGE['home_no_posts'] = 'Es gibt keinen letzten Beitrag zum anzeigen hier. Du musst zuerst einen erstellen.';
+$LANGUAGE['home_no_users'] = 'Es gibt keinen letzten Benutzer zum anzeigen hier. Du musst zuerst einen erstellen.';
+
+#===============================================================================
+# Delete user warning
+#===============================================================================
+$LANGUAGE['delete_user_warning'] = '<strong>WARNUNG</strong>: Wenn du diesen Benutzer löschst werden alle ihm zugehörigen Beiträge und Seiten ebenfalls gelöscht!';
+
+#===============================================================================
+# Database warning
+#===============================================================================
+$LANGUAGE['database_warning'] = 'Manche Befehle können gefährliche Auswirkungen haben, wenn du nicht weißt, was du tust!';
+
+#===============================================================================
+# Error 403
+#===============================================================================
+$LANGUAGE['403_heading_text'] = 'Zugriff verweigert';
+$LANGUAGE['403_heading_desc'] = 'Der Zugriff auf diese Ressource des Servers wurde dir verweigert, da du die dafür notwendigen Berechtigungen nicht besitzt.';
+
+#===============================================================================
+# Error 404
+#===============================================================================
+$LANGUAGE['404_heading_text'] = 'Nicht gefunden';
+$LANGUAGE['404_heading_desc'] = 'Die angeforderte Ressource konnte auf diesem Server nicht gefunden werden.';
+
+#===============================================================================
+# "Are you sure?" question
+#===============================================================================
+$LANGUAGE['sure'] = 'Bist du sicher?';
+
+#===============================================================================
+# Labels
+#===============================================================================
+$LANGUAGE['LABEL_SLUG'] = 'Slug';
+$LANGUAGE['LABEL_USER'] = 'Benutzer';
+$LANGUAGE['LABEL_NAME'] = 'Titel';
+$LANGUAGE['LABEL_INSERT'] = 'Erstellt';
+$LANGUAGE['LABEL_UPDATE'] = 'Bearbeitet';
+$LANGUAGE['LABEL_FULLNAME'] = 'Name';
+$LANGUAGE['LABEL_MAILADDR'] = 'E-Mail';
+$LANGUAGE['LABEL_USERNAME'] = 'Username';
+$LANGUAGE['LABEL_PASSWORD'] = 'Passwort';
+?> \ No newline at end of file
diff --git a/template/admin/lang/en.php b/template/admin/lang/en.php
new file mode 100644
index 0000000..d98ea44
--- /dev/null
+++ b/template/admin/lang/en.php
@@ -0,0 +1,118 @@
+<?php
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# Admin: Internationalization [EN] [Thomas Lange <code@nerdmind.de>] #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+# #
+# This file contains template internationalization strings for the EN language #
+# and is completely independend from the core internationalization strings. #
+# #
+#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#
+
+#===============================================================================
+# Item last text
+#===============================================================================
+$LANGUAGE['last_post'] = 'Last post';
+$LANGUAGE['last_page'] = 'Last page';
+$LANGUAGE['last_user'] = 'Last user';
+
+#===============================================================================
+# Insert item description
+#===============================================================================
+$LANGUAGE['insert_page_desc'] = 'Here you can create and publish a new page.';
+$LANGUAGE['insert_post_desc'] = 'Here you can create and publish a new post.';
+$LANGUAGE['insert_user_desc'] = 'Here you can create and publish a new user.';
+
+#===============================================================================
+# Update item description
+#===============================================================================
+$LANGUAGE['update_page_desc'] = 'Here you can edit an existing page and save the changes.';
+$LANGUAGE['update_post_desc'] = 'Here you can edit an existing post and save the changes.';
+$LANGUAGE['update_user_desc'] = 'Here you can edit an existing user and save the changes.';
+
+#===============================================================================
+# Delete item description
+#===============================================================================
+$LANGUAGE['delete_page_desc'] = 'If you do not need this page anymore, you can permanently delete it by clicking the following button.';
+$LANGUAGE['delete_post_desc'] = 'If you do not need this post anymore, you can permanently delete it by clicking the following button.';
+$LANGUAGE['delete_user_desc'] = 'If you do not need this user anymore, you can permanently delete it by clicking the following button.';
+
+#===============================================================================
+# Item overview description
+#===============================================================================
+$LANGUAGE['overview_page_desc'] = 'Here you can see all existing pages.';
+$LANGUAGE['overview_post_desc'] = 'Here you can see all existing posts.';
+$LANGUAGE['overview_user_desc'] = 'Here you can see all existing users.';
+
+#===============================================================================
+# Dashboard overview text
+#===============================================================================
+$LANGUAGE['overview_dashboard_text'] = 'Dashboard';
+
+#===============================================================================
+# Dashboard overview text
+#===============================================================================
+$LANGUAGE['overview_dashboard_desc'] = 'Welcome to the administration area. Here you can manage your content.';
+
+#===============================================================================
+# Database overview text
+#===============================================================================
+$LANGUAGE['overview_database_text'] = 'Database';
+
+#===============================================================================
+# Database overview text
+#===============================================================================
+$LANGUAGE['overview_database_desc'] = 'Perform database operations with SQL commands.';
+
+#===============================================================================
+# Authentication
+#===============================================================================
+$LANGUAGE['authentication_text'] = 'Authentication';
+$LANGUAGE['authentication_desc'] = 'To manage your content, you have to authenticate yourself first.';
+
+#===============================================================================
+# No items exists
+#===============================================================================
+$LANGUAGE['home_no_pages'] = 'There is no last page to display here. You have to insert a new page first.';
+$LANGUAGE['home_no_posts'] = 'There is no last post to display here. You have to insert a new post first.';
+$LANGUAGE['home_no_users'] = 'There is no last user to display here. You have to insert a new user first.';
+
+#===============================================================================
+# Delete user warning
+#===============================================================================
+$LANGUAGE['delete_user_warning'] = '<strong>WARNING</strong>: If you delete this user, all posts and pages belonging to this user will also be deleted!';
+
+#===============================================================================
+# Database warning
+#===============================================================================
+$LANGUAGE['database_warning'] = 'Some commands can have dangerous effects if you do not know what you are doing!';
+
+#===============================================================================
+# Error 403
+#===============================================================================
+$LANGUAGE['403_heading_text'] = 'Access denied';
+$LANGUAGE['403_heading_desc'] = 'You are denied to access this resource because you do not have the necessary permissions.';
+
+#===============================================================================
+# Error 404
+#===============================================================================
+$LANGUAGE['404_heading_text'] = 'Not found';
+$LANGUAGE['404_heading_desc'] = 'The requested resource could not be found on this server.';
+
+#===============================================================================
+# "Are you sure?" question
+#===============================================================================
+$LANGUAGE['sure'] = 'Are you sure?';
+
+#===============================================================================
+# Labels
+#===============================================================================
+$LANGUAGE['LABEL_SLUG'] = 'Slug';
+$LANGUAGE['LABEL_USER'] = 'User';
+$LANGUAGE['LABEL_NAME'] = 'Title';
+$LANGUAGE['LABEL_INSERT'] = 'Created';
+$LANGUAGE['LABEL_UPDATE'] = 'Updated';
+$LANGUAGE['LABEL_FULLNAME'] = 'Name';
+$LANGUAGE['LABEL_MAILADDR'] = 'Email';
+$LANGUAGE['LABEL_USERNAME'] = 'Username';
+$LANGUAGE['LABEL_PASSWORD'] = 'Password';
+?> \ No newline at end of file
diff --git a/template/admin/rsrc/background.png b/template/admin/rsrc/background.png
new file mode 100644
index 0000000..f018e81
--- /dev/null
+++ b/template/admin/rsrc/background.png
Binary files differ
diff --git a/template/admin/rsrc/font/font-awesome.woff2 b/template/admin/rsrc/font/font-awesome.woff2
new file mode 100644
index 0000000..4d13fc6
--- /dev/null
+++ b/template/admin/rsrc/font/font-awesome.woff2
Binary files differ
diff --git a/template/admin/rsrc/font/kadwa-n-400.woff2 b/template/admin/rsrc/font/kadwa-n-400.woff2
new file mode 100644
index 0000000..1566426
--- /dev/null
+++ b/template/admin/rsrc/font/kadwa-n-400.woff2
Binary files differ
diff --git a/template/admin/rsrc/font/ruda-n-400.woff2 b/template/admin/rsrc/font/ruda-n-400.woff2
new file mode 100644
index 0000000..6435a0d
--- /dev/null
+++ b/template/admin/rsrc/font/ruda-n-400.woff2
Binary files differ
diff --git a/template/admin/rsrc/font/ruda-n-700.woff2 b/template/admin/rsrc/font/ruda-n-700.woff2
new file mode 100644
index 0000000..0066431
--- /dev/null
+++ b/template/admin/rsrc/font/ruda-n-700.woff2
Binary files differ
diff --git a/template/admin/rsrc/icon-public-domain.svg b/template/admin/rsrc/icon-public-domain.svg
new file mode 100644
index 0000000..e0f0b0f
--- /dev/null
+++ b/template/admin/rsrc/icon-public-domain.svg
@@ -0,0 +1 @@
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 53.869999 53.509998" version="1" width="53.87" height="53.51"><rect rx="2" width="50.745" y="1.563" x="1.563" height="50.385" fill="#b3b3b3" fill-rule="evenodd" stroke="#333" stroke-width="3.125" stroke-linejoin="round"/><g transform="translate(-3.116 -3.554)" fill-rule="evenodd" stroke="#333" stroke-linecap="round" stroke-linejoin="round"><path d="M25.96 22.992c-2.403 1.28-3.964 3.706-4.993 6.316h18.198c-.944-2.547-2.39-4.947-4.593-6.316-2.478-.108-5.595 0-8.612 0z" fill="#7f7f7f" stroke-width="1.87471319"/><circle transform="matrix(.6206 0 0 .6206 17.702 3.554)" cx="19.524" cy="22.301" r="12.326" fill="#bfbfbf" stroke-width="3.021"/></g><path d="M12.76 27.584c-.84 0-1.513.674-1.513 1.512v18.116h31.72V29.096c0-.838-.674-1.512-1.51-1.512H12.758z" fill="#999" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M18.55 29.705l-9.617-13.27 5.385-2.694" fill="none" stroke="#333" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/><circle cx="13.934" cy="13.741" r="2.308" fill="#7f7f7f" fill-rule="evenodd" stroke="#333" stroke-width="1.25"/><rect rx="2.267" height="4.616" width="36.929" y="24.705" x="8.548" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width="2.5" stroke-linejoin="round"/><path d="M18.29 45.03c2.917-1.836 6.143-2.33 7.4-2.043.14-1.242 2.07-3.303 5.54-5.486-4.107 1.048-4.96 1.32-6.74 3.745-3.04.3-3.913 1.192-6.2 3.785zM25.543 36.904c2.02-1.27 4.253-1.612 5.122-1.415.098-.86 1.434-2.287 3.835-3.797-2.842.724-3.433.912-4.664 2.59-2.105.208-2.71.826-4.293 2.62z" fill="#4c4c4c" fill-rule="evenodd" stroke="#333" stroke-width=".625" stroke-linecap="round" stroke-linejoin="round"/></svg> \ No newline at end of file
diff --git a/template/admin/rsrc/main.css b/template/admin/rsrc/main.css
new file mode 100644
index 0000000..2466b31
--- /dev/null
+++ b/template/admin/rsrc/main.css
@@ -0,0 +1,275 @@
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Selection
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+::-moz-selection{background:#BBB;color:#000;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Hyperlinks
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+a{color:#0060A0;text-decoration:none;}a:focus{background:#CCC;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Paragraphs
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+h1+p,h2+p,h3+p,h4+p,h5+p,h6+p{margin-top:0;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Icons
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+h1 .fa, h2 .fa, h3 .fa, h4 .fa, h5 .fa, h6 .fa{margin-right:0.25rem;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Headings
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+h1 > a{float:right;font-size:0.7rem;font-weight:normal;}
+h1,h2,h3,h4,h5,h6{margin:0;text-transform:uppercase;}
+h1{font-size:0.80rem;}h2{font-size:0.70rem;}
+h3{font-size:0.65rem;}h4{font-size:0.60rem;}
+h5{font-size:0.55rem;}h6{font-size:0.50rem;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Document
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+html,body{margin:0;padding:0;}
+main{padding:1rem;}
+html{font-size:1.25rem;color:#333;background:url(background.png) fixed center #CCC;-webkit-hyphens:auto;hyphens:auto;}
+body{font-family:Ruda,sans-serif;font-size:0.7rem;line-height:1.2rem;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Main content
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#main-content{background:#FFF;border:0.05rem solid #AAA;border-top:none;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Width
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#main-content,.header-content{max-width:50rem;margin:0 auto;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Header
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#main-header{font-size:0.6rem;}
+#header-text,#header-desc{text-shadow: 0 -1px #4E718F, 1px 0 #4E718F, 0 1px #4E718F, -1px 0 #4E718F;}
+#header-text{font-size:0.8rem;font-weight:700;text-transform:uppercase;}
+#header-desc{font-size:0.6rem;font-weight:700;line-height:1rem;}
+#header-desc span{color:#CCC;}
+#header-logo{display:block;max-height:5rem;float:left;margin-right:0.5rem;}
+.header-line{padding:0.5rem 1rem;overflow:hidden;}
+.header-line:first-child{background:#5E819F;}
+.header-line:last-child{background:#EEE;border:0.05rem solid #AAA;border-left:none;border-right:none;padding:0.25rem 1rem;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Main Navigation
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#main-navi ul{list-style:none;margin:0;padding:0;float:left;}
+#main-navi li{display:inline;}
+#main-navi ul+ul{float:right;}
+#main-navi li .fa{margin-right:0.25rem;}
+#main-navi a{padding:0.1rem 0.3rem;background:#DDD;border:0.05rem solid #AAA;color:inherit;text-decoration:none;text-align:center;display:inline-block;}
+#main-navi a:hover, #main-navi a:focus{text-decoration:none;background:#CCC;}
+#main-navi a:focus{background:#CCC;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Footer
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#main-footer{font-size:0.6rem;background:#EEE;border-top:0.05rem solid #AAA;padding:0.75rem;text-align:center;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Content containers
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+.content{border:0.05rem solid #AAA;margin-bottom:1rem;clear:both;}
+.content{background:#FFF;border:0.05rem solid #AAA;}
+
+.content > header{padding:0.5rem 1rem;}
+
+.content > header,
+.content > footer{background:#EEE;overflow:hidden;}
+
+.content > article{padding:1rem;}
+.content > header{border-bottom:0.05rem solid #AAA;}
+.content > footer{border-top:0.05rem solid #AAA;}
+.content > footer > ul{margin:0;padding:0;list-style:none;}
+.content > footer > ul > li{display:inline-block;float:left;}
+.content > footer > ul > li:last-child{float:right;}
+.content > footer > ul > li > a{color:inherit;display:inline-block;padding:0.25rem 2rem;}
+.content > footer > ul > li > a:hover,
+.content > footer > ul > li > a:active{background:#DDD;}
+
+.content h2 > span{float:right;}
+
+.item-list{margin:0;padding:0;list-style:none;}
+.item-list > li{display:block;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Site Navigation
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+#site-navi{clear:both;display:flex;box-sizing:border-box;justify-content:space-between;}
+#site-navi > div{display:flex;align-items:center;border:0.05rem solid #AAA;background:#EEE;}
+#site-navi > div > a{display:block;}
+#site-navi > section{display:flex;overflow:hidden;align-items:center;}
+#site-navi > section > div{border:0.05rem solid #AAA;background:#EEE;}
+
+#site-navi .disabled{pointer-events:none;color:#AAA;}
+#site-navi .active a{background:#CCC !important;font-weight:600;pointer-events: none;}
+
+#site-navi ol{list-style:none;margin:0;padding:0;}
+#site-navi li{float:left;display:inline-block;}
+#site-navi li+li{border-left:0.05rem solid #AAA;}
+#site-navi a{padding:0 0.5rem;text-decoration:none;color:inherit;display:inline-block;}
+#site-navi a:hover,#site-navi a:focus{background:#CCC;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Elements
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+pre{margin-bottom:1rem;overflow:auto;-moz-tab-size:4;tab-size:4;}
+code,pre{font-family:monospace;color:#B03060;}
+p{margin-top:0;}
+img{border:none;max-width:100%;}
+.red{color:#B03060;}
+.blue{color:#40779A;}
+.green{color:#008B45;}
+.right{float:right;}
+#database-result{color:inherit;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Table elements
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+table{width:100%;margin:0 0 1rem;}td{vertical-align:middle;}
+table,td{border-spacing:0;border-collapse:collapse;padding:0.5rem;border:0.05rem solid #000;}
+thead,tr:nth-child(even){background:#EEE;}
+thead > tr, th{font-weight:700;font-style:italic;}
+thead > tr > td, th > td{text-align:center;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Brackets
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+.brackets a,a.brackets{text-decoration:none;}
+.brackets:after{content:"]"}
+.brackets:before{content:"["}
+a.brackets:before,a.brackets:after{color:#222;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Form flex-box
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+form{border:0.05rem solid #AAA;}
+
+.flex{display:flex;width:100%;justify-content:center;overflow:hidden;box-sizing:border-box;}
+.flex + section{border-top:0.05rem solid #AAA;}
+.flex > section {display:flex;box-sizing:padding-box;width:100%;}
+.flex > section > div{display:flex;align-items:center;padding:0.5rem;box-sizing:border-box;}
+.flex > section > div + div{border-left:0.05rem solid #AAA;}
+.flex.flex-responsive > section{width:50%;}
+
+.form-icon-flex{background:#DDD;width:10%;justify-content:center;}
+.form-label-flex{background:#DDD;width:30%;border-left:none !important;}
+.form-field-flex{width:60%;}
+
+.fa + label{margin-left:0.25rem;}
+.background{background:#DDD;}
+.flex-padding{padding:0.5rem;}
+.flex-direction-column{flex-direction:column;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Form buttons
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+.button-list {margin:0;padding:0;list-style:none;}
+.button-list > li{display:inline-block;background:#EEE;padding:0.5rem;border:0.05rem solid #AAA;cursor:pointer;}
+.button-list.emoticons > li {padding:0.25rem 0.5rem;}
+.button-list > li:hover,
+.button-list > li:active{background:#CCC;}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Form elements
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+input,select,textarea{width:100%;box-sizing:padding-box;background:#EEE;color:#404040;font-family:inherit;font-size:0.7rem;padding:0.25rem;border:0.05rem solid #AAA;}
+textarea{font-family:Kadwa,sans-serif;box-sizing:border-box;display:inline-block;resize:vertical;min-height:15rem;line-height:1.4rem;padding:0.75rem;}
+input[type="submit"]{text-transform:uppercase;}
+input:disabled{background:#DDD;color:#888;}
+input:disabled:hover{cursor:not-allowed;}
+label{text-transform:uppercase;font-weight:normal;}
+label:after{content:":";}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* FontAwesome Main
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+.fa{display:inline-block;font:normal normal normal 14px/1 "FontAwesome";font-size:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* FontAwesome Icons
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+.fa-rss:before{content:"\f09e"}
+.fa-bug:before{content:"\f188"}
+.fa-key:before{content:"\f084"}
+.fa-link:before{content:"\f0c1"}
+.fa-bold:before{content:"\f032"}
+.fa-code:before{content:"\f121"}
+.fa-bars:before{content:"\f0c9"}
+.fa-user:before{content:"\f007"}
+.fa-home:before{content:"\f015"}
+.fa-plus:before{content:"\f067"}
+.fa-italic:before{content:"\f033"}
+.fa-header:before{content:"\f1dc"}
+.fa-search:before{content:"\f002"}
+.fa-trash-o:before{content:"\f014"}
+.fa-sign-in:before{content:"\f090"}
+.fa-clock-o:before{content:"\f017"}
+.fa-list-ul:before{content:"\f0ca"}
+.fa-list-ol:before{content:"\f0cb"}
+.fa-smile-o:before{content:"\f118"}
+.fa-database:before{content:"\f1c0"}
+.fa-sign-out:before{content:"\f08b"}
+.fa-dashboard:before{content:"\f0e4"}
+.fa-picture-o:before{content:"\f03e"}
+.fa-envelope-o:before{content:"\f003"}
+.fa-eyedropper:before{content:"\f1fb"}
+.fa-rss-square:before{content:"\f143"}
+.fa-arrow-left:before{content:"\f060"}
+.fa-quote-right:before{content:"\f10e"}
+.fa-user-secret:before{content:"\f21b"}
+.fa-file-text-o:before{content:"\f0f6"}
+.fa-newspaper-o:before{content:"\f1ea"}
+.fa-arrow-right:before{content:"\f061"}
+.fa-external-link:before{content:"\f08e"}
+.fa-pencil-square-o:before{content:"\f044"}
+.fa-question-circle:before{content:"\f059"}
+.fa-pencil-square-o:before{content:"\f044"}
+.fa-exclamation-triangle:before{content:"\f071"}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Responsive Level #1
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+@media only screen and (max-width:50rem) {
+ html{font-size:1.125rem;/*18px*/background-image:none !important;}
+}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Responsive Level #2
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+@media only screen and (max-width:37.5rem) {
+ .flex.flex-responsive{display:block;width:auto;}
+ .flex.flex-responsive > section {width:100%;}
+ .flex.flex-responsive > section + section{border-top:0.05rem solid #AAA;}
+
+ #main-navi{font-size:1rem;}
+ #main-navi li span{display:none;}
+ #main-navi li .fa{margin-right:0;}
+ #main-navi a{padding:0.5rem;}
+
+ .flex-emoticons{display:none !important;}
+}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Font "Font Awesome" [4.7.0]: SIL Open Font License (OFL)
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+@font-face{font-family:"FontAwesome";font-weight:400;src:url("font/font-awesome.woff2") format("woff2");}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Font "Kadwa": SIL Open Font License (OFL)
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+@font-face{font-family:Kadwa;font-weight:400;src:url("font/kadwa-n-400.woff2") format("woff2");}
+
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+/* Font "Ruda": SIL Open Font License (OFL)
+/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
+@font-face{font-family:Ruda;font-weight:400;src:url("font/ruda-n-400.woff2") format("woff2");}
+@font-face{font-family:Ruda;font-weight:700;src:url("font/ruda-n-700.woff2") format("woff2");} \ No newline at end of file
diff --git a/template/admin/rsrc/main.js b/template/admin/rsrc/main.js
new file mode 100644
index 0000000..3d5546f
--- /dev/null
+++ b/template/admin/rsrc/main.js
@@ -0,0 +1,94 @@
+//==============================================================================
+// Markdown tags to replace
+//==============================================================================
+var markdownTags = {
+ "bold": ["**", "**"],
+ "italic": ["*", "*"],
+ "header": ["## ", "\n"],
+ "link": ["[", "](href)"],
+ "image": ["![", "](href)"],
+ "code": ["\n~~~\n", "\n~~~\n"],
+ "quote": ["\n> ", ""],
+ "list_ul": ["* ", ""],
+ "list_ol": ["1. ", ""]
+};
+
+//==============================================================================
+// Set caret position in editor
+//==============================================================================
+function setCaretPosition(position) {
+ window.setTimeout(function() {
+ document.getElementById("content-editor").focus();
+ document.getElementById("content-editor").setSelectionRange(position, position);
+ }, 50);
+
+}
+
+//==============================================================================
+// Insert markdown around text in editor
+//==============================================================================
+function markdownReplace(tagname) {
+ var element = document.activeElement;
+
+ if(element.nodeName === 'TEXTAREA') {
+ var selectionStart = element.selectionStart;
+ var selectionEnd = element.selectionEnd;
+
+ var selectedText = element.value.substring(selectionStart, selectionEnd);
+
+ var content = element.value;
+ element.value = content.slice(0, selectionStart) + markdownTags[tagname][0] + selectedText + markdownTags[tagname][1] + content.slice(selectionEnd);
+
+ setCaretPosition(selectionStart + markdownTags[tagname][0].length + selectedText.length + markdownTags[tagname][1].length);
+ }
+}
+
+//==============================================================================
+// Insert emoticon after cursor in editor
+//==============================================================================
+function emoticonReplace(emoticon) {
+ var element = document.activeElement;
+
+ if(element.nodeName === 'TEXTAREA') {
+ var selectionStart = element.selectionStart;
+ var selectionEnd = element.selectionEnd;
+
+ var content = element.value;
+ element.value = content.slice(0, selectionStart) + emoticon + content.slice(selectionEnd);
+
+ setCaretPosition(selectionStart + emoticon.length);
+ }
+}
+
+//==============================================================================
+// Keep server-side session active if the user is writing a long text
+//==============================================================================
+addEventListener("DOMContentLoaded", function() {
+ setInterval(function() {
+ var Request = new XMLHttpRequest();
+ Request.open("HEAD", "", true);
+ Request.send();
+ }, 300000);
+}, false);
+
+//==============================================================================
+// Insert tab indent into editor if <tab> is pressed
+//==============================================================================
+addEventListener("DOMContentLoaded", function() {
+ if(document.getElementById("content-editor")) {
+ var element = document.getElementById("content-editor");
+ element.addEventListener('keydown', function(e) {
+ if(e.keyCode === 9 && !e.ctrlKey && !e.shiftKey) {
+ var selectionStart = element.selectionStart;
+ var selectionEnd = element.selectionEnd;
+
+ var content = element.value;
+
+ element.value = content.substring(0, selectionStart) + "\t" + content.substring(selectionEnd);
+
+ setCaretPosition(selectionStart + 1);
+ e.preventDefault();
+ }
+ }, false);
+ }
+}, false); \ No newline at end of file