Compare commits

...

56 commits

Author SHA1 Message Date
Christian Hesse
c8481c1619 README: highlight the long way for first time users with hint 2025-11-20 11:06:24 +01:00
Christian Hesse
89832124a6 README: mention broken installation for initial commands 2025-11-20 11:03:33 +01:00
Christian Hesse
a11b6a5653 README: link the long way in detail 2025-11-20 10:58:37 +01:00
Christian Hesse
046d692e0b Makefile: also clean contrib 2025-11-20 10:57:20 +01:00
Christian Hesse
422ee6f20e contrib/Makefile: add target clean 2025-11-20 10:57:20 +01:00
Christian Hesse
bad1653625 contrib/static-html: add badges 2025-11-20 10:57:20 +01:00
Christian Hesse
21cab8dabe contrib/static-html: find static html files by comment 2025-11-20 10:57:20 +01:00
Christian Hesse
b9cabd3d82 contrib/static-html: split off from Makefile 2025-11-20 10:57:20 +01:00
Christian Hesse
6eeebb010d contrib/html: simplify handling of relative paths 2025-11-20 10:57:20 +01:00
Christian Hesse
269e1688e6 general/clipboard: add a visual feedback 2025-11-20 10:57:20 +01:00
Christian Hesse
4a0764fa27 general/style: add a "📋 Copy!" hint to code blocks 2025-11-20 10:57:20 +01:00
Christian Hesse
d9f6b06c6b contrib/html: support click on code block to copy to clipboard 2025-11-20 10:57:20 +01:00
Christian Hesse
38fae1b45d contrib/commitinfo: support updating the commit info 2025-11-20 10:57:20 +01:00
Christian Hesse
02a7b15d0e global-functions: add and fix global scheduler automatically...
... and also adjust README and INITIAL-COMMANDS.
2025-11-20 10:57:20 +01:00
Christian Hesse
097c158ec8 global-functions: $FetchUserAgentStr: add commit info in user agent string 2025-11-20 10:57:20 +01:00
Christian Hesse
e548ebeb59 Merge branch 'rsc-eworm-de' into next 2025-11-20 10:57:20 +01:00
Christian Hesse
a2d002a082 Merge branch 'contrib-template' into next 2025-11-20 10:57:20 +01:00
Christian Hesse
9c0a05a90a doc/mod/scriptrunonce: get script from rsc.eworm.de 2025-11-20 10:57:20 +01:00
Christian Hesse
734d957846 contrib/logo-color: drop width & height properties for images 2025-11-20 10:57:20 +01:00
Christian Hesse
24bf5c605b contrib/template-wifi: split off from Makefile 2025-11-20 10:57:20 +01:00
Christian Hesse
67d3111a63 INITIAL-COMMANDS: install from rsc.eworm.de 2025-11-20 10:57:20 +01:00
Christian Hesse
ef0eeaa67f contrib/logo-color: place screenshots below each other...
... not side by side.
2025-11-20 10:57:20 +01:00
Christian Hesse
6bdcecbb76 contrib/template-local: split off from Makefile 2025-11-20 10:57:20 +01:00
Christian Hesse
05922a38d7 README: install from rsc.eworm.de 2025-11-20 10:57:20 +01:00
Christian Hesse
5757230211 general/style: make the blockquote darker 2025-11-20 10:57:20 +01:00
Christian Hesse
4fc382c78d contrib/template-capsman: split off from Makefile 2025-11-20 10:57:20 +01:00
Christian Hesse
d5300fc4d3 fw-addr-lists.d/allow: use rsc.eworm.de in the list 2025-11-20 10:57:20 +01:00
Christian Hesse
610e2178b2 Merge branch 'contrib-html-head-foot' into next 2025-11-20 10:57:20 +01:00
Christian Hesse
c73a2dc850 fw-addr-lists.d/{allow,block}: use short url rsc.eworm.de 2025-11-20 10:57:20 +01:00
Christian Hesse
d1fa3facfd Makefile: clean up and add phony targets 2025-11-20 10:57:20 +01:00
Christian Hesse
9c8feee621 contrib/html: add a footer 2025-11-20 10:57:20 +01:00
Christian Hesse
9287996b74 Merge branch 'contrib-html' into next 2025-11-20 10:57:20 +01:00
Christian Hesse
b4e6cc5b59 contrib/notification: add a head with eworm, QR code and caption 2025-11-20 10:57:20 +01:00
Christian Hesse
7b45bb5b46 contrib/Makefile: hide the hint on broken site 2025-11-20 10:57:20 +01:00
Christian Hesse
75692abf47 contrib/logo-color: add a head with eworm, QR code and caption 2025-11-20 10:57:20 +01:00
Christian Hesse
b16c2f5b90 contrib/notification: hint on possibly broken site 2025-11-20 10:57:20 +01:00
Christian Hesse
165d7c60d4 contrib/html: add a head with eworm, QR code and caption 2025-11-20 10:57:20 +01:00
Christian Hesse
cbb0aba1b1 contrib/logo-color: hint on possibly broken site 2025-11-20 10:57:20 +01:00
Christian Hesse
1ce3160933 contrib/html: hide the hint on broken link 2025-11-20 10:57:20 +01:00
Christian Hesse
607a608502 doc/mod/notification-telegram: hint on possibly broken link 2025-11-20 10:57:20 +01:00
Christian Hesse
148d40e18d contrib: introduce Makefile...
... and update references in links.
2025-11-20 10:57:20 +01:00
Christian Hesse
036c6ef682 contrib/logo-color: use relative reference in link
... without extra path elements.

This may break, depending on site.
2025-11-20 10:57:20 +01:00
Christian Hesse
5986894749 doc/mod/notification-telegram: use relative reference in link
This may break, depending on site.
2025-11-20 10:57:20 +01:00
Christian Hesse
8d68f24095 contrib/notification: format the values italic 2025-11-20 10:57:20 +01:00
Christian Hesse
eb89f8359b contrib/notification: update date format 2025-11-20 10:57:20 +01:00
Christian Hesse
8faf4ab7cf contrib/{logo-color,notification}: add navigation structure 2025-11-20 10:57:20 +01:00
Christian Hesse
ceb6f2353e contrib/*: unify html code 2025-11-20 10:57:20 +01:00
Christian Hesse
719b662b76 contrib/html: drop ampersand, comma, dash, exclamation mark, ...
... parentesis & tick mark from id/anchor
2025-11-20 10:57:20 +01:00
Christian Hesse
cbb282746f README: add a sub-section for code hosting 2025-11-20 09:48:35 +01:00
Christian Hesse
2e0787afd1 contrib/html: properly handle anchors 2025-11-20 09:48:35 +01:00
Christian Hesse
a0399216fc contrib/html: link the logo with relative path 2025-11-20 09:48:35 +01:00
Christian Hesse
2d6fdc355e contrib/html: increase default line height 2025-11-20 09:48:35 +01:00
Christian Hesse
fae8dbd8ea contrib/html: add a margin on left and right...
... for windows in landscape (wider than high). Also make the
notification float right for landscape only.
2025-11-20 09:48:35 +01:00
Christian Hesse
a2d6671cf0 contrib/html: include stylesheet via link 2025-11-20 09:48:35 +01:00
Christian Hesse
d610bf3582 contrib/{logo-color,notification}: use a single style 2025-11-20 09:48:35 +01:00
Christian Hesse
97b4a41f23 contrib/html: add empty lines...
... for easier rebasing.
2025-11-20 09:48:35 +01:00
31 changed files with 358 additions and 137 deletions

View file

@ -17,7 +17,7 @@ Initial commands
Run the complete base installation: Run the complete base installation:
{ {
:local BaseUrl "https://git.eworm.de/cgit/routeros-scripts/plain/"; :local BaseUrl "https://rsc.eworm.de/main/";
:local CertCommonName "ISRG Root X2"; :local CertCommonName "ISRG Root X2";
:local CertFileName "ISRG-Root-X2.pem"; :local CertFileName "ISRG-Root-X2.pem";
:local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470"; :local CertFingerprint "69729b8e15a86efc177a57afb7171dfc64add28c2fca8cf1507e34453ccb1470";
@ -45,9 +45,6 @@ Run the complete base installation:
}; };
:put "Loading configuration and functions..."; :put "Loading configuration and functions...";
/system/script { run global-config; run global-functions; }; /system/script { run global-config; run global-functions; };
:put "Scheduling to load configuration and functions...";
/system/scheduler/remove [ find where name="global-scripts" ];
/system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }";
:if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={ :if ([ :len [ /certificate/find where fingerprint=$CertFingerprint ] ] > 0) do={
:put "Renaming certificate by its common-name..."; :put "Renaming certificate by its common-name...";
:global CertificateNameByCN; :global CertificateNameByCN;

View file

@ -2,38 +2,45 @@
# template scripts -> final scripts # template scripts -> final scripts
# markdown files -> html files # markdown files -> html files
CAPSMAN = $(wildcard *.capsman.rsc) ALL_RSC := $(wildcard *.rsc */*.rsc)
LOCAL = $(wildcard *.local.rsc) GEN_RSC := $(wildcard *.capsman.rsc *.local.rsc *.wifi.rsc)
WIFI = $(wildcard *.wifi.rsc)
MARKDOWN = $(wildcard *.md doc/*.md doc/mod/*.md) MARKDOWN := $(wildcard *.md doc/*.md doc/mod/*.md)
HTML = $(MARKDOWN:.md=.html) HTML := $(MARKDOWN:.md=.html)
all: $(CAPSMAN) $(LOCAL) $(WIFI) $(HTML) checksums.json DATE ?= $(shell date --rfc-email)
VERSION ?= $(shell git symbolic-ref --short HEAD 2>/dev/null)/$(shell git rev-list --count HEAD 2>/dev/null)/$(shell git rev-parse --short=8 HEAD 2>/dev/null)
export DATE VERSION
%.html: %.md contrib/html.sh contrib/html.sh.d/head.html .PHONY: all checksums commitinfo docs rsc clean
all: checksums docs rsc
checksums: checksums.json
checksums.json: contrib/checksums.sh $(ALL_RSC)
contrib/checksums.sh > $@
commitinfo: global-functions.rsc
contrib/commitinfo.sh $< > $<~
mv $<~ $<
docs: $(HTML)
%.html: %.md general/style.css contrib/html.sh contrib/html.sh.d/head.html contrib/html.sh.d/foot.html
contrib/html.sh $< > $@ contrib/html.sh $< > $@
%.capsman.rsc: %.template.rsc Makefile rsc: $(GEN_RSC)
sed -e '/\/interface\/wifi\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$$/,/^# NOT \/caps-man\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
%.local.rsc: %.template.rsc Makefile %.capsman.rsc: %.template.rsc contrib/template-capsman.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wifi\//d' -e 's|%TEMPL%|.local|' \ contrib/template-capsman.sh $< > $@
-e '/^# NOT \/interface\/wireless\/ #$$/,/^# NOT \/interface\/wireless\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
%.wifi.rsc: %.template.rsc Makefile %.local.rsc: %.template.rsc contrib/template-local.sh
sed -e '/\/caps-man\//d' -e '/\/interface\/wireless\//d' -e 's|%TEMPL%|.wifi|' \ contrib/template-local.sh $< > $@
-e '/^# NOT \/interface\/wifi\/ #$$/,/^# NOT \/interface\/wifi\/ #$$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< $< > $@
checksums.json: contrib/checksums.sh *.rsc */*.rsc %.wifi.rsc: %.template.rsc contrib/template-wifi.sh
contrib/checksums.sh > $@ contrib/template-wifi.sh $< > $@
clean: clean:
rm -f $(HTML) checksums.json rm -f $(HTML) checksums.json
make -C contrib/ clean

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5 KiB

After

Width:  |  Height:  |  Size: 5 KiB

Before After
Before After

View file

@ -55,9 +55,12 @@ Initial setup
### Get me ready! ### Get me ready!
If you know how things work just copy and paste the If you know how things work just copy and paste the
[initial commands](INITIAL-COMMANDS.md). Remember to edit and rerun [initial commands](INITIAL-COMMANDS.md). These also support fixing an
existing but broken installation. Remember to edit and rerun
`global-config-overlay`! `global-config-overlay`!
First time users should take the long way below.
> 💡️ **Hint**: First time users should take
> [the long way in detail](#the-long-way-in-detail) below.
### Live presentation ### Live presentation
@ -87,7 +90,7 @@ If you intend to download the scripts from a
different location (for example from github.com) install the corresponding different location (for example from github.com) install the corresponding
certificate chain. certificate chain.
/tool/fetch "https://git.eworm.de/cgit/routeros-scripts/plain/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem"; /tool/fetch "https://rsc.eworm.de/main/certs/ISRG-Root-X2.pem" dst-path="isrg-root-x2.pem";
![screenshot: download certs](README.d/01-download-certs.avif) ![screenshot: download certs](README.d/01-download-certs.avif)
@ -125,16 +128,16 @@ date and time is set correctly!
Now let's download the main scripts and add them in configuration on the fly. Now let's download the main scripts and add them in configuration on the fly.
:foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://git.eworm.de/cgit/routeros-scripts/plain/" . $Script . ".rsc") output=user as-value]->"data"); }; :foreach Script in={ "global-config"; "global-config-overlay"; "global-functions" } do={ /system/script/add name=$Script owner=$Script source=([ /tool/fetch check-certificate=yes-without-crl ("https://rsc.eworm.de/main/" . $Script . ".rsc") output=user as-value]->"data"); };
![screenshot: import scripts](README.d/04-import-scripts.avif) ![screenshot: import scripts](README.d/04-import-scripts.avif)
And finally load configuration and functions and add the scheduler. And finally run configuration and functions. This will also add the
scheduler for loading at system startup automatically.
/system/script { run global-config; run global-functions; }; /system/script { run global-config; run global-functions; };
/system/scheduler/add name="global-scripts" start-time=startup on-event="/system/script { run global-config; run global-functions; }";
![screenshot: run and schedule scripts](README.d/05-run-and-schedule-scripts.avif) ![screenshot: run scripts](README.d/05-run-scripts.avif)
> 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the > 💡️ **Hint**: You see complaints regarding syntax errors? Most likely the
> RouterOS on your device is too old. Check for updates! > RouterOS on your device is too old. Check for updates!
@ -408,12 +411,11 @@ Upstream
[![upstream](general/qr-code.png)](https://rsc.eworm.de/) [![upstream](general/qr-code.png)](https://rsc.eworm.de/)
URL: ### Code hosting
[GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts)
Mirror: * [git.eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/)
[eworm.de](https://git.eworm.de/cgit/routeros-scripts/about/) * [GitHub.com](https://github.com/eworm-de/routeros-scripts#routeros-scripts)
[GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts) * [GitLab.com](https://gitlab.com/eworm-de/routeros-scripts#routeros-scripts)
--- ---
[⬆️ Go back to top](#top) [⬆️ Go back to top](#top)

17
contrib/Makefile Normal file
View file

@ -0,0 +1,17 @@
# Makefile
HTML := $(shell grep -xl '<!-- static html //-->' *.html)
.PHONY: all docs clean
all: docs
badges.html: badges.md
markdown $< > $@
docs: static-html.sh $(HTML) badges.html
./static-html.sh $(HTML)
clean:
rm -f badges.html
git checkout HEAD -- $(HTML)

6
contrib/badges.md Normal file
View file

@ -0,0 +1,6 @@
[![GitHub stars](https://img.shields.io/github/stars/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=red)](https://github.com/eworm-de/routeros-scripts/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=green)](https://github.com/eworm-de/routeros-scripts/network)
[![GitHub watchers](https://img.shields.io/github/watchers/eworm-de/routeros-scripts?logo=GitHub&style=flat&color=blue)](https://github.com/eworm-de/routeros-scripts/watchers)
[![required RouterOS version](https://img.shields.io/badge/RouterOS-7.15-yellow?style=flat)](https://mikrotik.com/download/changelogs/)
[![Telegram group @routeros_scripts](https://img.shields.io/badge/Telegram-%40routeros__scripts-%2326A5E4?logo=telegram&style=flat)](https://t.me/routeros_scripts)
[![donate with PayPal](https://img.shields.io/badge/Like_it%3F-Donate!-orange?logo=githubsponsors&logoColor=orange&style=flat)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=A4ZXBD6YS2W8J)

6
contrib/commitinfo.sh Executable file
View file

@ -0,0 +1,6 @@
#!/bin/sh
sed \
-e "/^:global CommitId/c :global CommitId \"${COMMITID:-unknown}\";" \
-e "/^:global CommitInfo/c :global CommitInfo \"${COMMITINFO:-unknown}\";" \
< "${1}"

View file

@ -2,8 +2,22 @@
set -e set -e
sed "s|__TITLE__|$(head -n1 "${1}")|" < "${0}.d/head.html" RELTO="$(dirname "${1}")"
sed \
-e "s|__TITLE__|$(head -n1 "${1}")|" \
-e "s|__GENERAL__|$(realpath --relative-to="${RELTO}" general/)|" \
-e "s|__ROOT__|$(realpath --relative-to="${RELTO}" ./)|" \
< "${0}.d/head.html"
markdown -f toc,idanchor "${1}" | sed \ markdown -f toc,idanchor "${1}" | sed \
-e 's/href="\([-_\./[:alnum:]]*\)\.md"/href="\1.html"/g' \ -e 's/href="\([-_\./[:alnum:]]*\)\.md\(#[-[:alnum:]]*\)\?"/href="\1.html\2"/g' \
-e '/<h[1234] /s| id="\(.*\)">| id="\L\1">|' -e '/<h[1234] /s| id="\(.*\)">| id="\L\1">|' \
printf '</body></html>' -e '/<h[1234] /s|-2[1789cd]-||g' -e '/<h[1234] /s|--26-amp-3b-||g' \
-e '/^<pre>/s|pre|pre onclick="CopyToClipboard(this)"|g' \
-e '/The above link may be broken on code hosting sites/s|blockquote|blockquote style="display: none;"|'
sed \
-e "s|__DATE__|${DATE:-$(date --rfc-email)}|" \
-e "s|__VERSION__|${VERSION:-unknown}|" \
< "${0}.d/foot.html"

View file

@ -0,0 +1,4 @@
<p class="foot">RouterOS Scripts documentation generated on <i>__DATE__</i> for <i>__VERSION__</i></p>
</body></html>

View file

@ -1,15 +1,16 @@
<!DOCTYPE html><html lang="en"> <!DOCTYPE html><html lang="en">
<head><title>RouterOS Scripts :: __TITLE__</title> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title>RouterOS Scripts :: __TITLE__</title>
<style> <link rel="stylesheet" type="text/css" href="__GENERAL__/style.css">
body { font-family: sans-serif; } <link rel="icon" type="image/png" href="__ROOT__/logo.png">
h2 { border-bottom: 1px solid #ccc; color: #000; } <script type="text/javascript" src="__GENERAL__/clipboard.js"></script>
a { text-decoration: none; }
a:hover { text-decoration: underline; }
blockquote { border-left: 4px solid #ccc; padding: 0 10px; color: #777; }
code { margin: 0 2px; padding: 2px 5px; border: 1px solid #ccc; background-color: #f8f8f8; border-radius: 3px; }
pre { background-color: #f8f8f8; border: 1px solid #ccc; overflow: auto; padding: 6px 10px; border-radius: 3px; }
pre code { margin: 0; padding: 0; border: 0; }
</style>
<link rel="icon" href="/logo.png" type="image/png">
</head><body> </head><body>
<table><tr>
<td><img src="__GENERAL__/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="__GENERAL__/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />

View file

@ -1,5 +0,0 @@
body {
font-family: fira-sans, sans-serif;
font-size: 10pt;
background-color: transparent;
}

View file

@ -1,14 +1,30 @@
<!DOCTYPE html> <!DOCTYPE html><html lang="en">
<html lang="en"> <!-- static html //-->
<head> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8"> <title>RouterOS Scripts :: Logo Color Changer</title>
<title>RouterOS-Scripts Logo Color Changer</title> <link rel="stylesheet" type="text/css" href="../general/style.css">
<link rel="stylesheet" type="text/css" href="logo-color.d/style.css"> <link rel="icon" type="image/png" href="../logo.png">
<script src="logo-color.d/script.js"></script> <script src="logo-color.d/script.js"></script>
</head> </head><body>
<body>
<h1>RouterOS-Scripts Logo Color Changer</h1> <table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<h1>Logo Color Changer</h1>
<!-- badges here //-->
<p><a href="../README.md">⬅️ Go back to main README</a></p>
<blockquote style="/* display */"><p>💡️ <strong>Hint</strong>: This site or links
on it may be broken on code hosting sites. Use
<a href="https://rsc.eworm.de/main/contrib/logo-color.html">Logo Color Changer</a>
instead.</p></blockquote>
<p>You want the logo for your own notifications? But you joined the <p>You want the logo for your own notifications? But you joined the
<a href="https://t.me/routeros_scripts">Telegram Group</a> and want <a href="https://t.me/routeros_scripts">Telegram Group</a> and want
@ -24,17 +40,20 @@ something that differentiates? Color it!</p>
<p>Then right-click, click "<i>Take Screenshot</i>" and finally select the <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
logo and download it.</p> logo and download it.</p>
<p><img src="logo-color.d/browser-01.avif" width=533 height=482 alt="Screenshot Browser 01"> <p><img src="logo-color.d/browser-01.avif" alt="Screenshot Browser 01"></p>
<img src="logo-color.d/browser-02.avif" width=533 height=482 alt="Screenshot Browser 02"> <p><img src="logo-color.d/browser-02.avif" alt="Screenshot Browser 02"></p>
<img src="logo-color.d/browser-03.avif" width=533 height=482 alt="Screenshot Browser 03"></p> <p><img src="logo-color.d/browser-03.avif" alt="Screenshot Browser 03"></p>
<p>(This example is with <p>(This example is with
<a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow <a href="https://www.mozilla.org/de/firefox/new/">Firefox</a>. The workflow
for other browsers may differ.)</p> for other browsers may differ.)</p>
<p>See how to <p>See how to
<a href="../../about/doc/mod/notification-telegram.md#set-a-profile-photo">Set <a href="../doc/mod/notification-telegram.md#set-a-profile-photo">Set
a profile photo</a> for your Telegram bot.</p> a profile photo</a> for your Telegram bot.</p>
</body> <hr />
</html>
<p><a href="../README.md">⬅️ Go back to main README</a><br/>
<a href="#top">⬆️ Go back to top</a></p>
</body></html>

View file

@ -1,36 +0,0 @@
body {
font-family: fira-sans, sans-serif;
font-size: 10pt;
background-color: transparent;
}
div.notification {
position: relative;
float: right;
width: 600px;
border: 3px outset #6c5d53;
/* border-radius: 5px; */
padding: 10px;
background-color: #e6e6e6;
}
div.content {
padding-left: 60px;
}
img.logo {
float: left;
border-radius: 50%;
}
p.heading {
margin: 0px;
font-weight: bold;
text-decoration: underline;
}
p.hint {
display: none;
}
pre {
font-family: fira-mono, monospace;
white-space: pre-wrap;
}
span.link {
color: #863600;
}

View file

@ -1,14 +1,30 @@
<!DOCTYPE html> <!DOCTYPE html><html lang="en">
<html lang="en"> <!-- static html //-->
<head> <head><meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8"> <title>RouterOS Scripts :: Notification Generator</title>
<title>RouterOS-Scripts Notification Generator</title> <link rel="stylesheet" type="text/css" href="../general/style.css">
<link rel="stylesheet" type="text/css" href="notification.d/style.css"> <link rel="icon" type="image/png" href="../logo.png">
<script src="notification.d/script.js"></script> <script src="notification.d/script.js"></script>
</head> </head><body>
<body>
<h1>RouterOS-Scripts Notification Generator</h1> <table><tr>
<td><img src="../general/eworm-meadow.avif" alt="eworm on meadow" /></td>
<td><img src="../general/qr-code.png" alt="QR code: rsc.eworm.de" /></td>
<td class="head"><span class="top">RouterOS Scripts</span><br />
<span class="bottom">a collection of scripts for MikroTik RouterOS</span></td>
</tr></table>
<hr />
<h1>Notification Generator</h1>
<!-- badges here //-->
<p><a href="../README.md">⬅️ Go back to main README</a></p>
<blockquote style="/* display */"><p>💡️ <strong>Hint</strong>: This site or links
on it may be broken on code hosting sites. Use
<a href="https://rsc.eworm.de/main/contrib/notification.html">Notification Generator</a>
instead.</p></blockquote>
<div class="notification"> <div class="notification">
<img src="../logo.svg" alt="logo" class="logo" width=48 height=48> <img src="../logo.svg" alt="logo" class="logo" width=48 height=48>
@ -16,8 +32,8 @@
<p id="heading" class="heading">[<span id="hostname">MikroTik</span>] <span id="subject"> Subject</span></p> <p id="heading" class="heading">[<span id="hostname">MikroTik</span>] <span id="subject"> Subject</span></p>
<pre id="message">Message</pre> <pre id="message">Message</pre>
<p id="link" class="hint">🔗 <span id="link-text" class="link">https://eworm.de/</span></p> <p id="link" class="hint">🔗 <span id="link-text" class="link">https://eworm.de/</span></p>
<p id="queued" class="hint">⏰ This message was queued since <span id="queued-since">oct/18/2022 18:30:48</span> and may be obsolete.</p> <p id="queued" class="hint">⏰ This message was queued since <i><span id="queued-since">2025-10-29 16:06:18</span></i> and may be obsolete.</p>
<p id="cut" class="hint">✂️ The message was too long and has been truncated, cut off <span id="cut-percent">13</span>%!</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>
</div> </div>
@ -25,11 +41,14 @@
<p>Subject: <input type="text" size=50 value=" Subject" onchange="update(this, 'subject')"></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>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="https://eworm.de/" onchange="update(this, 'link-text')"></p> <p><input type="checkbox" onclick="visible(this, 'link')"> Show link: <input type="text" value="https://eworm.de/" onchange="update(this, 'link-text')"></p>
<p><input type="checkbox" onclick="visible(this, 'queued')"> Queued since <input type="text" value="oct/18/2022 18:30:48" onchange="update(this, 'queued-since')"></p> <p><input type="checkbox" onclick="visible(this, 'queued')"> Queued since <input type="text" value="2025-10-29 16:06:18" 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><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 <p>Then right-click, click "<i>Take Screenshot</i>" and finally select the
notification and download it.</p> notification and download it.</p>
</body> <hr />
</html>
<p><a href="../README.md">⬅️ Go back to main README</a><br/>
<a href="#top">⬆️ Go back to top</a></p>
</body></html>

10
contrib/static-html.sh Executable file
View file

@ -0,0 +1,10 @@
#!/bin/sh
set -e
sed -i \
-e '/href=/s|\.md|\.html|' \
-e '/blockquote/s|/\* display \*/|display: none;|' \
-e '/<!-- badges here \/\/-->/r badges.html' \
-e '/<!-- badges here \/\/-->/d' \
"${@}"

11
contrib/template-capsman.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/interface\/wifi\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.capsman|' \
-e '/^# NOT \/caps-man\/ #$/,/^# NOT \/caps-man\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-local.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wifi\//d' \
-e 's|%TEMPL%|.local|' \
-e '/^# NOT \/interface\/wireless\/ #$/,/^# NOT \/interface\/wireless\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

11
contrib/template-wifi.sh Executable file
View file

@ -0,0 +1,11 @@
#!/bin/sh
set -e
sed \
-e '/\/caps-man\//d' \
-e '/\/interface\/wireless\//d' \
-e 's|%TEMPL%|.wifi|' \
-e '/^# NOT \/interface\/wifi\/ #$/,/^# NOT \/interface\/wifi\/ #$/d' \
-e '/^# !!/,/^# !!/c # !! Do not edit this file, it is generated from template!' \
< "${1}"

View file

@ -106,10 +106,13 @@ chat with [BotFather ↗️](https://t.me/BotFather) and set it there.
![set profile photo](notification-telegram.d/setuserpic.avif) ![set profile photo](notification-telegram.d/setuserpic.avif)
Have a look at my Have a look at my [Logo Color Changer](../../contrib/logo-color.html)
[RouterOS-Scripts Logo Color Changer](https://git.eworm.de/cgit/routeros-scripts/plain/contrib/logo-color.html)
to create a colored version of this scripts' logo. to create a colored version of this scripts' logo.
> 💡️ **Hint**: The above link may be broken on code hosting sites.
> Use [Logo Color Changer](https://rsc.eworm.de/main/contrib/logo-color.html)
> instead.
See also See also
-------- --------

View file

@ -48,7 +48,7 @@ Usage and invocation
The function `$ScriptRunOnce` expects an URL (or name if The function `$ScriptRunOnce` expects an URL (or name if
`ScriptRunOnceBaseUrl` is given) pointing to a script as parameter. `ScriptRunOnceBaseUrl` is given) pointing to a script as parameter.
$ScriptRunOnce https://git.eworm.de/cgit/routeros-scripts/plain/doc/mod/scriptrunonce.d/hello-world.rsc; $ScriptRunOnce https://rsc.eworm.de/main/doc/mod/scriptrunonce.d/hello-world.rsc;
![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif) ![ScriptRunOnce](scriptrunonce.d/scriptrunonce.avif)

View file

@ -1,3 +1,3 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
git.eworm.de rsc.eworm.de

View file

@ -1,5 +1,5 @@
# an ip address list for use with fw-addr-lists script # an ip address list for use with fw-addr-lists script
# https://git.eworm.de/cgit/routeros-scripts/about/doc/fw-addr-lists.md # https://rsc.eworm.de/doc/fw-addr-lists.md
# example.net # example.net
93.184.216.34 93.184.216.34

8
general/clipboard.js Normal file
View file

@ -0,0 +1,8 @@
/* copy code to clipboard */
function CopyToClipboard(element) {
element.style.filter = 'invert(1)';
navigator.clipboard.writeText(element.firstElementChild.innerHTML);
setTimeout(function() {
element.style.filter = 'invert(0)';
}, 100);
}

BIN
general/eworm-meadow.avif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

101
general/style.css Normal file
View file

@ -0,0 +1,101 @@
/* stylesheet for RouterOS Scripts */
body {
background-color: transparent;
font-family: fira-sans, sans-serif;
font-size: 10pt;
line-height: 1.6;
}
h2 {
border-bottom: 1px solid #ccc;
color: #000;
}
a {
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
blockquote {
border-left: 4px solid #ccc;
padding: 0 10px;
color: #555;
}
code {
margin: 0 2px;
padding: 2px 5px;
border: 1px solid #ccc;
background-color: #f8f8f8;
border-radius: 3px;
}
div.notification {
position: relative;
float: none;
width: 600px;
border: 3px outset #6c5d53;
/* border-radius: 5px; */
padding: 10px;
background-color: #e6e6e6;
}
div.content {
padding-left: 60px;
}
img.logo {
float: left;
border-radius: 50%;
}
p.foot {
color: #777;
text-align: center;
}
p.heading {
margin: 0px;
font-weight: bold;
text-decoration: underline;
}
p.hint {
display: none;
}
pre {
font-family: fira-mono, monospace;
white-space: pre-wrap;
background-color: #f8f8f8;
border: 1px solid #ccc;
overflow: auto;
padding: 6px 10px;
border-radius: 3px;
}
pre code {
margin: 0;
padding: 0;
border: 0;
}
pre::before {
content: "📋 Copy!";
float: right;
border: 1px solid #ccc;
border-radius: 3px;
}
span.link {
color: #863600;
}
td.head {
line-height: 1.2;
padding: 0 2em;
}
td.head .top {
font-size: 250%;
font-weight: bold;
}
td.head .bottom {
font-size: 125%;
color: #555;
}
@media only screen and (orientation: landscape) {
body {
margin-left: 10vw;
margin-right: 10vw;
}
div.notification {
float: right;
}
}

View file

@ -6,7 +6,7 @@
# https://rsc.eworm.de/#editing-configuration # https://rsc.eworm.de/#editing-configuration
# Copy relevant configuration from global-config, paste and modify it here. # Copy relevant configuration from global-config, paste and modify it here.
# https://rsc.eworm.de/global-config.rsc # https://rsc.eworm.de/main/global-config.rsc
# End of global-config-overlay # End of global-config-overlay

View file

@ -539,10 +539,16 @@
:set FetchUserAgentStr do={ :set FetchUserAgentStr do={
:local Caller [ :tostr $1 ]; :local Caller [ :tostr $1 ];
:global CommitId;
:global CommitInfo;
:global IfThenElse;
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
:return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . \ :return ("User-Agent: Mikrotik/" . $Resource->"version" . " " . $Resource->"architecture-name" . \
$Resource->"architecture-name" . " " . $Caller . "/Fetch (https://rsc.eworm.de/)"); " " . $Caller . "/Fetch (https://rsc.eworm.de/" . [ $IfThenElse ($CommitId != "unknown") \
("; " . $CommitInfo . "/" . [ :pick $CommitId 0 8 ]) ] . ")");
} }
# check for existence of file, optionally with type # check for existence of file, optionally with type
@ -1894,6 +1900,15 @@
} }
} }
# add (and fix) global scripts scheduler
:local OnEvent "/system/script { run global-config; run global-functions; }";
:if ([ :len [ /system/scheduler/find where name="global-scripts" ] ] = 0) do={
/system/scheduler/add name="global-scripts" start-time=startup;
}
:if ([ /system/scheduler/get "global-scripts" on-event ] != $OnEvent) do={
/system/scheduler/set "global-scripts" on-event=$OnEvent;
}
# Log success # Log success
:local Resource [ /system/resource/get ]; :local Resource [ /system/resource/get ];
$LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \ $LogPrintOnce info $ScriptName ("Loaded on " . $Resource->"board-name" . \