]> 91.132.146.200 Git - emere.git/commitdiff
first steps
authorBanana <johannes.kessler@bechtle.com>
Sat, 10 Sep 2022 16:58:36 +0000 (18:58 +0200)
committerBanana <johannes.kessler@bechtle.com>
Sat, 10 Sep 2022 16:58:36 +0000 (18:58 +0200)
41 files changed:
sources/milligram-css-v1.4.1.zip [new file with mode: 0644]
sources/v1.4.1.zip [deleted file]
webroot/index.php
webroot/lib/item.class.php [new file with mode: 0644]
webroot/lib/summoner.class.php [new file with mode: 0644]
webroot/view/_foot.php [new file with mode: 0644]
webroot/view/_head.php [new file with mode: 0644]
webroot/view/_menu.php [new file with mode: 0644]
webroot/view/_message.php [new file with mode: 0644]
webroot/view/asset/style.css [new file with mode: 0644]
webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437 Win.ttf [new file with mode: 0644]
webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437.ttf [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-blue-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-blue-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-cyan-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-cyan-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-green-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-green-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-orange-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-orange-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-purple-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-purple-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-red-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-red-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-yellow-black.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/bg-yellow-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-blue.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-cyan.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-green.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-orange.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-purple.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-red.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-white.png [new file with mode: 0644]
webroot/view/asset/tuicss/images/scroll-yellow.png [new file with mode: 0644]
webroot/view/asset/tuicss/tuicss.min.css [new file with mode: 0644]
webroot/view/asset/tuicss/tuicss.min.js [new file with mode: 0644]
webroot/view/entry/entry.html [new file with mode: 0644]
webroot/view/entry/entry.php [new file with mode: 0644]
webroot/view/home/home.html [new file with mode: 0644]
webroot/view/home/home.php [new file with mode: 0644]
webroot/view/main.php [deleted file]

diff --git a/sources/milligram-css-v1.4.1.zip b/sources/milligram-css-v1.4.1.zip
new file mode 100644 (file)
index 0000000..0d47669
Binary files /dev/null and b/sources/milligram-css-v1.4.1.zip differ
diff --git a/sources/v1.4.1.zip b/sources/v1.4.1.zip
deleted file mode 100644 (file)
index 0d47669..0000000
Binary files a/sources/v1.4.1.zip and /dev/null differ
index 9d139d7a2f09b9fce0d79a0d059341025091b972..febe12b87eb21dbf8f67f9fb34b4762acf6367b2 100644 (file)
@@ -44,23 +44,40 @@ else {
        ini_set('display_errors',false);
 }
 
+require_once('lib/summoner.class.php');
+
 ## DB connection
-mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
 $DB = new mysqli(DB_HOST, DB_USERNAME,DB_PASSWORD, DB_NAME);
 if ($DB->connect_errno) exit('Can not connect to MySQL Server');
-$DB->query("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");
+$DB->set_charset("utf8mb4");
+$DB->query("SET collation_connection = 'utf8mb4_unicode_ci'");
+$driver = new mysqli_driver();
+$driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
 
 # the template data as an array
 # and some defaults
 $TemplateData = array();
+$_view = 'home';
+
+if(isset($_GET['p']) && Summoner::validate($_GET['p'], 'nospace')) {
+    $_view = trim($_GET['p']);
+}
+
+require_once 'view/'.$_view.'/'.$_view.'.php';
 
-if(!empty($TemplateData['refresh'])) {
-       header("Location: ".$TemplateData['refresh']);
+if(isset($TemplateData['refresh']) && !empty($TemplateData['refresh'])) {
+    header('Location: '.PATH_WEBROOT.$TemplateData['refresh']);
+    exit();
 }
 
 # header information
 header('Content-type: text/html; charset=UTF-8');
+header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");
 
-require_once 'view/main.php';
+require_once 'view/_head.php';
+require_once 'view/'.$_view.'/'.$_view.'.html';
+require_once 'view/_foot.php';
 
 $DB->close();
diff --git a/webroot/lib/item.class.php b/webroot/lib/item.class.php
new file mode 100644 (file)
index 0000000..4838cbe
--- /dev/null
@@ -0,0 +1,42 @@
+<?php
+/**
+ * emere
+ *
+ * Copyright (C) 2022  Johannes 'Banana' Keßler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+class Item {
+    /**
+     * The DB object
+     *
+     * @var mysqli
+     */
+    private $_DB;
+
+    /**
+     * The data for this item
+     *
+     * @var array
+     */
+    private $_data;
+
+    /**
+     * @param mysqli $databaseConnectionObject
+     */
+    public function __construct(mysqli $databaseConnectionObject) {
+        $this->_DB = $databaseConnectionObject;
+    }
+}
\ No newline at end of file
diff --git a/webroot/lib/summoner.class.php b/webroot/lib/summoner.class.php
new file mode 100644 (file)
index 0000000..3da22f3
--- /dev/null
@@ -0,0 +1,203 @@
+<?php
+/**
+ * emere
+ *
+ * Copyright (C) 2022  Johannes 'Banana' Keßler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Class Summoner
+ *
+ * A static helper class
+ */
+class Summoner {
+    /**
+     * validate the given string with the given type. Optional check the string
+     * length
+     *
+     * @param string $input The string to check
+     * @param string $mode How the string should be checked
+     * @param string $limit If int given the string is checked for length
+     *
+     * @return bool
+     *
+     * @see http://de.php.net/manual/en/regexp.reference.unicode.php
+     * http://www.sql-und-xml.de/unicode-database/#pc
+     *
+     * the pattern replaces all that is allowed. the correct result after
+     * the replace should be empty, otherwise are there chars which are not
+     * allowed
+     */
+    static function validate(string $input, string $mode = 'text', string $limit = "0"): bool {
+        // check if we have input
+        $input = trim($input);
+
+        if($input == "") return false;
+
+        $ret = false;
+
+        switch ($mode) {
+            case 'mail':
+                if(filter_var($input,FILTER_VALIDATE_EMAIL) === $input) {
+                    return true;
+                }
+                else {
+                    return false;
+                }
+                break;
+
+            case 'url':
+                if(filter_var($input,FILTER_VALIDATE_URL) === $input) {
+                    return true;
+                }
+                else {
+                    return false;
+                }
+                break;
+
+            case 'nospace':
+                // text without any whitespace and special chars
+                $pattern = '/[\p{L}\p{N}]/u';
+                break;
+
+            case 'nospaceP':
+                // text without any whitespace and special chars
+                // but with Punctuation other
+                # http://www.sql-und-xml.de/unicode-database/po.html
+                $pattern = '/[\p{L}\p{N}\p{Po}\-]/u';
+                break;
+
+            case 'digit':
+                // only numbers and digit
+                // warning with negative numbers...
+                $pattern = '/[\p{N}\-]/';
+                break;
+
+            case 'pageTitle':
+                // text with whitespace and without special chars
+                // but with Punctuation
+                $pattern = '/[\p{L}\p{N}\p{Po}\p{Z}\s-]/u';
+                break;
+
+            # strange. the \p{M} is needed.. don't know why..
+            case 'filename':
+                $pattern = '/[\p{L}\p{N}\p{M}\-_\.\p{Zs}]/u';
+                break;
+
+            case 'shortlink':
+                // special char string based on https://www.jwz.org/base64-shortlinks/
+                $pattern = '/[\p{L}\p{N}\-_]/u';
+                break;
+
+            case 'text':
+            default:
+                $pattern = '/[\p{L}\p{N}\p{P}\p{S}\p{Z}\p{M}\s]/u';
+        }
+
+        $value = preg_replace($pattern, '', $input);
+
+        if($value === "") {
+            $ret = true;
+        }
+
+        if(!empty($limit) && is_numeric($limit)) {
+            # isset starts with 0
+            if(isset($input[$limit])) {
+                # too long
+                $ret = false;
+            }
+        }
+
+        return $ret;
+    }
+
+    /**
+     * check if a string starts with a given string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @return boolean
+     */
+    static function startsWith(string $haystack, string $needle): bool {
+        $length = strlen($needle);
+        return (substr($haystack, 0, $length) === $needle);
+    }
+
+    /**
+     * check if a string ends with a given string
+     *
+     * @param string $haystack
+     * @param string $needle
+     * @return boolean
+     */
+    static function endsWith(string $haystack, string $needle): bool {
+        $length = strlen($needle);
+        if ($length == 0) {
+            return true;
+        }
+
+        return (substr($haystack, -$length) === $needle);
+    }
+
+
+    /**
+     * create a short string based on a integer
+     *
+     * @see https://www.jwz.org/base64-shortlinks/
+     * @param string $id
+     * @return string
+     */
+    static function b64sl_pack_id(string $id): string {
+        $id = intval($id);
+        $ida = ($id > 0xFFFFFFFF ? $id >> 32 : 0);     // 32 bit big endian, top
+        $idb = ($id & 0xFFFFFFFF);                     // 32 bit big endian, bottom
+        $id = pack ('N', $ida) . pack ('N', $idb);
+        $id = preg_replace('/^\000+/', '', "$id");     // omit high-order NUL bytes
+        $id = base64_encode ($id);
+        $id = str_replace ('+', '-', $id);             // encode URL-unsafe "+" "/"
+        $id = str_replace ('/', '_', $id);
+        $id = preg_replace ('/=+$/', '', $id); // omit trailing padding bytes
+        return $id;
+    }
+
+    /**
+     * Decode a base64-encoded big-endian integer of up to 64 bits.
+     *
+     * @see https://www.jwz.org/base64-shortlinks/
+     * @param string $id
+     * @return string
+     */
+    static function b64sl_unpack_id(string $id): string {
+        $id = str_replace ('-', '+', $id);             // decode URL-unsafe "+" "/"
+        $id = str_replace ('_', '/', $id);
+        $id = base64_decode ($id);
+        while (strlen($id) < 8) { $id = "\000$id"; }   // pad with leading NULs
+        $a = unpack ('N*', $id);                       // 32 bit big endian
+        $id = ($a[1] << 32) | $a[2];                   // pack top and bottom word
+        return $id;
+    }
+
+    /**
+     * this only works with arrays and checking if the key is there and echo/return it.
+     *
+     * @param $array array
+     * @param $key string
+     * @return mixed
+     */
+    static function ifset(array $array, string $key) {
+        return $array[$key] ?? '';
+    }
+}
diff --git a/webroot/view/_foot.php b/webroot/view/_foot.php
new file mode 100644 (file)
index 0000000..c0b1215
--- /dev/null
@@ -0,0 +1,4 @@
+        </fieldset>
+    </div>
+</body>
+</html>
\ No newline at end of file
diff --git a/webroot/view/_head.php b/webroot/view/_head.php
new file mode 100644 (file)
index 0000000..191ee8d
--- /dev/null
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <title><?php echo Summoner::ifset($TemplateData,'pageTitle').' - '; ?>emere</title>
+
+    <link rel="stylesheet" href="<?php echo PATH_WEBROOT; ?>/view/asset/tuicss/tuicss.min.css"/>
+    <script src="<?php echo PATH_WEBROOT; ?>/view/asset/tuicss/tuicss.min.js"></script>
+    <link rel="stylesheet" href="<?php echo PATH_WEBROOT; ?>/view/asset/style.css"/>
+</head>
+<body class="blue-255">
+    <?php require_once 'view/_menu.php'; ?>
+    <div class="tui-window full-width">
+        <fieldset class="tui-fieldset tui-border-double">
+            <legend><?php echo Summoner::ifset($TemplateData,'pageTitle'); ?></legend>
+            <?php require_once 'view/_message.php'; ?>
\ No newline at end of file
diff --git a/webroot/view/_menu.php b/webroot/view/_menu.php
new file mode 100644 (file)
index 0000000..1ae07d7
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+?>
+<nav class="tui-nav relative">
+    <ul>
+        <li class="tui-dropdown">
+            <span class="red-168-text">F</span>ile
+            <div class="tui-dropdown-content">
+                <ul>
+                    <li><a href="index.php?p=entry"><span class="red-168-text">N</span>ew</a></li>
+                    <li><a href="index.php"><span class="red-168-text">H</span>ome</a></li>
+                    <li><a href="index.php?p=list"><span class="red-168-text">S</span>earch</a></li>
+                </ul>
+            </div>
+        </li>
+    </ul>
+</nav>
\ No newline at end of file
diff --git a/webroot/view/_message.php b/webroot/view/_message.php
new file mode 100644 (file)
index 0000000..6c07ffc
--- /dev/null
@@ -0,0 +1,50 @@
+<?php
+/**
+ * emere
+ *
+ * Copyright (C) 2022  Johannes 'Banana' Keßler
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <https://www.gnu.org/licenses/>.
+ */
+if(isset($TemplateData['message']['content'])) {
+    $cssClass = 'blue-168';
+    $headline = 'Info';
+    if(isset($TemplateData['message']['status'])) {
+        switch($TemplateData['message']['status']) {
+            case 'error':
+                $cssClass = 'red-168';
+                $headline = 'Error';
+                break;
+            case 'warning':
+                $cssClass = 'yellow-168';
+                $headline = 'Warning';
+                break;
+            case 'success':
+                $cssClass = 'green-168';
+                $headline = 'Success';
+                break;
+
+            case 'info':
+            default:
+
+        }
+    }
+    ?>
+    <div class="tui-window">
+        <fieldset class="tui-fieldset <?php echo $cssClass; ?>">
+            <legend><?php echo $headline; ?></legend>
+            <p><?php echo $TemplateData['message']['content']; ?></p>
+        </fieldset>
+    </div>
+<?php } ?>
\ No newline at end of file
diff --git a/webroot/view/asset/style.css b/webroot/view/asset/style.css
new file mode 100644 (file)
index 0000000..fbc44be
--- /dev/null
@@ -0,0 +1,18 @@
+.form-row {
+    margin-bottom: 1em;
+}
+.form-row label {
+    padding-right: 1em;
+}
+.form-row input[type="text"] {
+    width: 600px;
+}
+
+input[type="submit"] {
+    width: initial;
+}
+
+/* overrides */
+.tui-window {
+    margin-bottom: 20px;
+}
\ No newline at end of file
diff --git a/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437 Win.ttf b/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437 Win.ttf
new file mode 100644 (file)
index 0000000..d03b1c5
Binary files /dev/null and b/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437 Win.ttf differ
diff --git a/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437.ttf b/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437.ttf
new file mode 100644 (file)
index 0000000..f5cbfc0
Binary files /dev/null and b/webroot/view/asset/tuicss/fonts/Perfect DOS VGA 437.ttf differ
diff --git a/webroot/view/asset/tuicss/images/bg-blue-black.png b/webroot/view/asset/tuicss/images/bg-blue-black.png
new file mode 100644 (file)
index 0000000..aa55706
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-blue-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-blue-white.png b/webroot/view/asset/tuicss/images/bg-blue-white.png
new file mode 100644 (file)
index 0000000..45409ed
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-blue-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-cyan-black.png b/webroot/view/asset/tuicss/images/bg-cyan-black.png
new file mode 100644 (file)
index 0000000..12db210
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-cyan-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-cyan-white.png b/webroot/view/asset/tuicss/images/bg-cyan-white.png
new file mode 100644 (file)
index 0000000..41ce181
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-cyan-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-green-black.png b/webroot/view/asset/tuicss/images/bg-green-black.png
new file mode 100644 (file)
index 0000000..2f83f3c
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-green-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-green-white.png b/webroot/view/asset/tuicss/images/bg-green-white.png
new file mode 100644 (file)
index 0000000..85cd3f9
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-green-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-orange-black.png b/webroot/view/asset/tuicss/images/bg-orange-black.png
new file mode 100644 (file)
index 0000000..05e8662
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-orange-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-orange-white.png b/webroot/view/asset/tuicss/images/bg-orange-white.png
new file mode 100644 (file)
index 0000000..8c82141
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-orange-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-purple-black.png b/webroot/view/asset/tuicss/images/bg-purple-black.png
new file mode 100644 (file)
index 0000000..240217f
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-purple-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-purple-white.png b/webroot/view/asset/tuicss/images/bg-purple-white.png
new file mode 100644 (file)
index 0000000..5ae0ca2
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-purple-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-red-black.png b/webroot/view/asset/tuicss/images/bg-red-black.png
new file mode 100644 (file)
index 0000000..dc2c0be
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-red-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-red-white.png b/webroot/view/asset/tuicss/images/bg-red-white.png
new file mode 100644 (file)
index 0000000..4470d9b
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-red-white.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-yellow-black.png b/webroot/view/asset/tuicss/images/bg-yellow-black.png
new file mode 100644 (file)
index 0000000..ace85f9
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-yellow-black.png differ
diff --git a/webroot/view/asset/tuicss/images/bg-yellow-white.png b/webroot/view/asset/tuicss/images/bg-yellow-white.png
new file mode 100644 (file)
index 0000000..457edd3
Binary files /dev/null and b/webroot/view/asset/tuicss/images/bg-yellow-white.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-blue.png b/webroot/view/asset/tuicss/images/scroll-blue.png
new file mode 100644 (file)
index 0000000..4ac322b
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-blue.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-cyan.png b/webroot/view/asset/tuicss/images/scroll-cyan.png
new file mode 100644 (file)
index 0000000..ca62812
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-cyan.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-green.png b/webroot/view/asset/tuicss/images/scroll-green.png
new file mode 100644 (file)
index 0000000..d09971f
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-green.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-orange.png b/webroot/view/asset/tuicss/images/scroll-orange.png
new file mode 100644 (file)
index 0000000..ec20219
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-orange.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-purple.png b/webroot/view/asset/tuicss/images/scroll-purple.png
new file mode 100644 (file)
index 0000000..67a0550
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-purple.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-red.png b/webroot/view/asset/tuicss/images/scroll-red.png
new file mode 100644 (file)
index 0000000..1dccb6a
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-red.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-white.png b/webroot/view/asset/tuicss/images/scroll-white.png
new file mode 100644 (file)
index 0000000..c972a5e
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-white.png differ
diff --git a/webroot/view/asset/tuicss/images/scroll-yellow.png b/webroot/view/asset/tuicss/images/scroll-yellow.png
new file mode 100644 (file)
index 0000000..e1a915c
Binary files /dev/null and b/webroot/view/asset/tuicss/images/scroll-yellow.png differ
diff --git a/webroot/view/asset/tuicss/tuicss.min.css b/webroot/view/asset/tuicss/tuicss.min.css
new file mode 100644 (file)
index 0000000..477f8f1
--- /dev/null
@@ -0,0 +1 @@
+@charset "UTF-8";@font-face{font-family:DOS;src:url("fonts/Perfect DOS VGA 437 Win.ttf")}html{font-family:"Lucida Console",monospace;font-size:18px;box-sizing:border-box}body{margin:0}*,:after,:before{font-family:inherit;font-size:inherit;box-sizing:inherit}ul{margin:0;padding:0;list-style-type:none}ul li{list-style-type:none}ul li a{display:block}a{color:inherit;text-decoration:none}span{margin:0}hr{border:none;border-bottom:2px solid #fff}input,select,textarea{width:200px}@media only screen and (max-width:600px){.hide-on-small-and-down,.hide-on-small-only{display:none!important}}@media only screen and (max-width:992px){.hide-on-med-and-down{display:none!important}}@media only screen and (min-width:601px){.hide-on-med-and-up{display:none!important}}@media only screen and (min-width:600px) and (max-width:992px){.hide-on-med-only{display:none!important}}@media only screen and (min-width:993px){.hide-on-large-only{display:none!important}}@media only screen and (min-width:1201px){.hide-on-extra-large-only{display:none!important}}@media only screen and (min-width:1201px){.show-on-extra-large{display:block!important}}@media only screen and (min-width:993px){.show-on-large{display:block!important}}@media only screen and (min-width:600px) and (max-width:992px){.show-on-medium{display:block!important}}@media only screen and (max-width:600px){.show-on-small{display:block!important}}@media only screen and (min-width:601px){.show-on-medium-and-up{display:block!important}}@media only screen and (max-width:992px){.show-on-medium-and-down{display:block!important}}.primary{background-color:#0000a8}.primary-text{color:#0000a8}.primary-border{border-color:#0000a8}.primary-hover:hover{background-color:#0000a8}.primary-text-hover:hover{color:#0000a8}.primary-border-hover:hover{border-color:#0000a8}.secondary{background-color:#a8a8a8}.secondary-text{color:#a8a8a8}.secondary-border{border-color:#a8a8a8}.secondary-hover:hover{background-color:#a8a8a8}.secondary-text-hover:hover{color:#a8a8a8}.secondary-border-hover:hover{border-color:#a8a8a8}.success{background-color:#00a800}.success-text{color:#00a800}.success-border{border-color:#00a800}.success-hover:hover{background-color:#00a800}.success-text-hover:hover{color:#00a800}.success-border-hover:hover{border-color:#00a800}.danger{background-color:#a80000}.danger-text{color:#a80000}.danger-border{border-color:#a80000}.danger-hover:hover{background-color:#a80000}.danger-text-hover:hover{color:#a80000}.danger-border-hover:hover{border-color:#a80000}.warning{background-color:#a8a800}.warning-text{color:#a8a800}.warning-border{border-color:#a8a800}.warning-hover:hover{background-color:#a8a800}.warning-text-hover:hover{color:#a8a800}.warning-border-hover:hover{border-color:#a8a800}.info{background-color:#00a8a8}.info-text{color:#00a8a8}.info-border{border-color:#00a8a8}.info-hover:hover{background-color:#00a8a8}.info-text-hover:hover{color:#00a8a8}.info-border-hover:hover{border-color:#00a8a8}.black-168{background-color:#000!important}.blue-168{background-color:#0000a8!important}.green-168{background-color:#00a800!important}.cyan-168{background-color:#00a8a8!important}.red-168{background-color:#a80000!important}.purple-168{background-color:#a800a8!important}.yellow-168{background-color:#a8a800!important}.white-168{background-color:#a8a8a8!important}.orange-168{background-color:#a85600!important}.black-168-text{color:#000!important}.blue-168-text{color:#0000a8!important}.green-168-text{color:#00a800!important}.cyan-168-text{color:#00a8a8!important}.red-168-text{color:#a80000!important}.purple-168-text{color:#a800a8!important}.yellow-168-text{color:#a8a800!important}.white-168-text{color:#a8a8a8!important}.orange-168-text{color:#a85600!important}.black-168-border{border-color:#000!important}.blue-168-border{border-color:#0000a8!important}.green-168-border{border-color:#00a800!important}.cyan-168-border{border-color:#00a8a8!important}.red-168-border{border-color:#a80000!important}.purple-168-border{border-color:#a800a8!important}.yellow-168-border{border-color:#a8a800!important}.white-168-border{border-color:#a8a8a8!important}.orange-168-border{border-color:#a85600!important}.black-168-hover:hover{background-color:#000!important}.blue-168-hover:hover{background-color:#0000a8!important}.green-168-hover:hover{background-color:#00a800!important}.cyan-168-hover:hover{background-color:#00a8a8!important}.red-168-hover:hover{background-color:#a80000!important}.purple-168-hover:hover{background-color:#a800a8!important}.yellow-168-hover:hover{background-color:#a8a800!important}.white-168-hover:hover{background-color:#a8a8a8!important}.orange-168-hover:hover{background-color:#a85600!important}.black-168-text-hover:hover{color:#000!important}.blue-168-text-hover:hover{color:#0000a8!important}.green-168-text-hover:hover{color:#00a800!important}.cyan-168-text-hover:hover{color:#00a8a8!important}.red-168-text-hover:hover{color:#a80000!important}.purple-168-text-hover:hover{color:#a800a8!important}.yellow-168-text-hover:hover{color:#a8a800!important}.white-168-text-hover:hover{color:#a8a8a8!important}.orange-168-text-hover:hover{color:#a85600!important}.black-168-border-hover:hover{border-color:#000!important}.blue-168-border-hover:hover{border-color:#0000a8!important}.green-168-border-hover:hover{border-color:#00a800!important}.cyan-168-border-hover:hover{border-color:#00a8a8!important}.red-168-border-hover:hover{border-color:#a80000!important}.purple-168-border-hover:hover{border-color:#a800a8!important}.yellow-168-border-hover:hover{border-color:#a8a800!important}.white-168-border-hover:hover{border-color:#a8a8a8!important}.orange-168-border-hover:hover{border-color:#a85600!important}.black-255{background-color:#000!important}.blue-255{background-color:#00f!important}.green-255{background-color:#0f0!important}.cyan-255{background-color:#0ff!important}.red-255{background-color:red!important}.purple-255{background-color:#ff00ff!important}.yellow-255{background-color:#ff0!important}.white-255{background-color:#fff!important}.orange-255{background-color:#ffa800!important}.black-255-text{color:#000!important}.blue-255-text{color:#00f!important}.green-255-text{color:#0f0!important}.cyan-255-text{color:#0ff!important}.red-255-text{color:red!important}.purple-255-text{color:#ff00ff!important}.yellow-255-text{color:#ff0!important}.white-255-text{color:#fff!important}.orange-255-text{color:#ffa800!important}.black-255-border{border-color:#000!important}.blue-255-border{border-color:#00f!important}.green-255-border{border-color:#0f0!important}.cyan-255-border{border-color:#0ff!important}.red-255-border{border-color:red!important}.purple-255-border{border-color:#ff00ff!important}.yellow-255-border{border-color:#ff0!important}.white-255-border{border-color:#fff!important}.orange-255-border{border-color:#ffa800!important}.black-255-hover:hover{background-color:#000!important}.blue-255-hover:hover{background-color:#00f!important}.green-255-hover:hover{background-color:#0f0!important}.cyan-255-hover:hover{background-color:#0ff!important}.red-255-hover:hover{background-color:red!important}.purple-255-hover:hover{background-color:#ff00ff!important}.yellow-255-hover:hover{background-color:#ff0!important}.white-255-hover:hover{background-color:#fff!important}.orange-255-hover:hover{background-color:#ffa800!important}.black-255-text-hover:hover{color:#000!important}.blue-255-text-hover:hover{color:#00f!important}.green-255-text-hover:hover{color:#0f0!important}.cyan-255-text-hover:hover{color:#0ff!important}.red-255-text-hover:hover{color:red!important}.purple-255-text-hover:hover{color:#ff00ff!important}.yellow-255-text-hover:hover{color:#ff0!important}.white-255-text-hover:hover{color:#fff!important}.orange-255-text-hover:hover{color:#ffa800!important}.black-255-border-hover:hover{border-color:#000!important}.blue-255-border-hover:hover{border-color:#00f!important}.green-255-border-hover:hover{border-color:#0f0!important}.cyan-255-border-hover:hover{border-color:#0ff!important}.red-255-border-hover:hover{border-color:red!important}.purple-255-border-hover:hover{border-color:#ff00ff!important}.yellow-255-border-hover:hover{border-color:#ff0!important}.white-255-border-hover:hover{border-color:#fff!important}.orange-255-border-hover:hover{border-color:#ffa800!important}.black{background-color:#000!important}.black-text{color:#000!important}.black-border{border-color:#000!important}.black-hover:hover{background-color:#000!important}.black-text-hover:hover{color:#000!important}.black-border-hover:hover{border-color:#000!important}.white{background-color:#fff!important}.white-text{color:#fff!important}.white-border{border-color:#fff!important}.white-hover:hover{background-color:#fff!important}.white-text-hover:hover{color:#fff!important}.white-border-hover:hover{border-color:#fff!important}.left{float:left!important}.right{float:right!important}.center{text-align:center}.left-align{text-align:left}.right-align{text-align:right}.center-align{text-align:center}.full-width{width:100%!important}.full-height{height:100%!important}.inline{display:inline!important}.inline-block{display:inline-block!important}.block{display:block!important}.valign-top{vertical-align:top!important}.valign-middle{vertical-align:middle!important}.valign-bottom{vertical-align:bottom!important}.fixed{position:fixed!important}.absolute{position:absolute!important}.relative{position:relative!important}.static{position:static!important}.no-shadow{box-shadow:none!important}.no-padding{padding:0!important}.no-border{border:none!important}.content{padding:12px}.disable-select{user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.cursor-pointer{cursor:pointer!important}.cursor-default{cursor:default!important}.disabled{cursor:not-allowed!important}.tui-button{display:inline-block;outline:0;padding:1px 10px;background-color:#00a800;color:#000;border:none;cursor:pointer;text-align:center;box-shadow:10px 10px #000;border-radius:0;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-button.disabled{text-decoration:line-through}.tui-button:active{background-color:#00a8a8!important;color:#000!important;box-shadow:none!important}.tui-button:focus{color:#0ff!important}input[type=button]{width:initial}.tui-checkbox{display:block;position:relative;cursor:pointer;color:#fff;padding-left:30px;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-checkbox.disabled{color:#a8a8a8}.tui-checkbox input{position:absolute;opacity:0;cursor:pointer;top:0;left:0;pointer-events:none}.tui-checkbox span{position:absolute;width:10px;height:10px;cursor:pointer;top:0;left:0}.tui-checkbox input:checked~span::after{content:"[√]";color:#0ff}.tui-checkbox input:not(checked)~span::after{content:"[ ]"}.tui-divider{border-bottom:2px solid #fff;display:block}.tui-black-divider{border-bottom:2px solid #000;display:block}.tui-dropdown{position:relative;display:inline-block;cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-dropdown-content{display:none;position:absolute;background-color:#a8a8a8;min-width:200px;padding:6px;z-index:9}.tui-dropdown-content ul{border:2px #000 solid}.tui-dropdown-content ul li{display:block!important;margin:6px}.tui-dropdown-content ul li a:hover{background-color:#00a800}.tui-dropdown:hover>.tui-dropdown-content:first-of-type{display:block}.tui-fieldset{border:6px #fff double;padding:12px;background-color:inherit;margin-bottom:6px}.tui-fieldset.no-legend{margin-top:6px}.tui-input-fieldset{border-top:6px #fff double;border-bottom:6px #fff double;border-left:2px #fff solid;border-right:2px #fff solid;padding:5px;background-color:inherit}.tui-input-fieldset legend{color:#fff}.tui-input-fieldset:hover{border-color:#ff0}.tui-input-fieldset:hover legend{color:#ff0}.tui-fieldset-button{position:absolute;top:0;right:16px;color:#fff;background-color:inherit;z-index:2;border:none;cursor:pointer;outline:0;padding:2px;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-fieldset-button.left{right:initial;left:16px!important}.tui-fieldset-button.bottom{bottom:0;top:initial}.tui-fieldset-text{position:absolute;bottom:0;left:16px;color:#fff;background-color:inherit;z-index:2;padding:2px}.tui-fieldset-text.right{left:initial;right:16px}.tui-fieldset-text.top{top:0;bottom:initial}.tui-fieldset-button::before{content:"["}.tui-fieldset-button::after{content:"]"}.tui-fieldset-button:active{color:#0ff!important}.tui-input{background-color:#000;color:#fff;outline:0;border:none;border-radius:0}.tui-input.disabled{background-color:#a8a8a8;color:#000}.tui-input:focus{background-color:#ff0!important;color:#000!important}.tui-nav{width:100%;background-color:#a8a8a8;padding:0 2px;z-index:9;display:block;position:fixed}.tui-nav ul li{display:inline-block;margin-left:10px;padding:1px 3px}.tui-nav ul li a{display:block;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-nav ul li:hover{background-color:#00a800}.tui-panel{background-color:#0000a8;display:inline-block;color:#fff;box-shadow:10px 10px #000}.tui-panel-content{padding:12px}.tui-panel-header{padding-top:2px;display:block;background:#fff;text-align:center}.tui-progress-bar{display:block;position:relative;height:20px;width:200px;background-color:#00a8a8;overflow:hidden}.tui-progress{position:absolute;left:0;background-color:#0ff;height:100%;display:inline-block}.tui-progress-bar .tui-indeterminate{position:absolute;left:0;background-color:#0ff;height:20px;width:20px;display:inline-block;animation:indeterminate 1s backwards;animation-iteration-count:infinite;animation-timing-function:linear}.tui-progress-label{position:absolute;top:50%;left:50%;transform:translateX(-50%) translateY(-50%);z-index:1}@keyframes indeterminate{from{margin-left:-10%}to{margin-left:100%}}.tui-radio{display:block;position:relative;cursor:pointer;color:#fff;padding-left:30px;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-radio.disabled{color:#a8a8a8}.tui-radio input{position:absolute;opacity:0;cursor:pointer;top:0;left:0;pointer-events:none}.tui-radio span{position:absolute;width:10px;height:10px;cursor:pointer;top:0;left:0}.tui-radio input:checked~span:after{content:"(•)";color:#0ff!important}.tui-radio input:not(checked)~span:after{content:"( )"}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background-image:url(images/scroll-cyan.png);background-repeat:repeat}::-webkit-scrollbar-thumb{background-color:#00a8a8}::-webkit-scrollbar-thumb:hover{background-color:#00a8a8}.tui-scroll-blue ::-webkit-scrollbar-track{background-image:url(images/scroll-blue.png)}.tui-scroll-blue ::-webkit-scrollbar-thumb{background-color:#0000a8}.tui-scroll-blue ::-webkit-scrollbar-thumb:hover{background-color:#0000a8}.tui-scroll-green ::-webkit-scrollbar-track{background-image:url(images/scroll-green.png)}.tui-scroll-green ::-webkit-scrollbar-thumb{background-color:#00a800}.tui-scroll-green ::-webkit-scrollbar-thumb:hover{background-color:#00a800}.tui-scroll-cyan ::-webkit-scrollbar-track{background-image:url(images/scroll-cyan.png)}.tui-scroll-cyan ::-webkit-scrollbar-thumb{background-color:#00a8a8}.tui-scroll-cyan ::-webkit-scrollbar-thumb:hover{background-color:#00a8a8}.tui-scroll-red ::-webkit-scrollbar-track{background-image:url(images/scroll-red.png)}.tui-scroll-red ::-webkit-scrollbar-thumb{background-color:#a80000}.tui-scroll-red ::-webkit-scrollbar-thumb:hover{background-color:#a80000}.tui-scroll-purple ::-webkit-scrollbar-track{background-image:url(images/scroll-purple.png)}.tui-scroll-purple ::-webkit-scrollbar-thumb{background-color:#a800a8}.tui-scroll-purple ::-webkit-scrollbar-thumb:hover{background-color:#a800a8}.tui-scroll-yellow ::-webkit-scrollbar-track{background-image:url(images/scroll-yellow.png)}.tui-scroll-yellow ::-webkit-scrollbar-thumb{background-color:#a8a800}.tui-scroll-yellow ::-webkit-scrollbar-thumb:hover{background-color:#a8a800}.tui-scroll-white ::-webkit-scrollbar-track{background-image:url(images/scroll-white.png)}.tui-scroll-white ::-webkit-scrollbar-thumb{background-color:#a8a8a8}.tui-scroll-white ::-webkit-scrollbar-thumb:hover{background-color:#a8a8a8}.tui-sidenav{position:fixed;top:0;left:0;background-color:#00a8a8;min-width:200px;box-shadow:10px 10px #000!important;padding:6px;z-index:10;height:100%;z-index:8;display:none}.tui-sidenav.right{left:initial;right:0}.tui-sidenav.active{display:block!important}.tui-sidenav ul{margin-top:20px;border:2px #000 solid}.tui-sidenav ul li{display:block;margin:6px}.tui-sidenav ul li a{display:block;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-sidenav ul li:hover{background-color:#ff0}.tui-sidenav-button{cursor:pointer;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-statusbar{width:100%;background-color:#a8a8a8;padding:0 1px;left:0;bottom:0;z-index:9;position:fixed}.tui-statusbar ul li{display:inline-block;margin-left:10px;padding:2px 3px}.tui-statusbar ul li:active{background-color:#0000a8;color:#fff}.tui-statusbar ul li a{user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-statusbar-divider{border-right:2px #000 solid;display:inline;margin:0 3px}.tui-table{border:2px solid #a8a8a8;padding:5px;border-collapse:collapse}.tui-table.hovered-blue tbody tr:hover{background-color:#00f!important;color:#000}.tui-table.hovered-green tbody tr:hover{background-color:#0f0!important;color:#000}.tui-table.hovered-cyan tbody tr:hover{background-color:#0ff!important;color:#000}.tui-table.hovered-red tbody tr:hover{background-color:red!important;color:#fff}.tui-table.hovered-purple tbody tr:hover{background-color:#ff00ff!important;color:#fff}.tui-table.hovered-yellow tbody tr:hover{background-color:#ff0!important;color:#000}.tui-table.hovered-white tbody tr:hover{background-color:#fff!important;color:#000}.tui-table.hovered-orange tbody tr:hover{background-color:#ffa800!important;color:#000}.tui-table.hovered tbody tr:hover{background-color:#0ff!important;color:#000}.tui-table.striped-blue tbody tr:nth-child(even){background-color:#0000a8}.tui-table.striped-green tbody tr:nth-child(even){background-color:#00a800}.tui-table.striped-cyan tbody tr:nth-child(even){background-color:#00a8a8}.tui-table.striped-red tbody tr:nth-child(even){background-color:#a80000}.tui-table.striped-purple tbody tr:nth-child(even){background-color:#a800a8}.tui-table.striped-yellow tbody tr:nth-child(even){background-color:#a8a800}.tui-table.striped-white tbody tr:nth-child(even){background-color:#a8a8a8;color:#000}.tui-table.striped-orange tbody tr:nth-child(even){background-color:#a85600}.tui-table tbody{background-color:inherit;color:#fff}.tui-table tbody tr td{border-right:2px solid #a8a8a8;padding:0 2px}.tui-table thead{background-color:inherit;color:#ff0;text-align:center}.tui-table tfoot{background-color:inherit;color:#ff0;text-align:center}.tui-table-grid{border-collapse:collapse;width:100%}.tui-table-grid tbody tr td,.tui-table-grid tbody tr th,.tui-table-grid thead tr td,.tui-table-grid thead tr th{border:2px solid #000;padding:10px;vertical-align:top}.tui-tabs{background-color:#0000a8;width:100%;padding:0 10px 0 10px}.tui-tabs ul li{display:inline-block}.tui-tabs ul li a{display:block;user-select:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none}.tui-tab{padding:2px 10px 0 10px;color:#a8a8a8;cursor:pointer}.tui-tab.active{background-color:#a8a8a8;color:#0000a8}.tui-tab.disabled{text-decoration:line-through}.tui-tab-content{display:none}.tui-textarea{background-color:inherit;border:none;padding:0;color:#ff0;outline:0}.tui-textarea.disabled{background-color:#a8a8a8;color:#000}.tui-window{background-color:#0000a8;padding:1px;display:inline-block;position:relative;box-shadow:10px 10px #000;color:#fff}.tui-screen-640-480{width:640px;height:480px}.tui-screen-800-600{width:800px;height:600px}.tui-screen-1024-768{width:1024px;height:768px}.tui-screen-1024-768,.tui-screen-640-480,.tui-screen-800-600{position:relative;overflow:hidden}.tui-screen-1024-768.bordered,.tui-screen-640-480.bordered,.tui-screen-800-600.bordered{border:2px solid #000}.tui-screen-1024-768.centered,.tui-screen-640-480.centered,.tui-screen-800-600.centered{margin:auto;margin-top:20px}.tui-datetime{padding:1px 0 1px 0;margin-right:10px;float:right}.tui-shortcut{float:right}.tui-shadow,.tui-shadow-1{box-shadow:10px 10px #000!important}.tui-shadow-2{box-shadow:15px 15px #000}.tui-shadow-3{box-shadow:20px 20px #000}.tui-shadow-4{box-shadow:25px 25px #000}.tui-shadow-5{box-shadow:30px 30px #000}.tui-shadow-left,.tui-shadow-left-1{box-shadow:-10px 10px #000!important}.tui-shadow-left-2{box-shadow:-15px 15px #000!important}.tui-shadow-left-3{box-shadow:-20px 20px #000!important}.tui-shadow-left-4{box-shadow:-25px 25px #000!important}.tui-shadow-left-5{box-shadow:-30px 30px #000!important}.tui-no-shadow{box-shadow:none!important}.tui-bg-blue-white{background-image:url(images/bg-blue-white.png);background-repeat:repeat}.tui-bg-blue-black{background-image:url(images/bg-blue-black.png);background-repeat:repeat}.tui-bg-green-white{background-image:url(images/bg-green-white.png);background-repeat:repeat}.tui-bg-green-black{background-image:url(images/bg-green-black.png);background-repeat:repeat}.tui-bg-cyan-white{background-image:url(images/bg-cyan-white.png);background-repeat:repeat}.tui-bg-cyan-black{background-image:url(images/bg-cyan-black.png);background-repeat:repeat}.tui-bg-red-white{background-image:url(images/bg-red-white.png);background-repeat:repeat}.tui-bg-red-black{background-image:url(images/bg-red-black.png);background-repeat:repeat}.tui-bg-purple-white{background-image:url(images/bg-purple-white.png);background-repeat:repeat}.tui-bg-purple-black{background-image:url(images/bg-purple-black.png);background-repeat:repeat}.tui-bg-yellow-white{background-image:url(images/bg-yellow-white.png);background-repeat:repeat}.tui-bg-yellow-black{background-image:url(images/bg-yellow-black.png);background-repeat:repeat}.tui-bg-orange-white{background-image:url(images/bg-orange-white.png);background-repeat:repeat}.tui-bg-orange-black{background-image:url(images/bg-orange-black.png);background-repeat:repeat}.tui-border-solid{border-style:solid!important;border-width:2px!important}.tui-border-dashed{border-style:dashed!important;border-width:2px!important}.tui-border-dotted{border-style:dotted!important;border-width:2px!important}.tui-border-double{border-style:double!important;border-width:6px!important}.container{margin:0 auto;max-width:1280px;width:90%}@media only screen and (min-width:601px){.container{width:85%}}@media only screen and (min-width:993px){.container{width:70%}}.col .row{margin-left:-.75rem;margin-right:-.75rem}.section{padding-top:1rem;padding-bottom:1rem}.section.no-pad{padding:0}.section.no-pad-bot{padding-bottom:0}.section.no-pad-top{padding-top:0}.row{margin-left:auto;margin-right:auto;margin-bottom:20px}.row:after{content:"";display:table;clear:both}.row .col{float:left;box-sizing:border-box;padding:0 .75rem;min-height:1px}.row .col[class*=pull-],.row .col[class*=push-]{position:relative}.row .col.s1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.s2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.s3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.s4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.s5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.s6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.s7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.s8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.s9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.s10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.s11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.s12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-s1{margin-left:8.33333%}.row .col.pull-s1{right:8.33333%}.row .col.push-s1{left:8.33333%}.row .col.offset-s2{margin-left:16.66667%}.row .col.pull-s2{right:16.66667%}.row .col.push-s2{left:16.66667%}.row .col.offset-s3{margin-left:25%}.row .col.pull-s3{right:25%}.row .col.push-s3{left:25%}.row .col.offset-s4{margin-left:33.33333%}.row .col.pull-s4{right:33.33333%}.row .col.push-s4{left:33.33333%}.row .col.offset-s5{margin-left:41.66667%}.row .col.pull-s5{right:41.66667%}.row .col.push-s5{left:41.66667%}.row .col.offset-s6{margin-left:50%}.row .col.pull-s6{right:50%}.row .col.push-s6{left:50%}.row .col.offset-s7{margin-left:58.33333%}.row .col.pull-s7{right:58.33333%}.row .col.push-s7{left:58.33333%}.row .col.offset-s8{margin-left:66.66667%}.row .col.pull-s8{right:66.66667%}.row .col.push-s8{left:66.66667%}.row .col.offset-s9{margin-left:75%}.row .col.pull-s9{right:75%}.row .col.push-s9{left:75%}.row .col.offset-s10{margin-left:83.33333%}.row .col.pull-s10{right:83.33333%}.row .col.push-s10{left:83.33333%}.row .col.offset-s11{margin-left:91.66667%}.row .col.pull-s11{right:91.66667%}.row .col.push-s11{left:91.66667%}.row .col.offset-s12{margin-left:100%}.row .col.pull-s12{right:100%}.row .col.push-s12{left:100%}@media only screen and (min-width:601px){.row .col.m1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.m2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.m3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.m4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.m5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.m6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.m7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.m8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.m9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.m10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.m11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.m12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-m1{margin-left:8.33333%}.row .col.pull-m1{right:8.33333%}.row .col.push-m1{left:8.33333%}.row .col.offset-m2{margin-left:16.66667%}.row .col.pull-m2{right:16.66667%}.row .col.push-m2{left:16.66667%}.row .col.offset-m3{margin-left:25%}.row .col.pull-m3{right:25%}.row .col.push-m3{left:25%}.row .col.offset-m4{margin-left:33.33333%}.row .col.pull-m4{right:33.33333%}.row .col.push-m4{left:33.33333%}.row .col.offset-m5{margin-left:41.66667%}.row .col.pull-m5{right:41.66667%}.row .col.push-m5{left:41.66667%}.row .col.offset-m6{margin-left:50%}.row .col.pull-m6{right:50%}.row .col.push-m6{left:50%}.row .col.offset-m7{margin-left:58.33333%}.row .col.pull-m7{right:58.33333%}.row .col.push-m7{left:58.33333%}.row .col.offset-m8{margin-left:66.66667%}.row .col.pull-m8{right:66.66667%}.row .col.push-m8{left:66.66667%}.row .col.offset-m9{margin-left:75%}.row .col.pull-m9{right:75%}.row .col.push-m9{left:75%}.row .col.offset-m10{margin-left:83.33333%}.row .col.pull-m10{right:83.33333%}.row .col.push-m10{left:83.33333%}.row .col.offset-m11{margin-left:91.66667%}.row .col.pull-m11{right:91.66667%}.row .col.push-m11{left:91.66667%}.row .col.offset-m12{margin-left:100%}.row .col.pull-m12{right:100%}.row .col.push-m12{left:100%}}@media only screen and (min-width:993px){.row .col.l1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.l2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.l3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.l4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.l5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.l6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.l7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.l8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.l9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.l10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.l11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.l12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-l1{margin-left:8.33333%}.row .col.pull-l1{right:8.33333%}.row .col.push-l1{left:8.33333%}.row .col.offset-l2{margin-left:16.66667%}.row .col.pull-l2{right:16.66667%}.row .col.push-l2{left:16.66667%}.row .col.offset-l3{margin-left:25%}.row .col.pull-l3{right:25%}.row .col.push-l3{left:25%}.row .col.offset-l4{margin-left:33.33333%}.row .col.pull-l4{right:33.33333%}.row .col.push-l4{left:33.33333%}.row .col.offset-l5{margin-left:41.66667%}.row .col.pull-l5{right:41.66667%}.row .col.push-l5{left:41.66667%}.row .col.offset-l6{margin-left:50%}.row .col.pull-l6{right:50%}.row .col.push-l6{left:50%}.row .col.offset-l7{margin-left:58.33333%}.row .col.pull-l7{right:58.33333%}.row .col.push-l7{left:58.33333%}.row .col.offset-l8{margin-left:66.66667%}.row .col.pull-l8{right:66.66667%}.row .col.push-l8{left:66.66667%}.row .col.offset-l9{margin-left:75%}.row .col.pull-l9{right:75%}.row .col.push-l9{left:75%}.row .col.offset-l10{margin-left:83.33333%}.row .col.pull-l10{right:83.33333%}.row .col.push-l10{left:83.33333%}.row .col.offset-l11{margin-left:91.66667%}.row .col.pull-l11{right:91.66667%}.row .col.push-l11{left:91.66667%}.row .col.offset-l12{margin-left:100%}.row .col.pull-l12{right:100%}.row .col.push-l12{left:100%}}@media only screen and (min-width:1201px){.row .col.xl1{width:8.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl2{width:16.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl3{width:25%;margin-left:auto;left:auto;right:auto}.row .col.xl4{width:33.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl5{width:41.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl6{width:50%;margin-left:auto;left:auto;right:auto}.row .col.xl7{width:58.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl8{width:66.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl9{width:75%;margin-left:auto;left:auto;right:auto}.row .col.xl10{width:83.33333%;margin-left:auto;left:auto;right:auto}.row .col.xl11{width:91.66667%;margin-left:auto;left:auto;right:auto}.row .col.xl12{width:100%;margin-left:auto;left:auto;right:auto}.row .col.offset-xl1{margin-left:8.33333%}.row .col.pull-xl1{right:8.33333%}.row .col.push-xl1{left:8.33333%}.row .col.offset-xl2{margin-left:16.66667%}.row .col.pull-xl2{right:16.66667%}.row .col.push-xl2{left:16.66667%}.row .col.offset-xl3{margin-left:25%}.row .col.pull-xl3{right:25%}.row .col.push-xl3{left:25%}.row .col.offset-xl4{margin-left:33.33333%}.row .col.pull-xl4{right:33.33333%}.row .col.push-xl4{left:33.33333%}.row .col.offset-xl5{margin-left:41.66667%}.row .col.pull-xl5{right:41.66667%}.row .col.push-xl5{left:41.66667%}.row .col.offset-xl6{margin-left:50%}.row .col.pull-xl6{right:50%}.row .col.push-xl6{left:50%}.row .col.offset-xl7{margin-left:58.33333%}.row .col.pull-xl7{right:58.33333%}.row .col.push-xl7{left:58.33333%}.row .col.offset-xl8{margin-left:66.66667%}.row .col.pull-xl8{right:66.66667%}.row .col.push-xl8{left:66.66667%}.row .col.offset-xl9{margin-left:75%}.row .col.pull-xl9{right:75%}.row .col.push-xl9{left:75%}.row .col.offset-xl10{margin-left:83.33333%}.row .col.pull-xl10{right:83.33333%}.row .col.push-xl10{left:83.33333%}.row .col.offset-xl11{margin-left:91.66667%}.row .col.pull-xl11{right:91.66667%}.row .col.push-xl11{left:91.66667%}.row .col.offset-xl12{margin-left:100%}.row .col.pull-xl12{right:100%}.row .col.push-xl12{left:100%}}.tui-modal{position:absolute;left:0;right:0;top:100px;z-index:101;display:none}.tui-modal.active{display:block!important}.tui-overlap{position:absolute;top:0;left:0;right:0;bottom:0;z-index:100;display:none}.tui-overlap.active{display:block!important}.tui-chart-vertical{position:relative;background-color:#000}.tui-chart-horizontal{position:relative;background-color:#000}.tui-chart-vertical .tui-chart-display{display:flex;position:absolute;top:0;left:50px;right:0;bottom:30px;align-items:flex-end;border-bottom:2px solid #fff;border-left:2px solid #fff}.tui-chart-vertical .tui-chart-display.no-x-axis{bottom:0}.tui-chart-vertical .tui-chart-display.no-y-axis{left:0}.tui-chart-horizontal .tui-chart-display{display:flex;position:absolute;flex-direction:column;top:0;left:50px;right:0;bottom:30px;align-items:stretch;border-bottom:2px solid #fff;border-left:2px solid #fff}.tui-chart-horizontal .tui-chart-display.no-x-axis{bottom:0}.tui-chart-horizontal .tui-chart-display.no-y-axis{left:0}.tui-chart-x-axis{display:flex;position:absolute;height:30px;left:50px;right:0;bottom:0;line-height:30px}.tui-chart-y-axis{display:flex;flex-direction:column;position:absolute;top:0;left:0;bottom:30px;width:50px}.tui-chart-vertical .tui-chart-x-axis .tui-chart-legend{flex:0 1 100%;text-align:center}.tui-chart-vertical .tui-chart-y-axis .tui-chart-legend{flex:1;text-align:right;padding-right:2px;display:flex;align-items:flex-start;justify-content:flex-end}.tui-chart-horizontal .tui-chart-x-axis .tui-chart-legend{flex:0 1 100%;text-align:right}.tui-chart-horizontal .tui-chart-y-axis .tui-chart-legend{flex:1;text-align:right;padding-right:2px;display:flex;align-items:center;justify-content:flex-end}.tui-chart-vertical .tui-chart-display .tui-chart-value{flex:0 1 100%;text-align:center;overflow:hidden}.tui-chart-horizontal .tui-chart-display .tui-chart-value{flex:1;text-align:right;display:flex;align-items:center;align-content:flex-start;justify-content:flex-end;overflow:hidden}
\ No newline at end of file
diff --git a/webroot/view/asset/tuicss/tuicss.min.js b/webroot/view/asset/tuicss/tuicss.min.js
new file mode 100644 (file)
index 0000000..fc2d930
--- /dev/null
@@ -0,0 +1 @@
+function domReady(t){document.addEventListener("DOMContentLoaded",t),"interactive"!==document.readyState&&"complete"!==document.readyState||t()}function tabsController(){const t=document.getElementsByClassName("tui-tab");if(!t.length)return;for(const e of t)e.addEventListener("click",function(e){if(e.target.classList.contains("disabled"))return;for(const e of t)e.classList.remove("active");const o=document.getElementsByClassName("tui-tab-content");if(!o)throw"No tab content elements found.";for(const t of o)t.style.display="none";const n=e.target.getAttribute("data-tab-content");if(n){const t=document.getElementById(n);if(!t)throw'No tab content element with id "'+n+'" found.';t.style.display="block"}e.target.classList.add("active")});const e=document.querySelector(".tui-tab.active");e?e.click():t[0].click()}function datetimeController(){const t=document.getElementsByClassName("tui-datetime");function e(){for(const e of t){if(null===e)continue;let t=e.getAttribute("data-format");const o=new Date,n=2===(o.getMonth()+"").length?o.getMonth()+1:"0"+(o.getMonth()+1),a=2===(o.getDay()+"").length?o.getDay()+1:"0"+(o.getDay()+1),s=o.getFullYear()+"",c=2===(o.getHours()+"").length?o.getHours():"0"+o.getHours(),l=(parseInt(c)+24)%"12"||"12",i=2===(o.getMinutes()+"").length?o.getMinutes():"0"+o.getMinutes(),d=2===(o.getSeconds()+"").length?o.getSeconds():"0"+o.getSeconds(),r=parseInt(c)>=12?"PM":"AM";t=(t=(t=(t=(t=(t=(t=(t=t.replace("M",n)).replace("d",a)).replace("y",s)).replace("H",c)).replace("h",l)).replace("m",i)).replace("s",d)).replace("a",r),e.innerHTML=t}}t.length&&(e(),setTimeout(()=>{setInterval(e,1e3)},1e3-(new Date).getMilliseconds()))}function sidenavController(){const t=document.querySelector(".tui-sidenav-button");t&&t.addEventListener("click",()=>{const t=document.querySelector(".tui-sidenav");if(!t)throw"No sidenav element found.";t.classList.contains("active")?t.classList.remove("active"):t.classList.add("active")})}function modalController(){const t=document.querySelector(".tui-overlap");if(!t)return;const e=document.getElementsByClassName("tui-modal-button");for(const o of e)o.addEventListener("click",e=>{t.classList.add("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.add("active")}});const o=document.getElementsByClassName("tui-modal-close-button");if(e.length>0&&!o.length)throw"No modal close buttons found.";for(const e of o)e.addEventListener("click",e=>{t.classList.remove("active");const o=e.target.getAttribute("data-modal");if(!o)throw"Modal close button data-modal attribute is empty or not set.";{const t=document.getElementById(o);if(!t)throw'No modal element with id of "'+o+'" found.';t.classList.remove("active")}})}domReady(function(){tabsController(),datetimeController(),sidenavController(),modalController()});
\ No newline at end of file
diff --git a/webroot/view/entry/entry.html b/webroot/view/entry/entry.html
new file mode 100644 (file)
index 0000000..c2a18ef
--- /dev/null
@@ -0,0 +1,62 @@
+<form>
+    <div class="form-row">
+        <label for="date">Date</label>
+        <input name="fdata[date]" id="date" class="tui-input" type="date" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'date'); ?>" />
+    </div>
+    <div class="form-row">
+        <label for="market">Market</label>
+        <input name="fdata[market]" id="market" class="tui-input" type="text" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'market'); ?>" />
+    </div>
+    <div class="form-row">
+        <label for="product">Product</label>
+        <input name="fdata[product]" id="product" class="tui-input" type="text" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'product'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="manufacturer">Manufacturer</label>
+        <input name="fdata[manufacturer]" id="manufacturer" class="tui-input" type="text" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'manufacturer'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="amount">Amount</label>
+        <input name="fdata[amount]" id="amount" class="tui-input" type="number" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'amount'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="weight">Weight(g)</label>
+        <input name="fdata[weight]" id="weight" class="tui-input" type="number" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'weight'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="itemcount">Itemcount</label>
+        <input name="fdata[itemcount]" id="itemcount" class="tui-input" type="number" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'itemcount'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="price">Price</label>
+        <input name="fdata[price]" id="price" class="tui-input" type="number" autocomplete="off"
+               value="<?php echo Summoner::ifset($TemplateData['editData'], 'price'); ?>"/>
+    </div>
+    <div class="form-row">
+        <label for="list">List</label>
+        <select name="fdata[list]" id="list" class="tui-input">
+            <option value="">None</option>
+            <?php
+                if(Summoner::ifset($TemplateData['editData'], 'list')) {
+                    foreach($TemplateData['editData']['list'] as $k=>$v) { ?>
+                    <option value="<?php echo $v; ?>"
+                <?php if(Summoner::ifsetValue($TemplateData['editData'], 'list', $v)) echo 'selected'; ?>
+                ><?php echo $v; ?></option>
+            <?php
+                    }
+                }
+            ?>
+        </select>
+    </div>
+
+    <div class="form-row">
+        <input type="submit" class="tui-button" value="Save" name="submitForm" />
+    </div>
+</form>
diff --git a/webroot/view/entry/entry.php b/webroot/view/entry/entry.php
new file mode 100644 (file)
index 0000000..8dbd66d
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+require_once 'lib/item.class.php';
+$Item = new Item($DB);
+
+$_id = false;
+if(isset($_GET['id']) && !empty($_GET['id'])) {
+    $_id = trim($_GET['id']);
+    $_id = Summoner::validate($_id,'nospace') ? $_id : false;
+}
+
+$TemplateData['pageTitle'] = 'New';
+if(!empty($_id)) {
+    $TemplateData['pageTitle'] = 'Edit item';
+}
+
+$TemplateData['editData'] = array();
+
+$TemplateData['message']['content'] = "Collection could not be loaded.";
+$TemplateData['message']['status'] = "error";
+
+if(isset($_POST['fdata']) && !empty($_POST['fdata']) && isset($_POST['submitForm'])) {
+    $fdata = $_POST['fdata'];
+    if (!empty($fdata)) {
+
+    } else {
+        $TemplateData['message']['content'] = "Collection could not be loaded.";
+        $TemplateData['message']['status'] = "error";
+    }
+}
\ No newline at end of file
diff --git a/webroot/view/home/home.html b/webroot/view/home/home.html
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/webroot/view/home/home.php b/webroot/view/home/home.php
new file mode 100644 (file)
index 0000000..d7f9186
--- /dev/null
@@ -0,0 +1,2 @@
+<?php
+$TemplateData['pageTitle'] = 'Home';
\ No newline at end of file
diff --git a/webroot/view/main.php b/webroot/view/main.php
deleted file mode 100644 (file)
index e69de29..0000000