This commit is contained in:
speedie 2023-04-24 19:35:52 +02:00
parent 0843d76b49
commit 50143c7db1
44 changed files with 2427 additions and 555 deletions

0
LICENSE Normal file → Executable file
View file

60
README.md Executable file
View file

@ -0,0 +1,60 @@
# W2 wiki
W2 wiki is a web-based, wiki-like notepad that you can host yourself.
## Notable features:
- Elegant text markup:
- Uses [Markdown Syntax](https://github.com/codeling/w2wiki/blob/master/pages/MarkdownSyntax.md).
- It supports double-brackets [[like this]] to link to another page in the wiki by title
- It supports double-braces {{like this}} to link to an uploaded image
- Minimalistic but functional interface:
- Fits to screen nicely when viewed on iPhone, with custom icon for adding to home screen
- HTML5 compliant output
- Title & content search
- Filesystem storage (no database required) in plain Markdown text files.
- Rudimentary git integration to commit & push each page edit
- Localization support (currently en/ja translations available)
- Image uploading support
- Optionally password-protected
- Unlike cloud / hosted solutions, you retain control of your data
- Written in PHP for portability and hackability
- Extremely compact (only a few .php files and a .css file)
## Installation & Configuration
See [Installation instructions](https://github.com/codeling/w2wiki/blob/master/INSTALL.md).
## Security Notice
In its current form, W2 wiki is not security-hardened; it's recommended to only run on an additionally secured server (e.g. in a small, private network for one user only; and secured behind a VPN and/or HTTPS with basic authentication).
## License
W2 is licensed under the [MIT license](https://github.com/codeling/w2wiki/blob/master/LICENSE).
## Acknowledgements
Originally written by [Steven Frank](https://github.com/panicsteve/w2wiki) and others, with modifications by
- [44uk](https://github.com/44uk/w2wiki)
- [knee-cola](https://github.com/knee-cola/w2wiki)
- [namvan](https://github.com/namvan/w2wiki)
- [nickodell](https://github.com/nickodell/w2wiki)
- [pilem](https://github.com/pilem/w2)
W2 wiki uses [PHP Markdown](https://github.com/michelf/php-markdown) by Michel Fortin for rendering Markdown to HTML.
The [Markdown syntax](https://github.com/codeling/w2wiki/blob/master/pages/MarkdownSyntax.md) description is taken from [daringfireball.net](https://daringfireball.net/projects/markdown/syntax).
Maintainer of this fork is [codeling](https://github.com/codeling/w2wiki).
## Reporting Bugs
Please report bugs in [the github issue tracker](https://github.com/codeling/w2wiki/issues) of this fork.

85
config.php Normal file → Executable file
View file

@ -1,11 +1,10 @@
<?php
<?php if (!defined('W2APP')){ die('No direct access.'); }
/*
* W2
*
* Copyright (C) 2007-2009 Steven Frank <http://stevenf.com/>
* Code may be re-used as long as the above copyright notice is retained.
* See README.txt for full details.
* See README.md for full details.
*
* Written with Coda: <http://panic.com/coda/>
*
@ -15,19 +14,24 @@
// Site layout settings
// --------------------
// BASE_PATH
//
// The base system path to W2. You only need to change this if we guess wrong.
// You should not use a trailing slash.
define('BASE_PATH', getcwd());
// PAGES_PATH
//
// The path to the raw text documents maintained by W2
// You should not use a trailing slash.
define('PAGES_PATH', BASE_PATH . '/pages');
define('PAGES_PATH', dirname(__FILE__). '/pages');
// UPLOAD_FOLDER
//
// The subfolder in PAGES_PATH that uploads get stored to
define('UPLOAD_FOLDER', 'images');
// PAGES_EXT
//
// The extension of the Markdown files in the PAGES_PATH
// folder which are displayed by W2
define('PAGES_EXT', 'md');
// BASE_URI
//
@ -62,6 +66,18 @@ define('DEFAULT_PAGE', 'Home');
define('CSS_FILE', 'index.css');
// SIDEBAR_FILE
//
// The name of the page to be shown as sidebar (leave empty to disable sidebar feature)
define ('SIDEBAR_PAGE', '_sidebar');
// PAGE_TITLE
//
// A title prepended to the title head tag of all pages of the wiki
define ('PAGE_TITLE', 'Wiki: ');
// --------------------
// File upload settings
// --------------------
@ -77,14 +93,14 @@ define('DISABLE_UPLOADS', false);
// Acceptable file types for file uploads. This is a good idea for security.
// Value is a comma-separated string of MIME types.
define('VALID_UPLOAD_TYPES', 'image/jpeg,image/pjpeg,image/png,image/gif,application/pdf,application/zip,application/x-diskcopy');
define('VALID_UPLOAD_TYPES', 'image/jpeg,image/pjpeg,image/png,image/gif,application/pdf');
// VALID_UPLOAD_EXTS
//
// Acceptable filename extensions for file uploads
// Value is a comma-separated string of filename extensions (case-sensitive!)
define('VALID_UPLOAD_EXTS', 'jpg,jpeg,png,gif,pdf,zip,dmg');
define('VALID_UPLOAD_EXTS', 'jpg,jpeg,png,gif,pdf');
// ------------------
// Interface settings
@ -95,6 +111,8 @@ define('VALID_UPLOAD_EXTS', 'jpg,jpeg,png,gif,pdf,zip,dmg');
// The format to use when displaying page modification times.
// See the manual for the PHP 'date()' function for the specification:
// http://php.net/manual/en/function.date.php
// Note that these settings are overridden by the
// date_format/date_format_no_time in the used locale!
define('TITLE_DATE', 'j-M-Y g:i A');
define('TITLE_DATE_NO_TIME', 'j-M-Y');
@ -113,13 +131,6 @@ define('EDIT_ROWS', 18);
define('AUTOLINK_PAGE_TITLES', false);
// COLORIZE_MISSING_PAGES
//
// Automatically highlights as red links, any linked pages which are
// not yet written. Existing but blank pages are not colorized. This
// might degrade performance if you have thousands of links on a page.
define('COLORIZE_MISSING_PAGES', true);
// -----------------------------
// Security and session settings
@ -170,4 +181,36 @@ define('W2_SESSION_LIFETIME', 60 * 60 * 24 * 30);
define('W2_SESSION_NAME', 'W2');
?>
// -----------------------------
// Git Integration
// -----------------------------
// GIT_COMMIT_ENABLED
//
// Enable/Disable committing changes in page folder to local git repository
define('GIT_COMMIT_ENABLED', false);
// GIT_PUSH_ENABLED
//
// Enable/Disable pushing changes in page folder to a remote git repository
define('GIT_PUSH_ENABLED', false);
// -----------------------------
// Locale and encoding settings
// -----------------------------
// W2_CHARSET
//
// Value for meta charset.
define('W2_CHARSET', 'UTF-8');
// W2_LOCALE
//
// Name for locale.
define('W2_LOCALE', 'en');

12
icons/close.svg Executable file
View file

@ -0,0 +1,12 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#232629;
}
.ColorScheme-NegativeText {
color:#da4453;
}</style>
</defs>
<path class="ColorScheme-Text" d="m2 2v12h12v-12h-12m1 2h10v9h-10v-9" fill="#0f0f0f"/>
<path class="ColorScheme-NegativeText" d="m6.2 6l-.707.707 1.793 1.793-1.793 1.793.707.707 1.793-1.793 1.793 1.793.707-.707-1.793-1.793 1.793-1.793-.707-.707-1.793 1.793" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 556 B

8
icons/delete-dark.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-NegativeText {
color:#da4453;
}</style>
</defs>
<path class="ColorScheme-NegativeText" d="m5 2v2h1v-1h4v1h1v-2h-5zm-3 3v1h2v8h8v-8h2v-1zm3 1h6v7h-6z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 342 B

8
icons/delete.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-NegativeText {
color:#da4453;
}</style>
</defs>
<path class="ColorScheme-NegativeText" d="m5 2v2h1v-1h4v1h1v-2h-5zm-3 3v1h2v8h8v-8h2v-1zm3 1h6v7h-6z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 342 B

8
icons/edit-dark.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m10.4 2-8.398 8.398v3.602h3.602l8.398-8.398-3.602-3.602zm-2.049 3.49 2.16 2.16-3.174 3.176v-0.6758l-1.014 0.02148h-1.035v-1.035-0.5859l1.441-1.439 1.621-1.621zm-4.076 4.074v1.621h1.035 0.9922l0.02148 0.6523-1.08 1.082h-1.441l-0.7207-0.7207v-1.441l1.193-1.193z" fill="#0f0f0f"/>
</svg>

After

Width:  |  Height:  |  Size: 522 B

8
icons/edit.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m10.4 2-8.398 8.398v3.602h3.602l8.398-8.398-3.602-3.602zm-2.049 3.49 2.16 2.16-3.174 3.176v-0.6758l-1.014 0.02148h-1.035v-1.035-0.5859l1.441-1.439 1.621-1.621zm-4.076 4.074v1.621h1.035 0.9922l0.02148 0.6523-1.08 1.082h-1.441l-0.7207-0.7207v-1.441l1.193-1.193z" fill="#f0f0f0"/>
</svg>

After

Width:  |  Height:  |  Size: 522 B

8
icons/format-text-bold.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m2.375 2c-0.1285 0-0.2515 0.01355-0.375 0.03125v0.9688c0.5523 0 1 0.4477 1 1v8c0 0.5523-0.4477 1-1 1v0.9688c0.1235 0.018 0.2465 0.03125 0.375 0.03125h7.875c2.078 0 3.75-1.672 3.75-3.75 0-1.654-1.082-3.03-2.562-3.531 0.6331-0.4784 1.062-1.236 1.062-2.094 0-1.454-1.171-2.625-2.625-2.625h-7.5zm3.625 1h3c0.5523 0 1 0.8954 1 2s-0.4477 2-1 2h-3v-4zm0 5h3c0.05347 0 0.1038 0.0261 0.1562 0.03125 1.03 0.1012 1.844 1.155 1.844 2.469 0 1.381-0.8954 2.5-2 2.5h-3v-5z" fill="#f0f0f0"/>
</svg>

After

Width:  |  Height:  |  Size: 720 B

8
icons/format-text-code.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m9.09 2-3.146 11.74 0.9668 0.2598 3.146-11.74-0.9668-0.2598zm-3.805 2-2.961 3.145-0.3242 0.3477 0.3242 0.3457 2.943 3.162 0.7148-0.6953-2.621-2.812 2.639-2.797-0.7148-0.6953zm5.43 0-0.7148 0.6953 2.639 2.797-2.621 2.812 0.7148 0.6953 2.943-3.162 0.3242-0.3457-0.3242-0.3477-2.961-3.145z" fill="currentColor"/>
</svg>

After

Width:  |  Height:  |  Size: 554 B

13
icons/format-text-italic.svg Executable file
View file

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<defs id="defs3051">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#eff0f1;
}
</style>
</defs>
<path style="fill:currentColor;fill-opacity:1;stroke:none"
d="M 5 2 L 5 3 L 6 3 L 9 3 L 4.71875 13 L 2 13 L 2 14 L 4.28125 14 L 6.28125 14 L 10 14 L 11 14 L 11 13 L 10 13 L 7 13 L 11.28125 3 L 14 3 L 14 2 L 11.71875 2 L 9.71875 2 L 6 2 L 5 2 z "
class="ColorScheme-Text"
/>
</svg>

After

Width:  |  Height:  |  Size: 533 B

8
icons/home.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m8 2-0.707 0.6992 0.003906 0.003906-5.297 5.295v0.001953 1h1.008v4h-0.007812v1h10v-1-4h1v-1-0.001953l-1.143-1.143-0.7012 0.7012 0.4434 0.4434h-0.5996v5h-3v-3h-2v3h-3v-4-1h-0.5996l4.598-4.596 0.001953 0.001953 0.001953-0.001953 1.441 1.439 0.7012-0.7012-1.441-1.439 0.003906-0.003906-0.707-0.6992zm3 1v3h1.008v-3h-1.008z" fill="#f0f0f0"/>
</svg>

After

Width:  |  Height:  |  Size: 582 B

BIN
icons/internet.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

10
icons/link-dark.svg Executable file
View file

@ -0,0 +1,10 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<g transform="translate(-3 -1033)">
<path class="ColorScheme-Text" transform="translate(0 1030)" d="m4 7c-0.554 0-1 0.446-1 1v6c0 0.554 0.446 1 1 1h5c0.554 0 1-0.446 1-1v-1h2v1c0 0.554 0.446 1 1 1h5c0.554 0 1-0.446 1-1v-6c0-0.554-0.446-1-1-1h-5c-0.554 0-1 0.446-1 1v1h-2v-1c0-0.554-0.446-1-1-1zm0 1h5v1c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1v1h-5zm9 0h5v6h-5v-1c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1zm-4 2h4v2h-4z" fill="#0f0f0f"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 659 B

10
icons/link.svg Executable file
View file

@ -0,0 +1,10 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<g transform="translate(-3 -1033)">
<path class="ColorScheme-Text" transform="translate(0 1030)" d="m4 7c-0.554 0-1 0.446-1 1v6c0 0.554 0.446 1 1 1h5c0.554 0 1-0.446 1-1v-1h2v1c0 0.554 0.446 1 1 1h5c0.554 0 1-0.446 1-1v-6c0-0.554-0.446-1-1-1h-5c-0.554 0-1 0.446-1 1v1h-2v-1c0-0.554-0.446-1-1-1zm0 1h3 2v1c-0.554 0-1 0.446-1 1v2c0 0.554 0.446 1 1 1v1h-2-3zm9 0h3 2v6h-2-3v-1c0.554 0 1-0.446 1-1v-2c0-0.554-0.446-1-1-1zm-4 2h4v2h-4z" fill="#f0f0f0"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 667 B

8
icons/list.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m2 2v12h12v-12zm1 1h10v10h-10zm1 1v1h8v-1zm0 3v1h8v-1zm0 3v1h8v-1z" fill="#f0f0f0"/>
</svg>

After

Width:  |  Height:  |  Size: 329 B

13
icons/new.svg Executable file
View file

@ -0,0 +1,13 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<defs id="defs3051">
<style type="text/css" id="current-color-scheme">
.ColorScheme-Text {
color:#eff0f1;
}
</style>
</defs>
<path style="fill:currentColor;fill-opacity:1;stroke:none"
d="M 3 2 L 3 14 L 8 14 L 8 13 L 4 13 L 4 3 L 9 3 L 9 6 L 12 6 L 12 9 L 13 9 L 13 6 L 13 5 L 10 2 L 9 2 L 3 2 z M 10 9 L 10 11 L 8 11 L 8 12 L 10 12 L 10 14 L 11 14 L 11 12 L 13 12 L 13 11 L 11 11 L 11 9 L 10 9 z "
class="ColorScheme-Text"
/>
</svg>

After

Width:  |  Height:  |  Size: 559 B

17
icons/rename-dark.svg Executable file
View file

@ -0,0 +1,17 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<g fill="none" stroke="#0f0f0f">
<path d="m4.5 5v6" stroke-width="1px"/>
<g stroke-width="1px">
<path d="m3 4.5h3"/>
<path d="m3 11.5h3"/>
<path d="m8 11.5h2"/>
<path d="m11 11.5h2"/>
</g>
<rect x="1.5" y="2.5" width="13" height="11" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 519 B

17
icons/rename.svg Executable file
View file

@ -0,0 +1,17 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<g fill="none" stroke="#f0f0f0">
<path d="m4.5 5v6" stroke-width="1px"/>
<g stroke-width="1px">
<path d="m3 4.5h3"/>
<path d="m3 11.5h3"/>
<path d="m8 11.5h2"/>
<path d="m11 11.5h2"/>
</g>
<rect x="1.5" y="2.5" width="13" height="11" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 519 B

8
icons/upload.svg Executable file
View file

@ -0,0 +1,8 @@
<svg version="1.1" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
<defs>
<style id="current-color-scheme" type="text/css">.ColorScheme-Text {
color:#eff0f1;
}</style>
</defs>
<path class="ColorScheme-Text" d="m2 2v11.28 0.7188h12v-1-1-1-1-3h-1v2l-2-2-3.344 3.344-1.344-1.344h-0.03125l-3.281 3.281v-9.281h6v-1h-7zm9 5h1v-3.086l2 2v-1.414l-2.5-2.5-2.5 2.5v1.414l2-2v3.086zm-5-3c-1.105 0-2 0.8954-2 2s0.8954 2 2 2 2-0.8954 2-2-0.8954-2-2-2z" fill="#f0f0f0"/>
</svg>

After

Width:  |  Height:  |  Size: 491 B

BIN
icons/w2-icon.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

4
images/.gitignore vendored Executable file
View file

@ -0,0 +1,4 @@
# Ignore everything
*
# except this file
!.gitignore

418
index.css Normal file → Executable file
View file

@ -8,32 +8,26 @@
*
* Written with Coda: <http://panic.com/coda/>
*
* colors icons:
* 240,240,240
* dark: 15, 15, 15
*/
.main {
background-color: #000000;
color: #ffffff;
}
body {
background-color: #000000;
}
* {
font-family: Monospace;
font-size: 11px;
margin: 0;
padding: 0;
margin: 0;
padding: 0;
}
a {
color: #6666ff;
body {
background-color: #363636;
}
blockquote {
background-color: #0f070f;
margin: 0px 0px 12px 20px;
padding-top: 4px 10px 4px 10px;
margin: 4px 4px 12px 20px;
padding: 4px 10px 4px 10px;
}
form {
@ -45,25 +39,30 @@ li {
}
h1 {
font-size: 20px;
font-size: 2em;
font-weight: bold;
margin-bottom: 8px;
margin-bottom: 4px;
/*margin-top: .6em;*/
}
h2 {
font-size: 16px;
font-size: 1.2em;
font-weight: bold;
margin-bottom: 8px;
margin-bottom: 4px;
margin-top: .5em;
}
h3 {
font-size: 13px;
font-size: 1.2em;
font-weight: bold;
margin-bottom: 8px;
}
h3, h4, h5, h6 {
margin-top: .4em;
margin-bottom: 4px;
}
hr {
border-top: 1px solid #222222;
border-top: 1px solid #363636;
border-bottom: 0;
border-left: 0;
border-right: 0;
@ -71,29 +70,33 @@ hr {
margin-bottom: 12px;
}
ul {
padding-left: 12px;
margin-left: 12px;
margin-bottom: 12px;
list-style-position: inside;
ul,
ol {
margin-top: .5em;
margin-left: 1em;
padding-left: 1em;
list-style-position: outside;
}
ol {
margin-left: 12px;
margin-bottom: 12px;
padding-left: 12px;
list-style-position: inside;
ul li, ol li {
padding-left: .5em;
}
li > ul, li > ol
{
margin-top: 0;
}
p {
margin: 12px 12px 12px 12px;
margin-top: 1.5em;
margin-bottom: 1.5em;
}
pre {
font-family: Monospace, monospace;
font-size: 11px;
margin-left: 12px;
margin-bottom: 12px;
font-family: Monospace;
margin-left: 0;
margin-bottom: .5em;
margin-top: .5em;
/* stroke each browser so that they wrap lines in the pre tag */
white-space: pre-wrap; /* css-3 */
@ -101,84 +104,307 @@ pre {
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
background: #212121;
border: 1px dotted gray;
padding: .2em .2em .2em .4em;
}
code {
font-family: Monospace, monospace;
font-size: 11px;
font-family: Monospace;
background: #212121;
color: #bbbbbb;
padding: .1em .1em .1em .2em;
}
table {
border-collapse: collapse;
padding: .2em;
max-width: 99%;
background-color: #212121;
color: #dddddd;
}
table, td {
background-color: #000000;
padding: 2px;
th {
text-align: left;
}
td, th {
padding: .1em 1em .1em .1em;
word-break: break-all;
background: #212121;
}
thead {
border-bottom: 1px solid black;
font-weight: bold;
}
thead td a {
text-decoration:none;
}
thead td span.sortBy:after {
content: "\25BC";
}
tr:nth-child(even) {
background: #e4e4e4;
}
tr:nth-child(odd) {
background: #eeeeee;
}
.pageActions {
padding-left: 8px;
padding-right: 8px;
}
textarea {
font-family: Monospace, Courier, monospace;
font-size: 11px;
width: 99%;
background-color: #000011;
color: #ffffff;
font-family: Monospace;
width: 75%;
background-color: #212121;
color: #f0eee4;
}
@media (max-width: 600px), (orientation: portrait) {
textarea {
width: 99%;
}
}
.main {
padding: 8px;
}
.note {
background-color: #000011;
padding: 4px;
margin: 0 8px 8px 8px;
color: #9999bb;
border: solid 1px #9999bb;
}
.titlebar {
background-color: #111111;
color: #ffffff;
font-size: 10px;
font-weight: bold;
}
.titledate {
font-size: 10px;
color: #777777;
}
.toolbar {
background-color: #222222;
position: sticky;
top: 0;
font-size: 8px;
}
a.tool {
font-size: 11px;
margin-right: 8px;
color: #eeeeee;
}
a.missing-link {
color: #ed123e;
input[type="text"],
textarea {
padding: 2px;
}
input {
background-color: #111111;
color: #ffffff;
font-family: Monospace;
}
input.tool {
font-size: 11px;
background-color: #222222;
color: #ffffff;
input#gitmsg
{
width: 60%;
}
.main {
padding: .3em .3em .3em 1em;
background-color: #212121;
color: #f0eee4;
}
.main a {
color: #89bfff;
text-decoration: none;
transition: 0.1s;
}
.main a:hover {
color: #ccccff;
text-decoration: underline;
}
/* the globe */
.main a[href^="http"]::after {
/*content: url('/icons/internet.png');*/
}
.main a.literalMatch {
font-weight: bold;
color: #6666ff;
}
.main a.noexist {
color: #f34000 !important;
}
.login {
margin: 40px auto;
max-width: 650px;
line-height: 1.4;
}
.note {
background-color: #212121;
padding: 4px;
margin: .5em 0 .5em 0;
color: #6666ff;
border: solid 1px #6666ff;
width: 75%;
}
@media (max-width: 600px), (orientation: portrait) {
.note {
width: 99%;
}
}
.titlebar {
background-color: #262626;
color: #89bfff;
padding: 2px;
}
.titlebar span.title {
font-size: 10px;
font-weight: bold;
margin: 5px;
}
.titledate {
font-size: 0.90em;
color: #777777;
margin-left: 1em;
margin-right: 1em;
}
.toolbar {
background-color: #363636;
position: sticky;
top: 0;
font-size: 2px;
}
.toolbar > a, .titlebar > a {
font-size: 0.90em;
margin-right: 1em;
color: #eeeeee;
text-decoration: none;
font-weight: normal;
}
.toolbar > a:hover, .titlebar > a:hover {
text-decoration: underline;
}
.sidebar {
float: right;
}
.sidebar, .linkshere {
margin-right: 5px;
margin-top: 5px;
padding: 4px;
border: solid 1px #666644;
}
.sidebar ul {
margin-top: 0;
margin-left: 4px;
}
.linkshere {
width: 50%;
margin-left: 5px;
}
@media (max-width: 600px), (orientation: portrait) {
.sidebar, .linkshere {
margin-left: 5px;
float: none;
width: auto;
}
}
input.search {
/* font-size: 0.95em;*/
color: #212121;
width: 5em;
padding: .1em;
}
input.search:focus {
width: 15em;
}
input.pagename {
width: 20em;
}
/* buttons (non-colors) */
input[type="button"],
input[type="submit"] {
border:none;
border-radius: 3px;
padding: .5em 1em;
cursor: pointer;
margin-right: .5em;
}
#maxsizelabel {
margin-right: 1em;
}
/* buttons (such as for the edit page) */
input[type="submit"] {
background-color: #f0eee4;
color: black;
}
input[type="button"] {
background-color: #363636;
color: white;
}
input[type="submit"]:hover {
background-color: #f0eee4;
color: black;
}
input[type="button"]:hover {
background-color: #363636;
color: white;
}
img {
max-width: 50%;
height: auto;
max-width: 50%;
height: auto;
}
#drawer {
display: inline-block;
position: absolute;
width: 300px;
background-color: rgb(240, 240, 240);
opacity: 0.5;
border: 1px solid black;
border-radius: 5px;
padding: 0;
cursor: move;
}
#drawer h5 {
border-bottom: 1px solid black;
padding: 4px;
}
#drawer div {
padding: 4px;
}
#drawer:hover {
opacity: 1.0;
}
.inactive {
display: none !important;
}
img.icon {
width: 1.5em;
vertical-align: middle;
}
a > img.icon:hover, a > span.icongroup:hover {
outline: 1px outset white;
}
a > img.icon:active, a > span.icongroup:active {
outline: 1px inset white;
}
.rightaligned
{
float: right;
}
input.search {
border-color: #363636;
border-width: 0px;
background-color: #363636;
color: #f0eee4;
width: 165px
}
.sidebar {
color: #aaaaaa;
border-color: #aaaaaa;
background-color: #262626;
}
.sidebar a {
color: #19bfff;
text-decoration: none;
transition: 0.1s;
}
.sidebar a:hover {
color: #bbbbff;
text-decoration: underline;
}

362
index.css.2 Executable file
View file

@ -0,0 +1,362 @@
/*
* W2
*
* Copyright (C) 2007-2011 Steven Frank <http://stevenf.com/>
*
* Code may be re-used as long as the above copyright notice is retained.
* See README.txt for full details.
*
* Written with Coda: <http://panic.com/coda/>
*
* colors icons:
* 240,240,240
* dark: 15, 15, 15
*/
* {
font-family: Monospace;
margin: 0;
padding: 0;
font-size: 11px;
}
body {
background-color: #eeeeee;
}
blockquote {
background-color: #0f070f;
margin: 4px 4px 12px 20px;
padding: 4px 10px 4px 10px;
}
form {
display: inline;
}
li {
line-height: 1.5em;
}
h1 {
font-size: 2em;
font-weight: bold;
margin-bottom: 4px;
margin-top: .6em;
}
h2 {
font-size: 1.6em;
font-weight: bold;
margin-bottom: 4px;
margin-top: .5em;
}
h3 {
font-size: 1.2em;
font-weight: bold;
}
h3, h4, h5, h6 {
margin-top: .4em;
margin-bottom: 4px;
}
hr {
border-top: 1px solid #222222;
border-bottom: 0;
border-left: 0;
border-right: 0;
margin-top: 12px;
margin-bottom: 12px;
}
ul,
ol {
margin-top: .5em;
margin-left: 1em;
padding-left: 1em;
list-style-position: outside;
}
ul li, ol li {
padding-left: .5em;
}
li > ul, li > ol
{
margin-top: 0;
}
p {
margin-top: .5em;
}
pre {
font-family: Monospace;
margin-left: 0;
margin-bottom: .5em;
margin-top: .5em;
/* stroke each browser so that they wrap lines in the pre tag */
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
background: #ffc;
border: 1px dotted gray;
padding: .2em .2em .2em .4em;
}
code {
font-family: Monospace;
background: #ffc;
padding: .1em .1em 0 .2em;
}
table {
border-collapse: collapse;
padding: .2em;
max-width: 99%;
background-color: #000000;
color: #ffffff;
}
th {
text-align: left;
}
td, th {
padding: .1em 1em .1em .1em;
word-break: break-all;
}
thead {
border-bottom: 1px solid black;
font-weight: bold;
}
thead td a {
text-decoration:none;
}
thead td span.sortBy:after {
content: "\25BC";
}
tr:nth-child(even) {
background: #e4e4e4;
}
tr:nth-child(odd) {
background: #eeeeee;
}
.pageActions {
padding-left: 8px;
padding-right: 8px;
}
textarea {
font-family: Monospace;
width: 75%;
background-color: #000011;
color: #ffffff;
}
@media (max-width: 600px), (orientation: portrait) {
textarea {
width: 99%;
}
}
input[type="text"],
textarea {
padding: 2px;
}
input#gitmsg
{
width: 60%;
}
.main {
padding: .3em .3em .3em 1em;
background-color: #000000;
color: #ffffff;
}
.main a[href^="http"]::after {
content: url('/icons/internet.png');
}
.main a.literalMatch {
font-weight: bold;
color: #00f;
}
.main a.noexist {
color: #b00 !important;
}
.login {
margin: 40px auto;
max-width: 650px;
line-height: 1.4;
}
.note {
background-color: #000011;
padding: 4px;
margin: .5em 0 .5em 0;
color: #9999bb;
border: solid 1px #9999bb;
width: 75%;
}
@media (max-width: 600px), (orientation: portrait) {
.note {
width: 99%;
}
}
.titlebar {
background-color: #111111;
color: #ffffff;
}
.titlebar span.title {
font-size: 10px;
font-weight: bold;
}
.titledate {
font-size: 0.90em;
color: #777777;
margin-left: 1em;
margin-right: 1em;
}
.toolbar {
background-color: #222222;
position: sticky;
top: 0;
font-size: 8px;
}
.toolbar > a, .titlebar > a {
font-size: 0.90em;
margin-right: 1em;
color: #eeeeee;
text-decoration: none;
font-weight: normal;
}
.toolbar > a:hover, .titlebar > a:hover {
text-decoration: underline;
}
.sidebar {
float: right;
}
.sidebar, .linkshere {
margin-right: 5px;
margin-top: 5px;
padding: 4px;
border: solid 1px #666644;
}
.sidebar ul {
margin-top: 0;
margin-left: 4px;
}
.linkshere {
width: 50%;
margin-left: 5px;
}
@media (max-width: 600px), (orientation: portrait) {
.sidebar, .linkshere {
margin-left: 5px;
float: none;
width: auto;
}
}
input.search {
/* font-size: 0.95em;*/
color: #000000;
width: 5em;
padding: .1em;
}
input.search:focus {
width: 15em;
}
input.pagename {
width: 20em;
}
input[type="button"],
input[type="submit"] {
border:none;
border-radius: 3px;
padding: .5em 1em;
cursor: pointer;
margin-right: .5em;
}
#maxsizelabel {
margin-right: 1em;
}
input[type="submit"] {
background-color: rgb(30, 101, 201);
color: white;
}
input[type="button"] {
background-color: rgb(220, 220, 220);
}
input[type="submit"]:hover {
background-color: rgb(69, 135, 226);
}
input[type="button"]:hover {
background-color: rgb(200, 200, 200);
}
img {
max-width: 100%;
height: auto;
}
#drawer {
display: inline-block;
position: absolute;
width: 300px;
background-color: rgb(240, 240, 240);
opacity: 0.5;
border: 1px solid black;
border-radius: 5px;
padding: 0;
cursor: move;
}
#drawer h5 {
border-bottom: 1px solid black;
padding: 4px;
}
#drawer div {
padding: 4px;
}
#drawer:hover {
opacity: 1.0;
}
.inactive {
display: none !important;
}
img.icon {
width: 1.5em;
vertical-align: middle;
}
a > img.icon:hover, a > span.icongroup:hover {
outline: 1px outset white;
}
a > img.icon:active, a > span.icongroup:active {
outline: 1px inset white;
}
a.missing-link {
color: #ba0000;
}
.rightaligned
{
float: right;
}

1219
index.php Normal file → Executable file

File diff suppressed because it is too large Load diff

65
locales/de.php Executable file
View file

@ -0,0 +1,65 @@
<?php if (!defined('W2APP')){ die('No direct access.'); }
/**
* Locale set
*
* Do not change variable name $w2_word_set.
* Rewrite values in your locale and rename this file to locale code.
* Set "LOCALE" to your locale in config.php.
*/
$w2_word_set = array(
// Buttons / Labels
'Home' => 'Start',
'New' => 'Neu',
'Edit' => 'Bearbeiten',
'Delete' => 'Löschen',
'Rename' => 'Umbenennen',
'Created' => 'Angelegt',
'Upload' => 'Hochladen',
'All' => 'Alle',
'Recent' => 'Zuletzt',
'Exit' => 'Ausloggen',
'Search' => 'Suchen',
'Formatting help' => 'Formatierungshilfe',
'Bold' => 'Fett',
'Emphasize' => 'Kursiv',
'Header' => 'Überschrift',
'Save' => 'Speichern',
'Cancel' => 'Abbrechen',
'Saved' => 'Gespeichert',
'Log In' => 'Einloggen',
'Log Out' => 'Ausloggen',
'Password' => 'Passwort',
'Title' => 'Titel',
'Image Description' => 'Bildbeschreibung',
'Name' => 'Name',
'Usage' => 'Verwendung',
'Modified' => 'Verändert',
'Action' => 'Aktion',
'Total' => 'Gesamt',
'images' => 'Bilder',
'matches' => 'Übereinstimmung(en)',
'pages' => 'Seite(n)',
'Create page' => 'Seite anlegen',
'to' => 'in',
'Shrink if larger than ' => 'Verkleinern wenn größer als ',
'Pixels' => 'Pixel',
'What links here:' => 'Seiten die hierher linken:',
'Close' => 'Schließen',
// Messages
'Upload error' => 'Fehler beim Hochladen',
'Upload error: invalid file type' => 'Fehler beim Hochladen: Dieser Dateityp ist nicht zugelassen, bitte wende Dich an deinen Administrator!',
'Image uploading has been disabled on this installation.' => 'Hochladen ist nicht erlaubt, bitte wende Dich an deinen Administrator!',
'Creating new page since no page with given title exists!' => 'Es wird eine neue Seite angelegt, weil noch keine Seite mit dem angegebenen Titel existiert!',
'Updated links in the following pages:' => 'Es wurden Links in den folgenden Seiten aktualisiert:',
'Error deleting file' => 'Fehler beim Löschen der Datei',
'Error renaming file' => 'Fehler beim Umbenennen der Datei',
'Sidebar file could not be found' => 'Seitenleisten-Datei nicht gefunden',
'Name of new page (restrictions in tip)' => 'Seitenname (Einschränkungen im Tip)',
"Character restrictions: '#' and '|' have a special meaning in page links, they will therefore be removed; also, characters '~', '/', '\\', ':', '|', '&' might cause trouble in filenames and are therefore replaced by '-'." => "Buchstaben-Beschränkungen: '#' und '|' haben eine spezielle Bedeutung in Links, sie werden deshalb entfernt. Weiters können die Zeichen '~', '/', '\\', ':', '|', '&' Probleme in Dateinamen verursachen, und werden deshalb durch einen Bindestrich '-' ersetzt.",
'Image deleted' => 'Bild gelöscht',
'Error deleting image' => 'Fehler beim Löschen des Bildes',
// Override TITLE_DATE and TITLE_DATE_NO_TIME if set.
'date_format' => 'd.m.Y H:i',
'date_format_no_time' => 'd.m.Y',
);

32
locales/en.php Executable file
View file

@ -0,0 +1,32 @@
<?php if (!defined('W2APP')){ die('No direct access.'); }
/**
* Locale set
*
* Do not change variable name $w2_word_set.
* Rewrite values in your locale and rename this file to locale code.
* Set "LOCALE" to your locale in config.php.
*/
$w2_word_set = array(
// Buttons / Labels
'Home' => 'Home',
'New' => 'New',
'Edit' => 'Edit',
'Upload' => 'Upload',
'All' => 'All',
'Recent' => 'Recent',
'Exit' => 'Exit',
'Search' => 'Search',
'Save' => 'Save',
'Cancel' => 'Cancel',
'Saved' => 'Saved',
'Log In' => 'Log In',
'Title' => 'Title',
// Messages
'Upload error' => 'Upload error',
'Upload error: invalid file type' => 'Upload error: invalid file type',
'Image uploading has been disabled on this installation.' => 'Image uploading has been disabled on this installation.',
// Override TITLE_DATE and TITLE_DATE_NO_TIME if set.
'date_format' => 'Y-m-d H:i:s',
'date_format_no_time' => 'Y-m-d',
);

32
locales/ja.php Executable file
View file

@ -0,0 +1,32 @@
<?php if (!defined('W2APP')){ die('No direct access.'); }
/**
* Locale set
*
* Do not change variable name $w2_word_set.
* Rewrite values in your locale and rename this file to locale code.
* Set "LOCALE" to your locale in config.php.
*/
$w2_word_set = array(
// Buttons / Labels
'Home' => 'ホーム',
'New' => '新規',
'Edit' => '編集',
'Upload' => 'アップロード',
'All' => '全て',
'Recent' => '最近',
'Exit' => 'ログアウト',
'Search' => '検索',
'Save' => '保存',
'Cancel' => 'キャンセル',
'Saved' => '保存しました',
'Log In' => 'ログイン',
'Title' => 'ページタイトル',
// Messages
'Upload error' => 'アップロードエラー',
'Upload error: invalid file type' => 'アップロードエラー:不正なファイル形式です',
'Image uploading has been disabled on this installation.' => '画像アップロードは許可されていません。',
// Override TITLE_DATE and TITLE_DATE_NO_TIME if set.
'date_format' => 'Y-m-d H:i:s',
'date_format_no_time' => 'Y-m-d',
);

32
locales/sample.php Executable file
View file

@ -0,0 +1,32 @@
<?php if (!defined('W2APP')){ die('No direct access.'); }
/**
* Locale set
*
* Do not change variable name $w2_word_set.
* Rewrite values in your locale and rename this file to locale code.
* Set "LOCALE" to your locale in config.php.
*/
$w2_word_set = array(
// Buttons / Labels
'Home' => 'Home',
'New' => 'New',
'Edit' => 'Edit',
'Upload' => 'Upload',
'All' => 'All',
'Recent' => 'Recent',
'Exit' => 'Exit',
'Search' => 'Search',
'Save' => 'Save',
'Cancel' => 'Cancel',
'Saved' => 'Saved',
'Log In' => 'Log In',
'Title' => 'Title',
// Messages
'Upload error' => 'Upload error',
'Upload error: invalid file type' => 'Upload error: invalid file type',
'Image uploading has been disabled on this installation.' => 'Image uploading has been disabled on this installation.',
// Override TITLE_DATE and TITLE_DATE_NO_TIME if set.
'date_format' => 'Y-m-d H:i:s',
'date_format_no_time' => 'Y-m-d',
);

0
mdlibs/Markdown.inc.php → md/Markdown.inc.php Normal file → Executable file
View file

38
mdlibs/Markdown.php → md/Markdown.php Normal file → Executable file
View file

@ -8,7 +8,7 @@
* @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/>
*/
namespace mdlibs;
namespace md;
/**
* Markdown Parser Class
@ -18,7 +18,7 @@ class Markdown implements MarkdownInterface {
* Define the package version
* @var string
*/
const MARKDOWNLIB_VERSION = "2.0";
const MARKDOWNLIB_VERSION = "1.9.0";
/**
* Simple function interface - Initialize the parser and return the result
@ -31,7 +31,7 @@ class Markdown implements MarkdownInterface {
*/
public static function defaultTransform($text) {
// Take parser class on which this function was called.
$parser_class = static::class;
$parser_class = \get_called_class();
// Try to take parser from the static parser list
static $parser_list;
@ -49,18 +49,22 @@ class Markdown implements MarkdownInterface {
/**
* Configuration variables
*/
/**
* Change to ">" for HTML output.
* @var string
*/
public $empty_element_suffix = " />";
/**
* The width of indentation of the output markup
* @var int
*/
public $tab_width = 4;
/**
* Change to `true` to disallow markup or entities.
* @var boolean
*/
public $no_markup = false;
public $no_entities = false;
@ -74,6 +78,7 @@ class Markdown implements MarkdownInterface {
/**
* Predefined URLs and titles for reference links and images.
* @var array
*/
public $predef_urls = array();
public $predef_titles = array();
@ -116,15 +121,19 @@ class Markdown implements MarkdownInterface {
* <li>List item two</li>
* <li>List item three</li>
* </ol>
*
* @var bool
*/
public $enhanced_ordered_list = false;
/**
* Parser implementation
*/
/**
* Regex to match balanced [brackets].
* Needed to insert a maximum bracked depth while converting to PHP.
* @var int
*/
protected $nested_brackets_depth = 6;
protected $nested_brackets_re;
@ -134,6 +143,7 @@ class Markdown implements MarkdownInterface {
/**
* Table of hash values for escaped characters:
* @var string
*/
protected $escape_chars = '\`*_{}[]()>#+-.!';
protected $escape_chars_re;
@ -165,6 +175,7 @@ class Markdown implements MarkdownInterface {
/**
* Internal hashes used during transformation.
* @var array
*/
protected $urls = array();
protected $titles = array();
@ -172,11 +183,13 @@ class Markdown implements MarkdownInterface {
/**
* Status flag to avoid invalid nesting.
* @var boolean
*/
protected $in_anchor = false;
/**
* Status flag to avoid invalid nesting.
* @var boolean
*/
protected $in_emphasis_processing = false;
@ -250,6 +263,7 @@ class Markdown implements MarkdownInterface {
/**
* Define the document gamut
* @var array
*/
protected $document_gamut = array(
// Strip link definitions, store in hashes.
@ -511,6 +525,7 @@ class Markdown implements MarkdownInterface {
/**
* Define the block gamut - these are all the transformations that form
* block-level tags like paragraphs, headers, and list items.
* @var array
*/
protected $block_gamut = array(
"doHeaders" => 10,
@ -582,6 +597,7 @@ class Markdown implements MarkdownInterface {
/**
* These are all the transformations that occur *within* block-level
* tags like paragraphs, headers, and list items.
* @var array
*/
protected $span_gamut = array(
// Process character escapes, code spans, and inline HTML
@ -708,7 +724,7 @@ class Markdown implements MarkdownInterface {
/**
* Callback method to parse referenced anchors
* @param array $matches
* @param string $matches
* @return string
*/
protected function _doAnchors_reference_callback($matches) {
@ -747,7 +763,7 @@ class Markdown implements MarkdownInterface {
/**
* Callback method to parse inline anchors
* @param array $matches
* @param string $matches
* @return string
*/
protected function _doAnchors_inline_callback($matches) {
@ -765,7 +781,7 @@ class Markdown implements MarkdownInterface {
$url = $this->encodeURLAttribute($url);
$result = "<a href=\"$url\"";
if ($title) {
if (isset($title)) {
$title = $this->encodeAttribute($title);
$result .= " title=\"$title\"";
}
@ -1089,6 +1105,7 @@ class Markdown implements MarkdownInterface {
/**
* Nesting tracker for list levels
* @var integer
*/
protected $list_level = 0;
@ -1259,8 +1276,9 @@ class Markdown implements MarkdownInterface {
/**
* Container for prepared regular expressions
* @var array
*/
protected $em_strong_prepared_relist = null;
protected $em_strong_prepared_relist;
/**
* Prepare regular expressions for searching emphasis tokens in any
@ -1808,7 +1826,7 @@ class Markdown implements MarkdownInterface {
/**
* String length function for detab. `_initDetab` will create a function to
* handle UTF-8 if the default function does not exist.
* can be a string or function
* @var string
*/
protected $utf8_strlen = 'mb_strlen';
@ -1865,7 +1883,9 @@ class Markdown implements MarkdownInterface {
return;
}
$this->utf8_strlen = function ($text) { return preg_match_all('/[\x00-\xBF]|[\xC0-\xFF][\x80-\xBF]*/', $text, $m); };
$this->utf8_strlen = function($text) {
return preg_match_all('/[\x00-\xBF]|[\xC0-\xFF][\x80-\xBF]*/', $text, $m);
};
}
/**

View file

35
mdlibs/MarkdownExtra.php → md/MarkdownExtra.php Normal file → Executable file
View file

@ -8,27 +8,31 @@
* @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/>
*/
namespace mdlibs;
namespace md;
/**
* Markdown Extra Parser Class
*/
class MarkdownExtra extends \mdlibs\Markdown {
class MarkdownExtra extends \md\Markdown {
/**
* Configuration variables
*/
/**
* Prefix for footnote ids.
* @var string
*/
public $fn_id_prefix = "";
/**
* Optional title attribute for footnote links.
* @var string
*/
public $fn_link_title = "";
/**
* Optional class attribute for footnote links and backlinks.
* @var string
*/
public $fn_link_class = "footnote-ref";
public $fn_backlink_class = "footnote-backref";
@ -39,6 +43,7 @@ class MarkdownExtra extends \mdlibs\Markdown {
* from displaying the arrow character as an emoji.
* Optionally use '^^' and '%%' to refer to the footnote number and
* reference number respectively. {@see parseFootnotePlaceholders()}
* @var string
*/
public $fn_backlink_html = '&#8617;&#xFE0E;';
@ -47,6 +52,7 @@ class MarkdownExtra extends \mdlibs\Markdown {
* added accessibility (to ensure backlink uniqueness).
* Use '^^' and '%%' to refer to the footnote number and reference number
* respectively. {@see parseFootnotePlaceholders()}
* @var string
*/
public $fn_backlink_title = "";
public $fn_backlink_label = "";
@ -55,33 +61,39 @@ class MarkdownExtra extends \mdlibs\Markdown {
* Class name for table cell alignment (%% replaced left/center/right)
* For instance: 'go-%%' becomes 'go-left' or 'go-right' or 'go-center'
* If empty, the align attribute is used instead of a class name.
* @var string
*/
public $table_align_class_tmpl = '';
/**
* Optional class prefix for fenced code block.
* @var string
*/
public $code_class_prefix = "";
/**
* Class attribute for code blocks goes on the `code` tag;
* setting this to true will put attributes on the `pre` tag instead.
* @var boolean
*/
public $code_attr_on_pre = false;
/**
* Predefined abbreviations.
* @var array
*/
public $predef_abbr = array();
/**
* Only convert atx-style headers if there's a space between the header and #
* @var boolean
*/
public $hashtag_protection = false;
/**
* Determines whether footnotes should be appended to the end of the document.
* If true, footnote html can be retrieved from $this->footnotes_assembled.
* @var boolean
*/
public $omit_footnotes = false;
@ -95,6 +107,7 @@ class MarkdownExtra extends \mdlibs\Markdown {
* `section` that will enclose the list of footnotes so they are
* reachable to accessibility tools the same way they would be with the
* default HTML output.
* @var null|string
*/
public $footnotes_assembled = null;
@ -136,22 +149,26 @@ class MarkdownExtra extends \mdlibs\Markdown {
/**
* Extra variables used during extra transformations.
* @var array
*/
protected $footnotes = array();
protected $footnotes_ordered = array();
protected $footnotes_ref_count = array();
protected $footnotes_numbers = array();
protected $abbr_desciptions = array();
/** @var string */
protected $abbr_word_re = '';
/**
* Give the current footnote number.
* @var integer
*/
protected $footnote_counter = 1;
/**
* Ref attribute for links
*/
* Ref attribute for links
* @var array
*/
protected $ref_attr = array();
/**
@ -198,13 +215,16 @@ class MarkdownExtra extends \mdlibs\Markdown {
/**
* Extra attribute parser
*/
/**
* Expression to use to catch attributes (includes the braces)
* @var string
*/
protected $id_class_attr_catch_re = '\{((?>[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,})[ ]*\}';
/**
* Expression to use when parsing in a context when no capture is desired
* @var string
*/
protected $id_class_attr_nocatch_re = '\{(?>[ ]*[#.a-z][-_:a-zA-Z0-9=]+){1,}[ ]*\}';
@ -320,29 +340,35 @@ class MarkdownExtra extends \mdlibs\Markdown {
/**
* HTML block parser
*/
/**
* Tags that are always treated as block tags
* @var string
*/
protected $block_tags_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|form|fieldset|iframe|hr|legend|article|section|nav|aside|hgroup|header|footer|figcaption|figure|details|summary';
/**
* Tags treated as block tags only if the opening tag is alone on its line
* @var string
*/
protected $context_block_tags_re = 'script|noscript|style|ins|del|iframe|object|source|track|param|math|svg|canvas|audio|video';
/**
* Tags where markdown="1" default to span mode:
* @var string
*/
protected $contain_span_tags_re = 'p|h[1-6]|li|dd|dt|td|th|legend|address';
/**
* Tags which must not have their contents modified, no matter where
* they appear
* @var string
*/
protected $clean_tags_re = 'script|style|math|svg';
/**
* Tags that do not need to be closed.
* @var string
*/
protected $auto_close_tags_re = 'hr|img|param|source|track';
@ -1222,7 +1248,6 @@ class MarkdownExtra extends \mdlibs\Markdown {
$head = $matches[1];
$underline = $matches[2];
$content = $matches[3];
$attr = [];
// Remove any tailing pipes for each line.
$head = preg_replace('/[|] *$/m', '', $head);

View file

View file

@ -4,11 +4,11 @@
*
* @package php-markdown
* @author Michel Fortin <michel.fortin@michelf.com>
* @copyright 2004-2021 Michel Fortin <https://michelf.com/projects/php-markdown/>
* @copyright 2004-2019 Michel Fortin <https://michelf.com/projects/php-markdown/>
* @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/>
*/
namespace mdlibs;
namespace md;
/**
* Markdown Parser Interface

View file

@ -1,3 +0,0 @@
#!/bin/sh
URL="https://codeberg.org/speedie/speedwm/raw/branch/master"
tree -I md5 -f --noreport --charset ascii | grep -vE "profiles|metadata|md5|Manifest|README|xml|repo_name|conf|directories|push|tree|LICENSE" | sed -e 's/| \+/ /g' -e 's/[|`]-\+/ */g' -e 's:\(* \)\(\(.*/\)\([^/]\+\)\):\1[\4](\2):g' | tail -n+2 | sed "s|]([.]|](${URL}|g"

183
pages/Getting Started.md Executable file
View file

@ -0,0 +1,183 @@
Getting Started
---------------
[speedwm](https://speedie.gq/projects/speedwm.php) is a window manager forked
from [dwm](https://dwm.suckless.org) (also known as dynamic window manager).
It manages the user's open windows and tiles them according to a set layout.
This is what makes it dynamic, unlike windows managers like i3 which you may
be used to.
### This is an X11 window manager, you need to use X.
Yes, this is an X11 window manager. I do not like Wayland and it's
philosophies, and I will not
support it for multiple reasons. See for my reasoning
behind this. Hate me all you want for it!
If it isn't clear, `xorg-server` as well as `xinit` or `sx` is pretty much
expected. You can also use display managers like `sddm` or `lightdm` although
it should be mentioned that `ly` is **known** to have issues with dwm and
therefore also
speedwm. Do note that setting up X11 is out of the scope of this wiki, and you
need to figure out how to do that yourself.
### Supported operating systems
This is not some arbitrary requirement. While it may run if it's not listed
here, I will not be providing support due to having a lack of experience with
said operating system. The main operating systems that **do not** support
speedwm are macOS and Microsoft Windows. UNIX like operating systems are the
most likely to run it.
- Nearly all GNU/Linux distributions
- NixOS and GNU Guix may require separate instructions. I will not provide
support for these, use the existing documentation to set it up.
- FreeBSD, OpenBSD, NetBSD
- There are likely more BSDs that can run speedwm, but I cannot support all
of them. Try it and see if it works.
### Installation on Gentoo GNU/Linux
Gentoo has slightly different instructions for setting up speedwm. While you
can follow along with the generic installation instructions, I have a Gentoo
overlay with packages for all speedwm versions.
To get started, add [my
overlay](https://codeberg.org/speedie/speedie-overlay). Then simply `emerge
x11-wm/speedwm x11-wm/libspeedwm x11-wm/speedwm-extras`. Optionally, you may
`emerge x11-misc/spde` instead, which is a metapackage for a lot of stuff
including fonts, and general programs that work well for me.
If you want to install speedwm using Git, do this by adding the following
lines:
`=x11-wm/speedwm-9999 **`
`=x11-wm/libspeedwm-9999 **`
`=x11-wm/speedwm-extras-9999 **`
to `/etc/portage/package.accept_keywords` and then emerging the packages as
per the instructions above.
### Installation on generic GNU/Linux distributions
Installing speedwm on most GNU/Linux distributions is very simple. First,
determine if you want to install it using Git (the absolute latest version) or
using a stable tarball.
As of 26/01/2023, 1.8 is the latest tarball release
which is not very stable. For this reason, it is recommended that you `git
clone` the repository. If you do not have `git`, install it using your
distribution's package manager. If you're (still) going to be using a 'stable'
tarball, you do not need to install `git`.
While the list of dependencies will vary depending on the speedwm version
you're going to install (see docs/dependencies.md for your specific version),
below is a list for the latest release, 1.8 and soon to be 1.9.
- libXft
- libXinerama
- Used for multi-monitor support. It can be disabled if you do not need it
by commenting the XINERAMA libraries in `toggle.mk`.
- imlib2
- Used for tag previews and window icons. It can be disabled if you do not
need it. To do this, comment out `IMLIB2LIBS` in `toggle.mk` and set
`USEIMLIB2`, `USEWINICON` and `USETAGPREVIEW` to `0` in `toggle.h`.
- pango
- yajl
- Used for IPC support. It can be disabled if you do not need it. To do
this, comment out `YAJLINC` and `YAJLLIBS` in `toggle.mk` and set `USEIPC`
to `0` in `toggle.h`.
- tcc
- This is a compiler. It is used because it is much faster than `clang` or
`gcc` (although at the expense of debugging and compatibility). You can
swap it out by passing `CC=cc` to the `make` command later when we compile
speedwm.
#### Installation using `git`
This assumes you have `git` installed.
`cd` into a location where your normal user (not root) has permission to both
read and write. Do not clone the speedwm repository in `~/.config` as speedwm
will write configuration files to that location.
<span style="color:blue">Note: Cloning the repository to `~/.config` is fine
if the speedwm source code directory is **not** `speedwm` but speedwm
will use the `~/.config/speedwm` directory to store configuration files (not
source code).</span>
From here on, we're going to assume you are in the location `~/Documents`! Run
`git clone https://codeberg.org/speedie/speedwm.git speedwm` to clone the
repository into a directory named `speedwm`. Provided the repository hasn't
moved and you have a working internet connection, you should have received a
copy of the speedwm source code.
You can now `cd speedwm` into it so we can actually install it. If you need to
make changes to `toggle.h`, `toggle.mk`, `host.mk` or any other C source code,
now is the time to do it.
Now, it's time to compile it! Provided you have all dependencies installed,
this should be very, very easy and quick. Run `make clean install` as root to install
speedwm. The binary will be in `/usr/bin/speedwm`. If you need to use a
different compiler (tcc in Arch repositories has a few issues), you can run
`make CC=cc clean install` to use the system default compiler. Alternatively
use `gcc` instead of `cc` or whatever you want.
After installation, it is *highly* recommended that you move your source code
directory to a safe place. speedwm is a source based window manager and
**most** (but not all) changes you make to it are going to be done by
recompiling the window manager. This is, of course done with the same `make
clean install` command you used earlier.
I recommend you do this by forking the speedwm repository, and putting it on a
Git repository somewhere. That way, you can always clone your specific
version.
<span style="color:red">Warning: If you lose your source code, you will be
**unable** to make any further changes to speedwm.</span>
Now follow along with 'Using speedwm'.
#### Installation using a tarball
Installation using a tarball works pretty much the same. Visit [the releases
page](https://codeberg.org/speedie/speedwm/releases) and get the latest
(or an old if you want) tarball. Avoid the 'Source Code (ZIP)' and 'Source
Code (TAR.GZ)' options, get the 'speedwm-<version>.tar.gz' file.
`cd` into a location where your normal user (not root) has permission to both
read and write. Make sure `~/.config/speedwm` is not used by anything.
Now we need to unpack the tarball and get our source code. To do this, you can
use the `tar` command. I will spare you the time reading the man page and the
command to unpack the tarball is `tar -xpvf
/path/to/the/speedwm/tarball.tar.gz`. The `-x` argument here means extract.
`-p` means preserve permissions. The `-v` means verbose, we want to see
what's going on. `-f` means file, we want to specify a file to unpack.
After unpacking it, there should be one directory; `speedwm-<version>`. Let's
`cd speedwm-<version>` into it. Now it's time to compile speedwm!
Provided you have all dependencies installed, this should be very, very easy
and quick. Run `make clean install` as root to install speedwm. The binary
will be in `/usr/bin/speedwm`. If you need to use a different compiler (tcc in
Arch repostories has a few issues), you can run `make CC=cc clean install` to
use the system default compiler. Alternatively use `gcc` instead of `cc` or
whatever you want.
After installation, it is *highly* recommended that you move your source code
directory to a safe place. speedwm is a source based window manager and
**most** (but not all) changes you make to it are going to be done by
recompiling the window manager. This is, of course done with the same `make
clean install` command you used earlier.
I recommend you do this by putting the source code on a
Git or subversion repository somewhere. That way, you can always clone your specific
version.
<span style="color:red">Warning: If you lose your source code, you will be
**unable** to make any further changes to speedwm.</span>
Now follow along with 'Using speedwm'.

4
pages/Home.md Executable file
View file

@ -0,0 +1,4 @@
Welcome to the speedie.site wiki!
---------------------------------
Welcome to the speedie.site wiki! This is a wiki that anyone may edit. It is mostly related to speedie.site projects such as fontctrl, spmenu and others, although [speedwm](https://speedwm.speedie.site) has its own wiki.

View file

@ -1,4 +0,0 @@
Welcome to the speedie.gq wiki!
-------------------------------
Welcome to the very much work in progress speedie.gq wiki!

View file

@ -0,0 +1,173 @@
# Code documentation
NOTE: This article was taken from [the spmenu repository](https://git.speedie.site/spmenu/plain/code.pdf). This article therefore be outdated or vice versa. I highly recommend you check out the repository first though.
Some of spmenu's code documented. If you want to hack on the project, this
should be useful. Note that these may be renamed in the future to make the
codebase easier to understand and make changes to. Also note that this is
**definitely not** a complete list.
## Position and width/height variables
- `bh`
- Menu height divided by lines gets you `bh`. The name comes from dwm's `bh`
meaning 'bar height'. This is the height of each item in the list.
- `mh`
- Menu height (or height of the window)
- Use `drw_resize()` and `XResizeWindow()` to adjust this.
- `mw`
- Menu width (or width of the window)
- Use `drw_resize()` and `XResizeWindow()` to adjust this.
- `2 * borderwidth` is removed from `mw` (2* because we have two sides)
- `2 * sp` is removed from `mw` (2* because we have two sides)
- `x`
- X position, functions like `drw_text` use this.
- If you set this in bar drawing functions, you must apply the same
to `buttonpress()`, otherwise clicks will be offset.
- `y`
- Y position, functions like `drw_text` use this.
- If you set this in bar drawing functions, you must apply the same
to `buttonpress()`, otherwise clicks will be offset.
- `ev->x`
- X position where you clicked. This is used in the `buttonpress()` function
to check where you clicked.
- `ev->y`
- Y position where you clicked. This is used in the `buttonpress()` function
to check where you clicked.
- `w`
- Width of something, this is passed to `drw_text()` for example, but you may
override this.
- `plw`
- This is the width of the powerline arrow. It must be added on in
the `buttonpress()` and draw functions.
- `vp`
- Vertical padding, this is initially added on in the `create_window()` function.
- `sp`
- Horizontal padding, this is initially added on in the `create_window()` function.
- `promptw`
- Width of the prompt text, this is going to be the same as `TEXTW(prompt)`.
- `inputw`
- Width of the input text.
- `fh`
- Font height. Used to calculate the height of the cursor. See `drawcaret()`.
- `menuposition`
- Integer the user is meant to configure. If it's set to `0`, spmenu will be
put on the bottom of the screen. If it's set to `1` it will be put on the
top of the screen. If it's `2` it will be put in the center of the screen.
- `wa.width`
- Window width, `wa` is `XWindowAttributes`.
- `wa.height`
- Window height, `wa` is `XWindowAttributes`.
- `imageheight`
- Image height, This is **not** the height of the image, it is the height
that the image will be scaled to fit.
- `imagewidth`
- Image width, This is **not** the width of the image, it is the width
that the image will be scaled to fit.
- `imagegaps`
- Image gaps, this is extra space added around the image.
- `imageh`
- Usually the same as `imageheight`. This is what `imageheight` is initially
set to.
- `imagew`
- Usually the same as `imagewidth`. This is what `imagewidth` is initially
set to.
- `imageg`
- Usually the same as `imagegaps`. This is what `imagegaps` is initially set to.
- `longestedge`
- As the name implies, it is the longest (highest value) of `imageheight` and `imagewidth`.
- `numberWidth`
- Integer set in some functions, it is simply `TEXTW(numbers)` if the match
count isn't hidden.
- `modeWidth`
- Integer set in some functions, it is simply `TEXTW(modetext)` if the mode
indicator isn't hidden.
- `larrowWidth`
- Integer set in some functions, it is simply `TEXTW(leftarrow)` if the left
arrow isn't hidden.
- `rarrowWidth`
- Integer set in some functions, it is simply `TEXTW(rightarrow)` if the right
arrow isn't hidden.
- `powerlinewidth`
- Integer set in some functions, it is simply `plw / 2` if powerlines are enabled.
- `curpos`
- Cursor/caret position. When text is added to the input, the width of that text
is added to this.
## Drawable abstraction functions
Most of these are in `libs/sl/draw.c` and `libs/sl/draw.h`.
- `drw_create(Display *dpy, int screen, Window win, unsigned int w,
unsigned int h, Visual *visual, unsigned int depth, Colormap cmap);`
- This function creates a drawable from `Display *dpy`, `Drw`. Think of
it as a canvas.
- `drw_resize(Drw *drw, unsigned int w, unsigned int h)`
- This function resizes the drawable to the dimensions passed as
arguments (`w`, `h`).
- `drw_free(Drw *drw);`
- This function will free the drawable from memory. It is *usually* called in
cleanup functions like `cleanup()` so most of the time you don't need to use this.
## Font abstraction functions
Most of these are in `libs/sl/draw.c` and `libs/sl/draw.h`.
NOTE: These will differ slightly depending on if Pango is enabled or not.
- `drw_font_create(Drw* drw, char *font[], size_t fontcount);`
- This function will return a font libXft can use.
- `drw_font_free(Fnt *set);`
- This function will free the font from memory.
- `drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n, Bool markup);`
- This function returns the smallest value out of the passed argument `n`
and the length of the text drawn. The text is not actually drawn though.
- `drw_font_getwidth(Drw *drw, const char *text, Bool markup);`
- This function returns the width of drawn text. The text is not actually
drawn though.
- `drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned
int *w, unsigned int *h, Bool markup);`
- This function returns the length of the text with the used font.
## Colorscheme abstraction functions
- `drw_clr_create(Drw *drw, Clr *dest, char *clrname, unsigned int alpha);`
- This function allocates space for a color.
- `drw_scm_create(Drw *drw, char *clrnames[], unsigned int alphas[],
size_t clrcount);`
- This function returns a color scheme from an array of colors and alpha.
## Cursor abstraction functions
- `drw_cur_create(Drw *drw, int shape);`
- This function creates and returns a cursor.
- `drw_cur_free(Drw *drw, Cur *cursor);`
- This function will free the cursor from memory.
## Drawable context functions
- `drw_setscheme(Drw *drw, Clr *scm);`
- Sets the color scheme to `*scm` created by `drw_scm_create()`
## Drawing functions
- `drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, int filled
, int invert);`
- Draws a simple rectangle. Used in other functions to create more useful
shapes, such as a cursor.
- `drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsigned
int lpad, const char *text, int invert, Bool markup);`
- Draws text on the drawable using the font created. `const char *text`
contains the text itself.
## Map functions
- `drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsigned int h);`
- Maps the drawable. (makes it visible)
## Removed functions
Various functions that have been removed for some reason.
- `drw_setfont(Drw *drw, Fnt *set);`
- Sets the font.
- NOTE: Applies only if Pango is disabled.

View file

@ -0,0 +1,9 @@
# [spmenu] How to use the buildconf
This wiki article describes how to use the buildconf. It's really simple, and there's not much to say.
If you cloned spmenu from the [git repository](https://git.speedie.gq/spmenu), you should already have a default buildconf. This same config is used to build the Arch/Gentoo packages.
# Toggle image support
If you want to enable/disable image support (and as such, the `imlib2` dependency), you may set `imlib2=true` or `imlib2=false` in the buildconf.

5
pages/_sidebar.md Executable file
View file

@ -0,0 +1,5 @@
Useful articles:
- [[Home]]
- [[[spmenu] Code documentation]]
- [[[spmenu] How to use the buildconf]]

30
run.sh Executable file
View file

@ -0,0 +1,30 @@
#!/bin/sh
#
# crontab this to run every X minutes
# 5 * * * * /usr/bin/run.sh
die() { printf "%s\n" "$*"; exit 1; }
WIKINAME="wiki"
POST_DIR="$1"
[ -z "$1" ] && POST_DIR="/var/www/page/$WIKINAME/pages"
[ -e "$POST_DIR" ] || die "You must specify a VALID path. Edit $0."
cd "$POST_DIR" || die "Does not exist."
pwd
[ -e "/tmp/markdown-log" ] && mv /tmp/markdown-log /tmp/markdown-log-2
find ./*md > /tmp/markdown-log
[ -e "/tmp/markdown-log-2" ] || exit 0
[ -z "$(diff -up /tmp/markdown-log /tmp/markdown-log-2)" ] && exit 0
git add ./*.md
git commit -am "Add articles"
printf "%s - Added articles" "$(date)" > /tmp/markdown-crontab-log
exit 0

21
tests/travis-ci-apache.conf Executable file
View file

@ -0,0 +1,21 @@
<VirtualHost *:80>
DocumentRoot %TRAVIS_BUILD_DIR%
<Directory "%TRAVIS_BUILD_DIR%/">
Options FollowSymLinks MultiViews ExecCGI
AllowOverride All
Require all granted
</Directory>
# Wire up Apache to use Travis CI's php-fpm.
<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
<Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
</IfModule>
</VirtualHost>