]> Git [git.vados.ru] :: Repos - Mikrotiks/ros.vados.ru.git/commitdiff
Autocommit in repo: ros.vados.ru, generated by owner: root, in 02:05:35 12.03.2026.
authorvados-dev <192440777+vados-dev@users.noreply.github.com>
Wed, 11 Mar 2026 23:05:36 +0000 (02:05 +0300)
committervados-dev <192440777+vados-dev@users.noreply.github.com>
Wed, 11 Mar 2026 23:05:36 +0000 (02:05 +0300)
15 files changed:
Makefile
bin/check_repo.sh
bin/test.sh [new file with mode: 0755]
html/.tmpl/404.html [new file with mode: 0644]
html/.tmpl/40x.html [new file with mode: 0644]
html/.tmpl/50x.html [new file with mode: 0644]
html/.tmpl/bot.html [new file with mode: 0644]
html/.tmpl/foot.html [new file with mode: 0644]
html/.tmpl/head.html [new file with mode: 0644]
html/.tmpl/index.html [new file with mode: 0644]
html/.tmpl/md_tmpl.html [new file with mode: 0644]
html/.tmpl/top.html [new file with mode: 0644]
html/AM-GlobalFunc.rsc
html/logo/index.html [new file with mode: 0644]
html/logo/notification.html [new file with mode: 0644]

index e2238220d25faa5729bafabff33f5734c4507a7c..31a0d81d2baede30627758eb3107c189467c9558 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -37,11 +37,19 @@ export BUILD_DIR REPO_DIR ALL_RSC GLOB_RSC
 
 .DEFAULT_GOAL := run
 
-.PHONY: run check notify test
-#checksums $(commitinfo.sh)
+.PHONY: run check notify checksums $(commitinfo.sh) test
 
 run: check
-#      @echo "[run] start main flow"
+       @echo "[run] exit 0, go to checksums..."
+       @$(MAKE) checksums
+       @echo "[run] checksums.sh exit 0. Go to commitinfo.sh..."
+       @$(MAKE) $(commitinfo.sh)
+       @echo "[run] commitinfo.sh exit 0. Go to repo add, commit and push..."
+       cd $(BUILD_DIR)
+       ls -la .
+       git add .
+       git commit -am '$(COMM_INFO)'
+       git push
        @echo "[run] done"
 
 check:
@@ -53,11 +61,11 @@ notify:
 checksums: checksums.json
 
 checksums.json: bin/checksums.sh $(ALL_RSC)
-               bin/checksums.sh > html/tmp/checksums.json
+       bin/checksums.sh > html/tmp/$@
 
 $(commitinfo.sh): $(GLOB_RSC)
-               $(commitinfo.sh) $< > $<~
-               mv $<~ $<
+       $(commitinfo.sh) $< > $<~
+       mv $<~ $<
 
 test:
        @bash -n bin/check_repo.sh
index 44a443ef36b03d86b4fc14e31f563f1c90ce94e5..65a1ee158b45e0a0bff05fa47e255cb4949916c5 100755 (executable)
@@ -6,25 +6,16 @@ dirty="$(git status --porcelain || true)"
 diff="$(git diff --quiet && git diff --cached --quiet || true)"
 lsfiles="$(git ls-files --others --exclude-standard || true)"
 
-if [[ -n "$diff" && -z "$lsfiles" ]]; then
-    echo "[check] repo diff, go to proclean check."
+if [[ -n "$diff" && -n "$lsfiles" ]]; then
+    echo "[check_repo] repo diff, go to proclean check."
     if [[ -n "$dirty" ]]; then
-        echo "[check] repo dirty, stop"
+        echo "[check_repo] repo dirty, stop"
         bash scripts/notify_telegram.sh "STOP: repo dirty in $(pwd)"
         exit 1
     else
-        echo "[check] repo clean"
+        echo "[check_repo] repo clean"
     fi
 else
-    echo "[check] not clean. Go to autocommit him."
-    if [[ -z "$lsfiles" ]]; then
-        echo "[check] Git add..."
-        git add .
-        git commit -m "${COMM_INFO}"
-    else
-        echo "[check] Git -v branch..."
-        git -v brnch
-        git commit -am "${COMM_INFO}"
-    fi
-    git push
+    echo "[check_repo] not clean. Exit 0 from check_repo.sh."
+    exit 0
 fi
diff --git a/bin/test.sh b/bin/test.sh
new file mode 100755 (executable)
index 0000000..105e3a2
--- /dev/null
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+
+cd "${REPO_DIR:-.}"
+
+dirty="$(git status --porcelain || true)"
+diff="$(git diff --quiet && git diff --cached --quiet || true)"
+lsfiles="$(git ls-files --others --exclude-standard || true)"
+
+if [[ -n "$lsfiles" ]]; then
+    echo "[check] Git add..."
+fi
diff --git a/html/.tmpl/404.html b/html/.tmpl/404.html
new file mode 100644 (file)
index 0000000..a072764
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Error 404</title>
+<style>
+html { color-scheme: light dark; }
+body { width: 35em; margin: 0 auto;
+font-family: Tahoma, Verdana, Arial, sans-serif; }
+</style>
+</head>
+<body>
+<h1>An error occurred. 404</h1>
+<p>Sorry, the page you are looking for is currently unavailable.<br/>
+Please try again later.</p>
+<p>If you are the system administrator of this resource then you should check
+the error log for details.</p>
+<p><em>Faithfully yours, nginx.</em></p>
+</body>
+</html>
diff --git a/html/.tmpl/40x.html b/html/.tmpl/40x.html
new file mode 100644 (file)
index 0000000..a072764
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Error 404</title>
+<style>
+html { color-scheme: light dark; }
+body { width: 35em; margin: 0 auto;
+font-family: Tahoma, Verdana, Arial, sans-serif; }
+</style>
+</head>
+<body>
+<h1>An error occurred. 404</h1>
+<p>Sorry, the page you are looking for is currently unavailable.<br/>
+Please try again later.</p>
+<p>If you are the system administrator of this resource then you should check
+the error log for details.</p>
+<p><em>Faithfully yours, nginx.</em></p>
+</body>
+</html>
diff --git a/html/.tmpl/50x.html b/html/.tmpl/50x.html
new file mode 100644 (file)
index 0000000..a57c2f9
--- /dev/null
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Error</title>
+<style>
+html { color-scheme: light dark; }
+body { width: 35em; margin: 0 auto;
+font-family: Tahoma, Verdana, Arial, sans-serif; }
+</style>
+</head>
+<body>
+<h1>An error occurred.</h1>
+<p>Sorry, the page you are looking for is currently unavailable.<br/>
+Please try again later.</p>
+<p>If you are the system administrator of this resource then you should check
+the error log for details.</p>
+<p><em>Faithfully yours, nginx.</em></p>
+</body>
+</html>
diff --git a/html/.tmpl/bot.html b/html/.tmpl/bot.html
new file mode 100644 (file)
index 0000000..221dbfd
--- /dev/null
@@ -0,0 +1,11 @@
+       <!-- End of nginx output -->
+                               </div>
+                       </div>
+                       <div id="footer" class="row">
+                               <!-- This footer will change depending on your settings in top.html -->
+
+                       </div>
+               </div>
+</body>
+
+</html>
diff --git a/html/.tmpl/foot.html b/html/.tmpl/foot.html
new file mode 100644 (file)
index 0000000..9e28e11
--- /dev/null
@@ -0,0 +1,5 @@
+
+<p class="foot">RouterOS Scripts documentation generated on <i>__DATE__</i> for <i>__VERSION__</i><br />
+Copyright &copy; 2013-2026 Christian Hesse &lt;mail@eworm.de&gt;</p>
+
+</body></html>
diff --git a/html/.tmpl/head.html b/html/.tmpl/head.html
new file mode 100644 (file)
index 0000000..995694c
--- /dev/null
@@ -0,0 +1,31 @@
+<!DOCTYPE html><html lang="en">
+<head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
+<link rel="stylesheet" type="text/css" href="__INCLUDE__/css/style.css">
+<link rel="icon" type="image/png" href="__INCLUDE__/img/logo.png">
+<script type="text/javascript" src="__INCLUDE__/js/clipboard.js"></script>
+</head><body>
+
+  <span align="center" width="60%">
+    <table>
+      <tr>
+        <td class="head"><span class="top">[Amster] RouterOS Scripts</span><br />
+          <span class="bottom">Welcome to new, optimized and fixed RouterOS scripts!</span>
+        </td>
+        <td class="head"><span class="top"><br /></span>
+        </td>
+          <td class="head"><span class="bottom"></span><br />
+          <span class="bottom"></span>  
+        </td>
+      </tr>
+    </table>
+    <hr />
+    <span width="50" align="left">
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+      <p>&nbsp;</p>
+      <div class="root">
diff --git a/html/.tmpl/index.html b/html/.tmpl/index.html
new file mode 100644 (file)
index 0000000..e7c7108
--- /dev/null
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Welcome to Amster!</title>
+<style>
+html { color-scheme: light dark; }
+body { width: 60%; margin: 0 auto;
+font-family: Tahoma, Verdana, Arial, sans-serif; }
+</style>
+</head>
+<body>
+<span align="center" width="60%">
+<span width="50" align="left">
+<h1>Welcome to Amster!</h1>
+<p>If you see this page, Amster web server is successfully installed and
+working. Further configuration is required.</p>
+
+<p>For online documentation and support please refer to
+<a href="http://nginx.org/">nginx.org</a>.<br/>
+Commercial support is available at
+<a href="http://nginx.com/">nginx.com</a>.</p>
+
+<p><em>Thank you for using nginx.</em></p>
+<br />
+<p><a href="/amster-scripts/">>>> amster-scripts <<<</a></p>
+<p><a href="/logo/">>>> logo <<<</a></p>
+<p><a href="/logo/notification.html">>>> notifications <<<</a></p>
+</span></span>
+</body>
+</html>
diff --git a/html/.tmpl/md_tmpl.html b/html/.tmpl/md_tmpl.html
new file mode 100644 (file)
index 0000000..09737d7
--- /dev/null
@@ -0,0 +1,64 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" type="text/css" href="/.include/css/style.css">
+  <link rel="icon" type="image/png" href="/.include/img/logo.png">
+  <script src="/.include/js/clipboard.js"></script>
+</head>
+
+<body>
+  <span align="center" width="60%">
+    <table>
+      <tr>
+        <td class="head"><span class="top">[Amster] RouterOS Scripts</span><br />
+          <span class="bottom">Welcome to new, optimized and fixed RouterOS scripts!</span>
+        </td>
+        <td class="head"><span class="top"><br /></span>
+        </td>
+          <td class="head"><span class="bottom"></span><br />
+          <span class="bottom"></span>  
+        </td>
+      </tr>
+    </table>
+    <hr />
+    <span width="50" align="left">
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+      <p>&nbsp;</p>
+      <div class="root">
+        {{content}}
+      </div>
+      <script>
+        (function () {
+          // try to set document title
+          var l = ['h1', 'h2', 'h3'];
+          for (var i = 0; i < l.length; i++) {
+            var h = document.getElementsByTagName(l[i]);
+            if (h.length > 0) {
+              document.title = '[Amster] RouterOS Scripts :: ' + h[0].innerText;
+              break;
+            }
+          }
+        })();
+      </script>
+      <br />
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+    </span>
+  </span>
+</body>
+</html>
diff --git a/html/.tmpl/top.html b/html/.tmpl/top.html
new file mode 100644 (file)
index 0000000..40d97c3
--- /dev/null
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+
+<!-- BetterListing - devCoster.com -->
+<!-- Coster coster@devcoster.com -->
+<!-- Version 1.0a -->
+
+<html lang="ru-RU" prefix="og: http://ogp.me/ns#">
+<head>
+               <!-- Adjust title in settings below
+               <title>Directory Listing :: </title>-->
+               <meta charset="utf-8" />
+               <meta name="viewport" content="width=device-width, initial-scale=1">
+
+               <!-- Bootstrap Core CSS -->
+               <link rel="stylesheet" href="./include/css/bootstrap.min.css">
+
+               <!-- Styles -->
+               <link rel="stylesheet" href="/.include/css/dirlisting.css">
+      <script>
+        (function () {
+          // try to set document title
+          var l = ['h1', 'h2', 'h3'];
+          for (var i = 0; i < l.length; i++) {
+            var h = document.getElementsByTagName(l[i]);
+            if (h.length > 0) {
+              document.title = '[Amster] RouterOS Scripts :: ' + h[0].innerText;
+              break;
+            }
+          }
+        })();
+      </script>
+       <!-- jQuery -->
+           <script src="/.include/js/jquery.min.js"></script>
+           <script>
+            //
+            //
+            //
+            //
+            // Configure BetterListing here:
+            var websiteName = 'Загрузки';
+            var websiteURL = '*URL сайта*';
+            // End of normal settings.
+            //
+
+            $(document).ready(function(){
+
+            // Working on nginx HTML and applying settings.
+            var text = $("h1").text();
+            var array = text.split('/');
+            var last = array[array.length-2];
+            var dirStructure = $("a").text();
+            var dirStructure = document.getElementsByTagName('a')[0].href;
+            var dir = text.substring(10);
+            var currentDir = last.charAt(0).toUpperCase() + last.slice(1);
+            var dirTrun;
+
+            // Truncate long folder names.
+            if (currentDir.length > 19){
+                var currentDir = currentDir.substring(0, 18) + '...';
+            }
+
+            // Updating page title.
+            document.title = websiteName;
+
+            // Add back button.
+            $("h1").html('<p><img alt="логотип" style="margin-top: 7px; margin-left: 0px; padding: -1px; border-radius: 5px; border: 1px solid #aaa;" src="/.include/img/logo.png"></p>');
+
+            if (dir.length > 90) {
+                dirTrun = dir.replace(/(.{90})/g, "$1\n")
+            } else {
+                dirTrun = dir.substring(0, dir.length - 1);
+            }
+
+            // Add subtitle and back arrow.
+            $("h1").append('<h4><a href="' + dirStructure + '"></a><b>Загрузить: </b>' + dirTrun.slice(0) + '</h4>');
+
+            // Add search box.
+            $("h1").prepend('<form id="custom-search-form" class="form-inline pull-right"><div class="btn-group"><input id="searchBox" placeholder="Найти на странице" type="search" class="form-control"> <span id="searchclear" class="glyphicon glyphicon-remove-circle"></span></div></form>');
+
+            // Add parent directory bit.
+            $("a").eq(1).html('Parent Directory');
+
+            // Add titles.
+            $("pre").prepend('<div class="header">Name                                                   Time                 Size</div>');
+
+            // Establish supported formats.
+            var list = new Array();
+            var formats = ["bin", "jpg", "gif", "png", "html", "css", "zip", "iso", "tiff", "ico", "psd", "pdf", "exe", "rar", "deb", "swf", "7z", "doc", "docx", "xls", "xlsx", "pptx", "ppt", "txt", "php", "js", "c", "c++", "torrent", "sql", "wmv", "avi", "mp4", "mp3", "wma", "ogg", "msg", "wav", "py", "java", "gzip", "jpeg", "raw"];
+
+            // Run when text is entered in the search box.
+            $('#custom-search-form').on('input',function(e){
+                e.preventDefault();
+                var target = $('#searchBox').val();
+                filter(target);
+            });
+
+            // Instant search.
+            function filter(target){
+                var parent_directory = 'parent directory';
+                $('pre a').each(function(){
+                    var arraySearch = $(this).attr('href');
+                    var arraySearch = decodeURIComponent( arraySearch )
+                    // Check the href data for searched term. Using href because the link label truncates if the file or folder name is too long.
+                    // Special handling for 'Parent Directory' as the href data doesn't contain that word.
+                    if (arraySearch.toLowerCase().indexOf(target.toLowerCase()) > -1 || (($(this).text() == 'Parent Directory') && (parent_directory.indexOf(target.toLowerCase()) > -1))){
+                        $(this).show();
+                        $($(this)[0].nextSibling).css('display', 'inline');
+                    } else {
+                        $(this).hide();
+                        if($($(this)[0].nextSibling).hasClass('hideMe')) {
+                            $($(this)[0].nextSibling).css('display', 'none');
+                        } else {
+                            $($(this)[0].nextSibling).wrap('<span class="hideMe" style="display:none"></style>');
+                        }
+                    }
+                });
+            }
+
+            // Runs when clear button is hit.
+            $("#searchclear").click(function(){
+                $("#searchBox").val('');
+                filter('');
+            });
+
+            // Scan all files in the directory, check the extensions and show the right MIME-type image.
+            $('pre a').each(function(){
+                var found = 0;
+                var arraySplit = $(this).attr('href').split(".");
+                var fileExt = arraySplit[arraySplit.length - 1];
+
+                for (var i = 0; i < formats.length; i++) {
+                    if (fileExt.toLowerCase() == formats[i].toLowerCase()) {
+                        var found = 1;
+                        var oldText = $(this).text();
+                        $(this).html('<img class="icons" src="/.include/icons/' + formats[i] + '.png"></img></a>' + oldText);
+                        return;
+                    }
+                }
+
+                // Add an icon for the go-back link.
+                if ($(this).text().indexOf("Parent Directory") >= 0) {
+                    var found = 1;
+                    var oldText = $(this).text();
+                    $(this).html('<img class="icons" src="/.include/icons/home.png">' + oldText);
+                    return;
+                }
+
+                // Check for folders as they don't have extensions.
+                if ($(this).attr('href').substr($(this).attr('href').length - 1) == '/') {
+                    var found = 1;
+                    var oldText = $(this).text();
+                    $(this).html('<img class="icons" src="/.include/icons/folder.png">' + oldText.substring(0, oldText.length - 1));
+
+                    // Fix for annoying jQuery behaviour where inserted spaces are treated as new elements -- which breaks my search.
+                    var string = ' ' + $($(this)[0].nextSibling).text();
+
+                    // Copy the original meta-data string, append a space char and save it over the old string.
+                    $($(this)[0].nextSibling).remove();
+                    $(this).after(string);
+                    return;
+                }
+
+                // File format not supported by Better Listings, so let's load a generic icon.
+                if (found == 0){
+                    var oldText = $(this).text();
+                    $(this).html('<img class="icons" src="/.include/icons/error.png">' + oldText);
+                    return;
+                }
+            });
+        });
+</script>
+
+       </head>
+
+       <body>
+               <div class="wasContainer">
+                       <div class="row">
+                               <div class="col-xs-11 col-centered" id="mainBox">
+       <!-- Start of nginx output -->
index 82235a2298456582d52eb0bd02502cb664278be9..d6b149923895d6f98e4e66406d6c92f3ff131360 100644 (file)
@@ -16,9 +16,9 @@
 :global GlobalFuncReady false;
 
 # Git commit id & info, expected configuration version
-:global CommitId "main/80/71f092a6";
+:global CommitId "main/83/1548044b";
 :global CommitTAG "unknown";
-:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 14:51:02 09.03.2026.";
+:global CommitInfo "Autocommit in repo: ros.vados.ru, generated by owner: root, in 02:05:36 12.03.2026.";
 
 # The variables are received right here.
 :global GlobalConfVersion 138;
diff --git a/html/logo/index.html b/html/logo/index.html
new file mode 100644 (file)
index 0000000..e4e3633
--- /dev/null
@@ -0,0 +1,72 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" type="text/css" href="/.include/css/style.css">
+  <link rel="icon" type="image/png" href="/.include/img/logo.png">
+  <script src="/.include/js/clipboard.js"></script>
+  <script src="/.include/js/color.js"></script>
+</head>
+
+<body>
+  <span align="center" width="60%">
+    <table>
+      <tr>
+        <td class="head"><span class="top">[Amster] RouterOS Scripts</span><br />
+          <span class="bottom">Welcome to new, optimized and fixed RouterOS scripts!</span>
+        </td>
+        <td class="head"><span class="top"><br /></span>
+        </td>
+          <td class="head"><span class="bottom"></span><br />
+          <span class="bottom"></span>  
+        </td>
+      </tr>
+    </table>
+    <hr />
+    <span width="50" align="left">
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+      <p>&nbsp;</p>
+      <div class="root">
+
+      <h1>Logo Color Changer</h1>
+      <embed class="logo" src="/.include/img/logo.svg" width="192" height="192" type="image/svg+xml">
+
+      <p>Select the colors here:
+        <input id="color1" type="color" value="#222222" onchange="color();">
+        <input id="color2" type="color" value="#444444" onchange="color();">
+        <input id="color3" type="color" value="#ffffff" onchange="color();">
+      </p>
+    </div>
+<a href="#top">⬆️ Go back to top</a></p>
+<script>
+      (function () {
+        // try to set document title
+        var l = ['h1', 'h2', 'h3'];
+        for (var i = 0; i < l.length; i++) {
+          var h = document.getElementsByTagName(l[i]);
+          if (h.length > 0) {
+            document.title = '[Amster] RouterOS Scripts :: ' + h[0].innerText;
+            break;
+          }
+        }
+      })();
+    </script>
+    <br />
+    <div class="menu">
+      <h2>Main Menu</h2>
+      <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+      <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+      <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+      <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+    </div>
+  </span></span>
+</body></html>
diff --git a/html/logo/notification.html b/html/logo/notification.html
new file mode 100644 (file)
index 0000000..7fd6214
--- /dev/null
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+  <meta charset="utf-8">
+  <meta name="viewport" content="width=device-width, initial-scale=1">
+  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
+  <link rel="stylesheet" type="text/css" href="/.include/css/style.css">
+  <link rel="icon" type="image/png" href="/.include/img/logo.png">
+  <script src="/.include/js/clipboard.js"></script>
+  <script src="/.include/js/notif.js"></script>
+</head>
+
+<body>
+  <span align="center" width="60%">
+    <table>
+      <tr>
+        <td class="head"><span class="top">[Amster] RouterOS Scripts</span><br />
+          <span class="bottom">Welcome to new, optimized and fixed RouterOS scripts!</span>
+        </td>
+        <td class="head"><span class="top"><br /></span>
+        </td>
+        <td class="head"><span class="bottom"></span><br />
+          <span class="bottom"></span>
+        </td>
+      </tr>
+    </table>
+    <hr />
+    <span width="50" align="left">
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+      <p>&nbsp;</p>
+      <div class="root">
+
+        <h1>Notification Generator</h1>
+        <hr />
+        <div class="notification">
+          <img src="/logo/img/logo.svg" alt="logo" class="logo" width=48 height=48>
+          <div class="content">
+            <p id="heading" class="heading">[<span id="hostname">MikroTik</span>] <span id="subject">ℹ️ Subject</span>
+            </p>
+            <pre id="message">Message</pre>
+            <p id="link" class="hint"> 🔗 <span id="link-text" class="link">/logo/</span></p>
+            <p id="queued" class="hint"> ⏰ This message was queued since <i><span id="queued-since">2026-02-10
+                  10:21:11</span></i> and may be obsolete.</p>
+            <p id="cut" class="hint">✂️ The message was too long and has been truncated, cut off <i><span
+                  id="cut-percent">13</span>%</i>!</p>
+          </div>
+        </div>
+
+        <p>Hostname: <input type="text" value="MikroTik" onchange="update(this, 'hostname')"></p>
+        <p>Subject: <input type="text" size=50 value="ℹ️  Subject" onchange="update(this, 'subject')"></p>
+        <p>Message: <textarea id="w3review" name="w3review" rows="4" cols="50"
+            onchange="update(this, 'message')">Message</textarea></p>
+        <p><input type="checkbox" onclick="visible(this, 'link')"> Show link: <input type="text" value="/logo/"
+            onchange="update(this, 'link-text')"></p>
+        <p><input type="checkbox" onclick="visible(this, 'queued')"> Queued since <input type="text"
+            value="2026-02-10 10:21:11" onchange="update(this, 'queued-since')"></p>
+        <p><input type="checkbox" onclick="visible(this, 'cut')"> Cut-off with <input type="number" min=1 max=99
+            value=13 onchange="update(this, 'cut-percent')"> percent</p>
+
+        <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
+          notification and download it.</p>
+
+      <p><a href="#top">⬆️ Go back to top</a></p>
+      </div>            
+      <script>
+        (function () {
+          // try to set document title
+          var l = ['h1', 'h2', 'h3'];
+          for (var i = 0; i < l.length; i++) {
+            var h = document.getElementsByTagName(l[i]);
+            if (h.length > 0) {
+              document.title = '[Amster] RouterOS Scripts :: ' + h[0].innerText;
+              break;
+            }
+          }
+        })();
+      </script>
+      <br />
+      <div class="menu">
+        <h2>Main Menu</h2>
+        <p><a href="/README.md"> ⬅️ [ Main README.md ]</a></p>
+        <p><a href="/logo/"> ℹ️ [ logo ]</a></p>
+        <p><a href="/logo/notification.html"> 💡️ [ Notifications ]</a></p>
+        <p><a href="/func-collection/README.md"> ℹ️ [ Functions collection ]</a></p>
+      </div>
+    </span>
+  </span>
+</body>
+</html>