Remove speedie.site wiki
21
LICENSE
|
@ -1,21 +0,0 @@
|
||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2013 Steven Frank
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
60
README.md
|
@ -1,60 +0,0 @@
|
||||||
# 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.
|
|
||||||
|
|
216
config.php
|
@ -1,216 +0,0 @@
|
||||||
<?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.md for full details.
|
|
||||||
*
|
|
||||||
* Written with Coda: <http://panic.com/coda/>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// --------------------
|
|
||||||
// Site layout settings
|
|
||||||
// --------------------
|
|
||||||
|
|
||||||
// PAGES_PATH
|
|
||||||
//
|
|
||||||
// The path to the raw text documents maintained by W2
|
|
||||||
// You should not use a trailing slash.
|
|
||||||
|
|
||||||
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
|
|
||||||
//
|
|
||||||
// The base URI for this W2 installation. You only need to change this if we guess wrong.
|
|
||||||
// You should not use a trailing slash.
|
|
||||||
|
|
||||||
define('BASE_URI', str_replace('/index.php', '', $_SERVER['SCRIPT_NAME']));
|
|
||||||
|
|
||||||
// SELF
|
|
||||||
//
|
|
||||||
// The path component of the URL to the main script, such as: /w2/index.php
|
|
||||||
|
|
||||||
define('SELF', $_SERVER['SCRIPT_NAME']);
|
|
||||||
|
|
||||||
// VIEW
|
|
||||||
//
|
|
||||||
// Needed only if your web server spawns PHP as a CGI instead of an internal module.
|
|
||||||
// For example: define('VIEW', '?action=view&page=');
|
|
||||||
|
|
||||||
define('VIEW', '');
|
|
||||||
|
|
||||||
// DEFAULT_PAGE
|
|
||||||
//
|
|
||||||
// The name of the page to show as the "Home" page.
|
|
||||||
// Value is a string, the title of a page (case-sensitive!)
|
|
||||||
|
|
||||||
define('DEFAULT_PAGE', 'Home');
|
|
||||||
|
|
||||||
// CSS_FILE
|
|
||||||
//
|
|
||||||
// The CSS file to load to style the wiki, relative to BASE_URI
|
|
||||||
|
|
||||||
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
|
|
||||||
// --------------------
|
|
||||||
|
|
||||||
// DISABLE_UPLOADS
|
|
||||||
//
|
|
||||||
// Globally enable/disable file uploads
|
|
||||||
|
|
||||||
define('DISABLE_UPLOADS', false);
|
|
||||||
|
|
||||||
// VALID_UPLOAD_TYPES
|
|
||||||
//
|
|
||||||
// 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');
|
|
||||||
|
|
||||||
// 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');
|
|
||||||
|
|
||||||
// ------------------
|
|
||||||
// Interface settings
|
|
||||||
// ------------------
|
|
||||||
|
|
||||||
// TITLE_DATE
|
|
||||||
//
|
|
||||||
// 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');
|
|
||||||
|
|
||||||
// EDIT_ROWS
|
|
||||||
//
|
|
||||||
// Default size of the text editing area in text rows.
|
|
||||||
|
|
||||||
define('EDIT_ROWS', 18);
|
|
||||||
|
|
||||||
// AUTOLINK_PAGE_TITLES
|
|
||||||
//
|
|
||||||
// Automatically converts any page titles appearing in text into links
|
|
||||||
// to the named page. This might degrade performance if you have many
|
|
||||||
// thousands of pages.
|
|
||||||
|
|
||||||
define('AUTOLINK_PAGE_TITLES', false);
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------
|
|
||||||
// Security and session settings
|
|
||||||
// -----------------------------
|
|
||||||
|
|
||||||
// REQUIRE_PASSWORD
|
|
||||||
//
|
|
||||||
// Is a password required to access this wiki?
|
|
||||||
|
|
||||||
define('REQUIRE_PASSWORD', false);
|
|
||||||
|
|
||||||
// W2_PASSWORD
|
|
||||||
//
|
|
||||||
// The password for the wiki, if REQUIRE_PASSWORD is true
|
|
||||||
// Replace 'secret' with your password to set your password.
|
|
||||||
|
|
||||||
define('W2_PASSWORD', 'secret');
|
|
||||||
|
|
||||||
// W2_PASSWORD_HASH
|
|
||||||
//
|
|
||||||
// Alternate (more secure) password storage.
|
|
||||||
// To use a hashed password, Comment out the W2_PASSWORD definition above and uncomment
|
|
||||||
// this one, using the result of sha1('your_password') as the value.
|
|
||||||
//
|
|
||||||
// In Mac OS X, you can do this from the Terminal:
|
|
||||||
// echo -n 'your_password' | openssl sha1
|
|
||||||
//
|
|
||||||
// define('W2_PASSWORD_HASH', 'e5e9fa1ba31ecd1ae84f75caaa474f3a663f05f4');
|
|
||||||
|
|
||||||
define('W2_PASSWORD_HASH', '');
|
|
||||||
|
|
||||||
// allowedIPs
|
|
||||||
//
|
|
||||||
// A whitelist of IP addresses that are allowed access to the wiki.
|
|
||||||
// If empty, all IPs are allowed.
|
|
||||||
|
|
||||||
$allowedIPs = array();
|
|
||||||
|
|
||||||
// W2_SESSION_LIFETIME
|
|
||||||
//
|
|
||||||
// How long before a login session expires? Default is 30 days
|
|
||||||
|
|
||||||
define('W2_SESSION_LIFETIME', 60 * 60 * 24 * 30);
|
|
||||||
|
|
||||||
// W2_SESSION_NAME
|
|
||||||
//
|
|
||||||
// Name for session (used in the cookie)
|
|
||||||
|
|
||||||
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');
|
|
|
@ -1,12 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 556 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 342 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 342 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 522 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 522 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 720 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 554 B |
|
@ -1,13 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 533 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 582 B |
Before Width: | Height: | Size: 886 B |
|
@ -1,10 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 659 B |
|
@ -1,10 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 667 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 329 B |
|
@ -1,13 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 559 B |
|
@ -1,17 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 519 B |
|
@ -1,17 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 519 B |
|
@ -1,8 +0,0 @@
|
||||||
<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>
|
|
Before Width: | Height: | Size: 491 B |
Before Width: | Height: | Size: 1.7 KiB |
4
images/.gitignore
vendored
|
@ -1,4 +0,0 @@
|
||||||
# Ignore everything
|
|
||||||
*
|
|
||||||
# except this file
|
|
||||||
!.gitignore
|
|
410
index.css
|
@ -1,410 +0,0 @@
|
||||||
/*
|
|
||||||
* 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;
|
|
||||||
font-size: 11px;
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
background-color: #363636;
|
|
||||||
}
|
|
||||||
|
|
||||||
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.2em;
|
|
||||||
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 #363636;
|
|
||||||
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: 1.5em;
|
|
||||||
margin-bottom: 1.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: #212121;
|
|
||||||
border: 1px dotted gray;
|
|
||||||
padding: .2em .2em .2em .4em;
|
|
||||||
}
|
|
||||||
|
|
||||||
code {
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
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;
|
|
||||||
width: 75%;
|
|
||||||
background-color: #212121;
|
|
||||||
color: #f0eee4;
|
|
||||||
}
|
|
||||||
@media (max-width: 600px), (orientation: portrait) {
|
|
||||||
textarea {
|
|
||||||
width: 99%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type="text"],
|
|
||||||
textarea {
|
|
||||||
padding: 2px;
|
|
||||||
}
|
|
||||||
|
|
||||||
input {
|
|
||||||
font-family: Monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
#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
|
@ -1,362 +0,0 @@
|
||||||
/*
|
|
||||||
* 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;
|
|
||||||
}
|
|
14
index.html
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Wiki</title>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="description" content="speedie.site wiki">
|
||||||
|
<meta name="author" content="speedie">
|
||||||
|
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<meta http-equiv="refresh" content="0;https://speedie.site" />
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
944
index.php
|
@ -1,944 +0,0 @@
|
||||||
<?php
|
|
||||||
define('W2APP', true);
|
|
||||||
/*
|
|
||||||
* 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/>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Install PSR-4-compatible class autoloader
|
|
||||||
spl_autoload_register(function($class){
|
|
||||||
require str_replace('\\', DIRECTORY_SEPARATOR, ltrim($class, '\\')).'.php';
|
|
||||||
});
|
|
||||||
|
|
||||||
// Get Markdown class
|
|
||||||
use md\MarkdownExtra;
|
|
||||||
|
|
||||||
|
|
||||||
// User configurable options:
|
|
||||||
require_once "config.php";
|
|
||||||
|
|
||||||
// Load configured localization:
|
|
||||||
require_once 'locales/' . W2_LOCALE . '.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get translated word
|
|
||||||
*
|
|
||||||
* String $label Key for locale word
|
|
||||||
* String $alt_word Alternative word
|
|
||||||
* return String
|
|
||||||
*/
|
|
||||||
function __( $label, $alt_word = null )
|
|
||||||
{
|
|
||||||
global $w2_word_set;
|
|
||||||
if( empty($w2_word_set[$label]) )
|
|
||||||
{
|
|
||||||
return is_null($alt_word) ? $label : $alt_word;
|
|
||||||
}
|
|
||||||
return htmlspecialchars($w2_word_set[$label], ENT_QUOTES);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( REQUIRE_PASSWORD )
|
|
||||||
{
|
|
||||||
ini_set('session.gc_maxlifetime', W2_SESSION_LIFETIME);
|
|
||||||
session_set_cookie_params(W2_SESSION_LIFETIME);
|
|
||||||
}
|
|
||||||
session_name(W2_SESSION_NAME);
|
|
||||||
session_start();
|
|
||||||
|
|
||||||
|
|
||||||
if ( count($allowedIPs) > 0 )
|
|
||||||
{
|
|
||||||
$ip = $_SERVER['REMOTE_ADDR'];
|
|
||||||
$accepted = false;
|
|
||||||
|
|
||||||
foreach ( $allowedIPs as $allowed )
|
|
||||||
{
|
|
||||||
if ( strncmp($allowed, $ip, strlen($allowed)) == 0 )
|
|
||||||
{
|
|
||||||
$accepted = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( !$accepted )
|
|
||||||
{
|
|
||||||
print "<html><body>Access from IP address $ip is not allowed</body></html>";
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function printHeader($title, $action, $bodyclass="")
|
|
||||||
{
|
|
||||||
print "<!doctype html>\n";
|
|
||||||
print "<html lang=\"" . W2_LOCALE . "\">\n";
|
|
||||||
print " <head>\n";
|
|
||||||
print " <meta charset=\"" . W2_CHARSET . "\">\n";
|
|
||||||
print " <link rel=\"icon\" href=\"/icons/w2-icon.png\"/>\n";
|
|
||||||
print " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n";
|
|
||||||
print " <link type=\"text/css\" rel=\"stylesheet\" href=\"" . BASE_URI . "/" . CSS_FILE ."\" />\n";
|
|
||||||
print " <title>".PAGE_TITLE."$title</title>\n";
|
|
||||||
print " </head>\n";
|
|
||||||
print " <body".($bodyclass != "" ? " class=\"$bodyclass\"":"").">\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
function printFooter()
|
|
||||||
{
|
|
||||||
print " </body>\n";
|
|
||||||
print "</html>";
|
|
||||||
}
|
|
||||||
|
|
||||||
function printDrawer()
|
|
||||||
{
|
|
||||||
print " <div id=\"drawer\" class=\"inactive\">\n".
|
|
||||||
" <a href=\"\" onclick=\"toggleDrawer(); return false;\"><img src=\"/icons/close.svg\" alt=\"".__('Close')."\" title=\"".__('Close')."\" class=\"icon rightaligned\"/></a>\n".
|
|
||||||
" <h5>".__('Markdown Syntax Helper')."</h5>\n".
|
|
||||||
" <div>\n".
|
|
||||||
"# ".__('Header')." 1<br/>".
|
|
||||||
"## ".__('Header')." 2<br/>".
|
|
||||||
"### ".__('Header')." 3<br/>".
|
|
||||||
"#### ".__('Header')." 4<br/>".
|
|
||||||
"##### ".__('Header')." 5<br/>".
|
|
||||||
"###### ".__('Header')." 6<br/>".
|
|
||||||
"<br/>".
|
|
||||||
"*".__('Emphasize')."* - <em>".__('Emphasize')."</em><br/>".
|
|
||||||
"_".__('Emphasize')."* - <em>".__('Emphasize')."</em><br/>".
|
|
||||||
"**".__('Bold')."** - <strong>".__('Bold')."</strong><br/>".
|
|
||||||
"__".__('Bold')."__ - <strong>".__('Bold')."</strong><br/>".
|
|
||||||
"<br/>".
|
|
||||||
"[[Link to page]]<br/>".
|
|
||||||
"<http://example.com/><br/>".
|
|
||||||
"[link text](http://url)<br/><br/>".
|
|
||||||
"{{image.jpg}}<br/>".
|
|
||||||
"![Alt text](/images/image.jpg)<br/>".
|
|
||||||
"![Alt text](/images/image.jpg \"Optional title\")<br/>".
|
|
||||||
"<br/>".
|
|
||||||
"- Unordered list<br/>".
|
|
||||||
"+ Unordered list<br/>".
|
|
||||||
"* Unordered list<br/>".
|
|
||||||
"1. Ordered list<br/>".
|
|
||||||
"<br/>".
|
|
||||||
"> Blockquote<br/>".// <blockquote>Blockquotes</blockquote>\n".
|
|
||||||
"```Code```<br/>". //<pre>Code</pre>\n\n".
|
|
||||||
"`inline-code`<br/><br/>".
|
|
||||||
"*** Horizontal rule<br/>".
|
|
||||||
"--- Horizontal rule<br/>\n".
|
|
||||||
" </div>\n".
|
|
||||||
" </div>\n".
|
|
||||||
" <a id=\"drawer-control\" href=\"\" onclick=\"toggleDrawer(); return false;\">\n".
|
|
||||||
" <span class=\"icongroup\">\n".
|
|
||||||
" <img src=\"/icons/format-text-bold.svg\" alt=\"".__('Formatting help')."\" title=\"".__('Formatting help')."\" class=\"icon\"/>\n".
|
|
||||||
" <img src=\"/icons/format-text-italic.svg\" alt=\"".__('Formatting help')."\" title=\"".__('Formatting help')."\" class=\"icon\"/>\n".
|
|
||||||
" <img src=\"/icons/format-text-code.svg\" alt=\"".__('Formatting help')."\" title=\"".__('Formatting help')."\" class=\"icon\"/>\n".
|
|
||||||
" </span>\n".
|
|
||||||
" </a>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( REQUIRE_PASSWORD && !isset($_SESSION['password']) )
|
|
||||||
{
|
|
||||||
if ( !defined('W2_PASSWORD_HASH') || W2_PASSWORD_HASH == '' )
|
|
||||||
define('W2_PASSWORD_HASH', sha1(W2_PASSWORD));
|
|
||||||
|
|
||||||
if ( (isset($_POST['p'])) && (sha1($_POST['p']) == W2_PASSWORD_HASH) )
|
|
||||||
$_SESSION['password'] = W2_PASSWORD_HASH;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printHeader( __('Log In'), '', "login");
|
|
||||||
print " <h1>" . __('Log In') . "</h1>\n";
|
|
||||||
print " <form method=\"post\">\n";
|
|
||||||
print " ".__('Password') . ": <input type=\"password\" name=\"p\">\n";
|
|
||||||
print " <input type=\"submit\" value=\"" . __('Log In') . "\">\n";
|
|
||||||
print " </form>\n";
|
|
||||||
printFooter();
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Support functions
|
|
||||||
|
|
||||||
function descLengthSort($val_1, $val_2)
|
|
||||||
{
|
|
||||||
$firstVal = strlen($val_1);
|
|
||||||
$secondVal = strlen($val_2);
|
|
||||||
return ( $firstVal > $secondVal ) ?
|
|
||||||
-1 : ( ( $firstVal < $secondVal ) ? 1 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getAllPageNames($path = "")
|
|
||||||
{
|
|
||||||
$filenames = array();
|
|
||||||
$dir = opendir(PAGES_PATH . "/$path" );
|
|
||||||
while ( $filename = readdir($dir) )
|
|
||||||
{
|
|
||||||
if ( $filename[0] == "." )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( is_dir( PAGES_PATH . "/$path/$filename" ) )
|
|
||||||
{
|
|
||||||
array_push($filenames, ...getAllPageNames( "$path/$filename" ) );
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ( preg_match("/".PAGES_EXT."$/", $filename) != 1)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$filename = substr($filename, 0, -(strlen(PAGES_EXT)+1) );
|
|
||||||
$filenames[] = substr("$path/$filename", 1);
|
|
||||||
}
|
|
||||||
closedir($dir);
|
|
||||||
return $filenames;
|
|
||||||
}
|
|
||||||
|
|
||||||
function fileNameForPage($page)
|
|
||||||
{
|
|
||||||
return PAGES_PATH . "/$page." . PAGES_EXT;
|
|
||||||
}
|
|
||||||
|
|
||||||
function imageLinkText($imgName)
|
|
||||||
{
|
|
||||||
return "![".__("Image Description")."](/".UPLOAD_FOLDER."/$imgName)";
|
|
||||||
}
|
|
||||||
|
|
||||||
function sanitizeFilename($inFileName)
|
|
||||||
{
|
|
||||||
return str_replace(array('~', '..', '\\', ':', '|', '&'), '-', $inFileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
function pageURL($page)
|
|
||||||
{
|
|
||||||
return SELF . VIEW . "/".str_replace("%2F", "/", str_replace("%23", "#", urlencode(sanitizeFilename($page))));
|
|
||||||
}
|
|
||||||
|
|
||||||
function pageLink($page, $title, $attributes="")
|
|
||||||
{
|
|
||||||
return "<a href=\"" . pageURL($page) ."\"$attributes>$title</a>";
|
|
||||||
/* wip
|
|
||||||
$link_page = $match[1];
|
|
||||||
$link_filename = PAGES_PATH . "/$link_page.txt";
|
|
||||||
$link_page_exists = file_exists($link_filename);
|
|
||||||
if ($link_page_exists)
|
|
||||||
return "<a href=\"" . pageURL($page) ."\"$attributes>$title</a>";
|
|
||||||
else
|
|
||||||
//return "<a href=\"" . SELF . VIEW . "/" . htmlentities($link_page) . "\" class=\"missing-link\">" . htmlentities($link_page) . "</a>";
|
|
||||||
return "<a href=\"" . pageURL($page) ."\" class=\"missing-link\" . $attributes>$title</a>";
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
function redirectWithMessage($page, $msg)
|
|
||||||
{
|
|
||||||
$_SESSION["msg"] = $msg;
|
|
||||||
header("HTTP/1.1 303 See Other");
|
|
||||||
header("Location: " . pageURL($page) );
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
function checkedExecute(&$msg, $cmd)
|
|
||||||
{
|
|
||||||
$returnValue = 0;
|
|
||||||
$output = '';
|
|
||||||
exec($cmd, $output, $returnValue);
|
|
||||||
if ($returnValue != 0)
|
|
||||||
{
|
|
||||||
$msg .= "<br/>Error executing command ".$cmd." (return value: ".$returnValue."): ".implode(" ", $output);
|
|
||||||
}
|
|
||||||
return ($returnValue == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
function gitChangeHandler($commitmsg, &$msg)
|
|
||||||
{
|
|
||||||
if (!GIT_COMMIT_ENABLED)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (checkedExecute($msg, "cd ".PAGES_PATH." && git add -A && git commit -m ".escapeshellarg($commitmsg)))
|
|
||||||
{
|
|
||||||
if (!GIT_PUSH_ENABLED)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
checkedExecute($msg, "cd ".PAGES_PATH." && git push");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function toHTMLID($noid)
|
|
||||||
{ // in HTML5, only spaces aren't allowed
|
|
||||||
return str_replace(" ", "-", $noid);
|
|
||||||
}
|
|
||||||
|
|
||||||
function toHTML($inText)
|
|
||||||
{
|
|
||||||
$parser = new MarkdownExtra;
|
|
||||||
$parser->no_markup = true;
|
|
||||||
$outHTML = $parser->transform($inText);
|
|
||||||
if ( AUTOLINK_PAGE_TITLES )
|
|
||||||
{
|
|
||||||
$pagenames = getAllPageNames();
|
|
||||||
uasort($pagenames, "descLengthSort");
|
|
||||||
foreach ( $pagenames as $pageName )
|
|
||||||
{
|
|
||||||
// match pageName, but only if it isn't inside another word or inside braces (as in "[$pageName]").
|
|
||||||
$outHTML = preg_replace("/(?<![\[a-zA-Z])$pageName(?![\]a-zA-Z])/i", "[[$pageName]]", $outHTML);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
preg_match_all(
|
|
||||||
"/\[\[(.*?)\]\]/",
|
|
||||||
$outHTML,
|
|
||||||
$matches,
|
|
||||||
PREG_PATTERN_ORDER
|
|
||||||
);
|
|
||||||
for ($i = 0; $i < count($matches[0]); $i++)
|
|
||||||
{
|
|
||||||
$fullLinkText = $matches[1][$i];
|
|
||||||
$linkTitleSplit = explode('|', $fullLinkText);
|
|
||||||
$linkedPage = $linkTitleSplit[0]; // split away an eventual link text
|
|
||||||
$linkText = (count($linkTitleSplit) > 1) ? $linkTitleSplit[1] : $linkedPage;
|
|
||||||
$pagePart = explode('#', $linkedPage)[0]; // split away an eventual anchor part
|
|
||||||
$linkedFilename = fileNameForPage(sanitizeFilename($pagePart));
|
|
||||||
$exists = file_exists($linkedFilename);
|
|
||||||
$outHTML = str_replace("[[$fullLinkText]]",
|
|
||||||
pageLink($linkedPage, $linkText, ($exists? "" : " class=\"noexist\"")), $outHTML);
|
|
||||||
}
|
|
||||||
$outHTML = preg_replace("/\{\{(.*?)\}\}/", "<img src=\"" . BASE_URI . "/images/\\1\" alt=\"\\1\" />", $outHTML);
|
|
||||||
|
|
||||||
// add an anchor in all title tags (h1/2/3/4):
|
|
||||||
preg_match_all(
|
|
||||||
"/<h([1-4])>(.*?)<\/h\\1>/",
|
|
||||||
$outHTML,
|
|
||||||
$matches,
|
|
||||||
PREG_PATTERN_ORDER
|
|
||||||
);
|
|
||||||
for ($i = 0; $i < count($matches[0]); $i++)
|
|
||||||
{
|
|
||||||
$prefix = "<h".$matches[1][$i].">";
|
|
||||||
$caption = $matches[2][$i];
|
|
||||||
$suffix = substr_replace($prefix, "/", 1, 0);
|
|
||||||
$outHTML = str_replace("$prefix$caption$suffix",
|
|
||||||
"$prefix<a id=\"".toHTMLID($caption)."\">$caption</a>$suffix", $outHTML);
|
|
||||||
}
|
|
||||||
return $outHTML;
|
|
||||||
}
|
|
||||||
|
|
||||||
function destroy_session()
|
|
||||||
{
|
|
||||||
if ( isset($_COOKIE[session_name()]) )
|
|
||||||
{
|
|
||||||
setcookie(session_name(), '', time() - 42000, '/');
|
|
||||||
}
|
|
||||||
session_destroy();
|
|
||||||
unset($_SESSION["password"]);
|
|
||||||
unset($_SESSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
function getPageActions($page, $action, $imgSuffix)
|
|
||||||
{
|
|
||||||
$pageActions = array('edit', 'delete', 'rename');
|
|
||||||
$pageActionNames = array(__('Edit'), __('Delete'), __('Rename'));
|
|
||||||
$result = '';
|
|
||||||
for ($i = 0; $i < count($pageActions); $i++ )
|
|
||||||
{
|
|
||||||
if ($action != $pageActions[$i])
|
|
||||||
{
|
|
||||||
$result .= " <a href=\"".SELF."?action=".$pageActions[$i].
|
|
||||||
"&page=".urlencode($page)."\"><img src=\"/icons/".$pageActions[$i].$imgSuffix.".svg\" alt=\"".$pageActionNames[$i]."\" title=\"".$pageActionNames[$i]."\" class=\"icon\"></a>\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$result .= " <a href=\"" . SELF . "?action=view&page=$page&linkshere=true\"><img src=\"/icons/link".$imgSuffix.".svg\" alt=\"".__('Show links here')."\" title=\"".__('Show links here')."\" class=\"icon\"/></a>\n";
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Main code
|
|
||||||
|
|
||||||
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'view';
|
|
||||||
$newPage = "";
|
|
||||||
$text = "";
|
|
||||||
$html = "";
|
|
||||||
if ($action === 'view' || $action === 'edit' || $action === 'save' || $action === 'rename' || $action === 'delete')
|
|
||||||
{
|
|
||||||
// Look for page name following the script name in the URL, like this:
|
|
||||||
// http://stevenf.com/w2demo/index.php/Markdown%20Syntax
|
|
||||||
//
|
|
||||||
// Otherwise, get page name from 'page' request variable.
|
|
||||||
|
|
||||||
$page = preg_match('@^/@', @$_SERVER["PATH_INFO"]) ?
|
|
||||||
urldecode(substr($_SERVER["PATH_INFO"], 1)) : urldecode(@$_REQUEST['page']);
|
|
||||||
$page = sanitizeFilename($page);
|
|
||||||
if ( $page == "" )
|
|
||||||
{
|
|
||||||
$page = DEFAULT_PAGE;
|
|
||||||
}
|
|
||||||
$filename = fileNameForPage($page);
|
|
||||||
}
|
|
||||||
if ($action === 'view' || $action === 'edit')
|
|
||||||
{
|
|
||||||
if ( file_exists($filename) )
|
|
||||||
{
|
|
||||||
$text = file_get_contents($filename);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$newPage = $page;
|
|
||||||
$action = 'new';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$oldgitmsg = "";
|
|
||||||
$triedSave = false;
|
|
||||||
if ( $action == 'save' )
|
|
||||||
{
|
|
||||||
$msg = '';
|
|
||||||
$newText = $_REQUEST['newText'];
|
|
||||||
$isNew = $_REQUEST['isNew'];
|
|
||||||
if ($isNew)
|
|
||||||
{
|
|
||||||
$page = str_replace(array('|','#'), '', $page);
|
|
||||||
$filename = fileNameForPage($page);
|
|
||||||
}
|
|
||||||
if ($isNew && file_exists($filename))
|
|
||||||
{
|
|
||||||
$msg .= "Error creating page '$page' - it already exists! Please choose a different name, or <a href=\"?action=edit&page=".urlencode($page)."\">edit</a> the existing page (this discards current text!)!</div>\n";
|
|
||||||
$action = 'new';
|
|
||||||
$text = $newText;
|
|
||||||
$newPage = $page;
|
|
||||||
if (GIT_COMMIT_ENABLED)
|
|
||||||
{
|
|
||||||
$oldgitmsg = $_REQUEST['gitmsg'];
|
|
||||||
}
|
|
||||||
$triedSave = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$errLevel = error_reporting(0);
|
|
||||||
if ( !file_exists( dirname($filename) ) ) {
|
|
||||||
mkdir(dirname($filename), 0755, true);
|
|
||||||
}
|
|
||||||
$success = file_put_contents($filename, $newText);
|
|
||||||
error_reporting($errLevel);
|
|
||||||
if ( $success === FALSE)
|
|
||||||
{
|
|
||||||
$msg .= "Error saving changes! Make sure your web server has write access to " . PAGES_PATH . "\n";
|
|
||||||
$action = ($isNew ? 'new' : 'edit');
|
|
||||||
$text = $newText;
|
|
||||||
$newPage = $page;
|
|
||||||
if (GIT_COMMIT_ENABLED)
|
|
||||||
{
|
|
||||||
$oldgitmsg = $_REQUEST['gitmsg'];
|
|
||||||
}
|
|
||||||
$triedSave = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$msg .= ($isNew ? __('Created'): __('Saved'));
|
|
||||||
$usermsg = $_REQUEST['gitmsg'];
|
|
||||||
$commitmsg = $page . ($usermsg !== '' ? (": ".$usermsg) : ($isNew ? " created" : " changed"));
|
|
||||||
gitChangeHandler($commitmsg, $msg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
redirectWithMessage($page, $msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( $action === 'edit' || $action === 'new' )
|
|
||||||
{
|
|
||||||
$formAction = SELF . (($action === 'edit') ? "/$page" : "");
|
|
||||||
$html .= "<form id=\"edit\" method=\"post\" action=\"$formAction\">\n";
|
|
||||||
|
|
||||||
if ( $action === 'edit' )
|
|
||||||
{
|
|
||||||
$html .= "<input type=\"hidden\" name=\"page\" value=\"$page\" />\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ($newPage != "" && !$triedSave)
|
|
||||||
{
|
|
||||||
$html .= "<div class=\"note\">". __('Creating new page since no page with given title exists!') ;
|
|
||||||
// check if similar page exists...
|
|
||||||
$pageNames = getAllPageNames();
|
|
||||||
foreach($pageNames as $pageName)
|
|
||||||
{
|
|
||||||
if (levenshtein(strtoupper($newPage), strtoupper($pageName)) < sqrt(min(strlen($newPage), strlen($pageName))) )
|
|
||||||
{
|
|
||||||
$html .= "<br/><strong>Note:</strong> Found similar page ".pageLink($pageName, $pageName).". Maybe you meant to edit this instead?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$html .= "</div>\n";
|
|
||||||
}
|
|
||||||
$html .= "<p>" . __('Title') . ": <input id=\"title\" title=\"".__("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 '-'.")."\" type=\"text\" name=\"page\" value=\"$newPage\" class=\"pagename\" placeholder=\"".__('Name of new page (restrictions in tip)')."\"/></p>\n";
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
$html .= "<p><textarea id=\"text\" name=\"newText\" rows=\"" . EDIT_ROWS . "\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\">$text</textarea></p>\n";
|
|
||||||
if (GIT_COMMIT_ENABLED)
|
|
||||||
{
|
|
||||||
$html .= "<p>Message: <input type=\"text\" id=\"gitmsg\" name=\"gitmsg\" value=\"$oldgitmsg\" /></p>\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$html .= "<p><input type=\"hidden\" name=\"action\" value=\"save\" />\n";
|
|
||||||
$html .= "<input type=\"hidden\" name=\"isNew\" value=\"".(($action==='new')?"true":"")."\" />\n";
|
|
||||||
$html .= '<input id="save" type="submit" value="'. __('Save') .'" />'."\n";
|
|
||||||
$html .= '<input id="cancel" type="button" onclick="history.go(-1);" value="'. __('Cancel') .'" />'."\n";
|
|
||||||
$html .= "</p></form>\n";
|
|
||||||
}
|
|
||||||
else if ( $action === 'logout' )
|
|
||||||
{
|
|
||||||
destroy_session();
|
|
||||||
header("Location: " . SELF);
|
|
||||||
exit;
|
|
||||||
}
|
|
||||||
else if ( $action === 'upload' )
|
|
||||||
{
|
|
||||||
if ( DISABLE_UPLOADS )
|
|
||||||
{
|
|
||||||
$html .= '<p>' . __('Image uploading has been disabled on this installation.') . '</p>';
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$html .= "<form id=\"upload\" method=\"post\" action=\"" . SELF . "\" enctype=\"multipart/form-data\"><p>\n".
|
|
||||||
"<input type=\"hidden\" name=\"action\" value=\"uploaded\" />".
|
|
||||||
"<input id=\"file\" type=\"file\" name=\"userfile\" />\n".
|
|
||||||
'<input id="resize" type="checkbox" checked="checked" name="resize" value="true">'.
|
|
||||||
'<label for="resize">'.__('Shrink if larger than ').'</label>'.
|
|
||||||
'<input id="maxsize" type="number" name="maxsize" min="20" max="8192" value="1200">'.
|
|
||||||
'<label for="maxsize" id="maxsizelabel">'.__('Pixels').'</label>'.
|
|
||||||
'<input id="upload" type="submit" value="' . __('Upload') . '" />'."\n".
|
|
||||||
'<input id="cancel" type="button" onclick="history.go(-1);" value="'. __('Cancel') .'" />'."\n";
|
|
||||||
"</p></form>\n";
|
|
||||||
}
|
|
||||||
// list files in UPLOAD_FOLDER
|
|
||||||
$path = PAGES_PATH . "/". UPLOAD_FOLDER . "/*";
|
|
||||||
$imgNames = glob($path);
|
|
||||||
natcasesort($imgNames);
|
|
||||||
$html .= "<p>".__('Total').": ".count($imgNames)." ".__('images')."</p>";
|
|
||||||
$html .= "<table><thead>";
|
|
||||||
$html .= "<tr>".
|
|
||||||
/*
|
|
||||||
"<td>".(($sortBy!='name')?("<a href=\"".SELF."?action=all&sortBy=name\">Name</a>"):"<span class=\"sortBy\">Name</span>")."</td>".
|
|
||||||
"<td>".(($sortBy!='recent')?("<a href=\"".SELF."?action=all&sortBy=recent\">Modified</a>"):"<span class=\"sortBy\">Modified</span>")."</td>".
|
|
||||||
*/ "<td>".__("Name")."</td><td>".__("Usage")."</td><td>".__("Modified")."</td><td>".__("Action")."</td>".
|
|
||||||
"</tr></thead><tbody>";
|
|
||||||
$date_format = __('date_format', TITLE_DATE);
|
|
||||||
foreach ($imgNames as $imgName)
|
|
||||||
{
|
|
||||||
$html .= "<tr>".
|
|
||||||
"<td>".basename($imgName)."</td>".
|
|
||||||
"<td><pre>".imageLinkText(basename($imgName))."</pre></td>".
|
|
||||||
"<td><nobr>".date($date_format, filemtime($imgName))."</nobr></td>".
|
|
||||||
"<td><a href=\"".SELF."?action=imgDelete"."&imgName=".urlencode(basename($imgName))."\">".__('Delete')."</a></td>".
|
|
||||||
"</tr>\n";
|
|
||||||
}
|
|
||||||
$html .= "</tbody></table>\n";
|
|
||||||
}
|
|
||||||
else if ( $action === 'uploaded' )
|
|
||||||
{
|
|
||||||
if ( DISABLE_UPLOADS )
|
|
||||||
{
|
|
||||||
die('Invalid access. Uploads are disabled in the configuration.');
|
|
||||||
}
|
|
||||||
$dstName = sanitizeFilename($_FILES['userfile']['name']);
|
|
||||||
$dstName = str_replace(" ", "_", $dstName); // image display currently doesn't like spaces!
|
|
||||||
$fileType = $_FILES['userfile']['type'];
|
|
||||||
preg_match('/\.([^.]+)$/', $dstName, $matches);
|
|
||||||
$fileExt = isset($matches[1]) ? $matches[1] : null;
|
|
||||||
$imgExts = array('jpg','jpeg','png','gif');
|
|
||||||
$msg = '';
|
|
||||||
if (in_array($fileType, explode(',', VALID_UPLOAD_TYPES)) &&
|
|
||||||
in_array($fileExt, explode(',', VALID_UPLOAD_EXTS)))
|
|
||||||
{
|
|
||||||
$path = PAGES_PATH . "/". UPLOAD_FOLDER . "/$dstName";
|
|
||||||
$resize = isset($_POST['resize']) && $_POST['resize'] === 'true';
|
|
||||||
$doResize = $resize && in_array($fileExt, $imgExts);
|
|
||||||
if ($doResize)
|
|
||||||
{
|
|
||||||
$exif = exif_read_data($_FILES['userfile']['tmp_name']);
|
|
||||||
$size = getimagesize($_FILES['userfile']['tmp_name']);
|
|
||||||
$maxsize = intval($_POST['maxsize']);
|
|
||||||
$doResize = ($size[0] > $maxsize || $size[1] > $maxsize);
|
|
||||||
if ($doResize)
|
|
||||||
{
|
|
||||||
$msg .= "trying to resize";
|
|
||||||
$finalPath = $path;
|
|
||||||
$path = substr($path, 0, strlen($path)-strlen($fileExt)-1) . "-tmp-resize." . $fileExt;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$errLevel = error_reporting(0);
|
|
||||||
if ( move_uploaded_file($_FILES['userfile']['tmp_name'], $path) === true )
|
|
||||||
{
|
|
||||||
$msg = "File '$dstName' uploaded! ";
|
|
||||||
if ($doResize)
|
|
||||||
{
|
|
||||||
$newSize = array(0, 0);
|
|
||||||
$idx0 = ($size[0] > $size[1]) ? 0 : 1;
|
|
||||||
$idx1 = ($idx0 == 0) ? 1 : 0;
|
|
||||||
$newSize[$idx0] = $maxsize;
|
|
||||||
$newSize[$idx1] = (int)round($size[$idx1] * $maxsize / $size[$idx0]);
|
|
||||||
$src = imagecreatefromstring(file_get_contents($path));
|
|
||||||
$dst = imagecreatetruecolor($newSize[0], $newSize[1]);
|
|
||||||
if (!imagecopyresampled($dst, $src, 0, 0, 0, 0, $newSize[0], $newSize[1], $size[0], $size[1]))
|
|
||||||
{
|
|
||||||
$msg .= "Resizing file failed!";
|
|
||||||
}
|
|
||||||
imagedestroy( $src );
|
|
||||||
if(!empty($exif['Orientation']))
|
|
||||||
{
|
|
||||||
switch($exif['Orientation'])
|
|
||||||
{
|
|
||||||
case 8:
|
|
||||||
$msg .= "Image rotated by +90°. ";
|
|
||||||
$rot = imagerotate($dst,90,0);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
$msg .= "Image rotated by 180°. ";
|
|
||||||
$rot = imagerotate($dst,180,0);
|
|
||||||
break;
|
|
||||||
case 6:
|
|
||||||
$msg .= "Image rotated by -90°. ";
|
|
||||||
$rot = imagerotate($dst,-90,0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
$msg .= "Unknown EXIF orientation specification: ".$exif['Orientation']."!";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if ($rot === false)
|
|
||||||
{
|
|
||||||
$msg .= "Rotation failed!";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
imagedestroy( $dst );
|
|
||||||
$dst = $rot;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($fileExt === 'png')
|
|
||||||
{
|
|
||||||
imagepng($dst, $finalPath);
|
|
||||||
}
|
|
||||||
else if ($fileExt === 'jpg' || $fileExt === 'jpeg')
|
|
||||||
{
|
|
||||||
imagejpeg($dst, $finalPath);
|
|
||||||
}
|
|
||||||
else if ($fileExt === 'gif')
|
|
||||||
{
|
|
||||||
imagegif($dst, $finalPath);
|
|
||||||
}
|
|
||||||
unlink($path);
|
|
||||||
imagedestroy( $dst );
|
|
||||||
}
|
|
||||||
gitChangeHandler($msg, $msg);
|
|
||||||
$msg .= " ($size[0]x$size[1]".(($doResize)?", resized to $newSize[0]x$newSize[1]":"").") successfully! Use <pre>".imageLinkText($dstName)."</pre> to refer to it!";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$error_code = $_FILES['userfile']['error'];
|
|
||||||
if ( $error_code === 0 ) {
|
|
||||||
// Likely a permissions issue
|
|
||||||
$msg .= __('Upload error') .": Can't write to ".$path."<br/><br/>\n".
|
|
||||||
"Check that your permissions are set correctly.";
|
|
||||||
} else {
|
|
||||||
// Give generic error message
|
|
||||||
$msg .= __('Upload error').", error #".$error_code."<br/><br/>\n".
|
|
||||||
"Please see <a href=\"https://www.php.net/manual/en/features.file-upload.errors.php\">here</a> for more information.<br/><br/>\n".
|
|
||||||
"If you see this message, please <a href=\"https://github.com/codeling/w2wiki/issues\">file a bug to improve w2wiki</a>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
error_reporting($errLevel);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$msg .= __('Upload error: invalid file type');
|
|
||||||
}
|
|
||||||
redirectWithMessage(DEFAULT_PAGE, $msg);
|
|
||||||
}
|
|
||||||
else if ( $action === 'rename' || $action === 'delete' || $action === 'imgDelete')
|
|
||||||
{
|
|
||||||
if ($action === 'imgDelete')
|
|
||||||
{
|
|
||||||
$page = sanitizeFilename(urldecode($_REQUEST['imgName']));
|
|
||||||
}
|
|
||||||
$actionName = ($action === 'delete' || $action === 'imgDelete')?__('Delete'):__('Rename');
|
|
||||||
$html .= "<form id=\"$action\" method=\"post\" action=\"" . SELF . "\">";
|
|
||||||
$html .= "<p>".$actionName." $page ".
|
|
||||||
(($action==='rename')? (__('to')." <input id=\"newPageName\" type=\"text\" name=\"newPageName\" value=\"" . htmlspecialchars($page) . "\" class=\"pagename\" />") : "?") . "</p>";
|
|
||||||
$html .= "<p><input id=\"$action\" type=\"submit\" value=\"$actionName\">";
|
|
||||||
$html .= "<input id=\"cancel\" type=\"button\" onclick=\"history.go(-1);\" value=\"Cancel\" />\n";
|
|
||||||
$html .= "<input type=\"hidden\" name=\"action\" value=\"${action}d\" />";
|
|
||||||
$html .= "<input type=\"hidden\" name=\"oldPageName\" value=\"" . htmlspecialchars($page) . "\" />";
|
|
||||||
$html .= "</p></form>";
|
|
||||||
}
|
|
||||||
else if ( $action === 'renamed' || $action === 'deleted')
|
|
||||||
{
|
|
||||||
// TODO: prevent relative filenames from being injected
|
|
||||||
$oldPageName = sanitizeFilename($_POST['oldPageName']);
|
|
||||||
$newPageName = ($action === 'deleted') ? "": sanitizeFilename($_POST['newPageName']);
|
|
||||||
$msg = '';
|
|
||||||
if ($action === 'deleted')
|
|
||||||
{
|
|
||||||
$success = unlink(fileNameForPage($oldPageName));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$success = rename(fileNameForPage($oldPageName), fileNameForPage($newPageName));
|
|
||||||
}
|
|
||||||
if ($success)
|
|
||||||
{
|
|
||||||
$message = ($action === 'deleted') ? "Removed $oldPageName." :
|
|
||||||
"Renamed $oldPageName to $newPageName.";
|
|
||||||
$msg .= $message;
|
|
||||||
// Change links in all pages to point to new page
|
|
||||||
$pagenames = getAllPageNames();
|
|
||||||
$changedPages = array();
|
|
||||||
foreach ($pagenames as $replacePage)
|
|
||||||
{
|
|
||||||
$content = file_get_contents(fileNameForPage($replacePage));
|
|
||||||
$count = 0;
|
|
||||||
$regexSaveOldPageName = str_replace("/", "\\/", $oldPageName);
|
|
||||||
$newContent = preg_replace("/\[\[$regexSaveOldPageName([|#].*\]\]|\]\])/",
|
|
||||||
(($action === 'deleted') ? "" : "[[$newPageName\\1"),
|
|
||||||
$content, -1, $count);
|
|
||||||
if ($count > 0) // if something changed
|
|
||||||
{
|
|
||||||
$changedPages[] = $replacePage." ($count ".__('matches').")";
|
|
||||||
file_put_contents(fileNameForPage($replacePage), $newContent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (count($changedPages) > 0)
|
|
||||||
{
|
|
||||||
$msg .= "<br/>\n".__('Updated links in the following pages:')."\n<ul><li>";
|
|
||||||
$msg .= implode("</li><li>", $changedPages);
|
|
||||||
$msg .= "</li></ul>";
|
|
||||||
}
|
|
||||||
gitChangeHandler($message, $msg);
|
|
||||||
$page = $newPageName;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$msg .= ($action === 'deleted') ? __('Error deleting file'): __('Error renaming file');
|
|
||||||
$page = $oldPageName;
|
|
||||||
}
|
|
||||||
if ($action === 'deleted' && $success)
|
|
||||||
{
|
|
||||||
$page = DEFAULT_PAGE;
|
|
||||||
}
|
|
||||||
redirectWithMessage($page, $msg);
|
|
||||||
}
|
|
||||||
else if ( $action === 'imgDeleted')
|
|
||||||
{
|
|
||||||
// TODO: prevent relative filenames from being injected
|
|
||||||
$oldPageName = sanitizeFilename($_REQUEST['oldPageName']);
|
|
||||||
$imgPath = PAGES_PATH . "/". UPLOAD_FOLDER . "/". $oldPageName;
|
|
||||||
$success = unlink($imgPath);
|
|
||||||
if ($success)
|
|
||||||
{
|
|
||||||
$msg = __('Image deleted');
|
|
||||||
gitChangeHandler($msg, $msg);
|
|
||||||
$msg .= " (".$imgPath.")";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$msg = __('Error deleting image');
|
|
||||||
$msg .= " (".$imgPath.")";
|
|
||||||
}
|
|
||||||
redirectWithMessage(DEFAULT_PAGE, $msg);
|
|
||||||
}
|
|
||||||
else if ( $action === 'all' )
|
|
||||||
{
|
|
||||||
$pageNames = getAllPageNames();
|
|
||||||
$filelist = array();
|
|
||||||
$sortBy = isset($_REQUEST['sortBy']) ? $_REQUEST['sortBy'] : 'name';
|
|
||||||
if (!in_array($sortBy, array('name', 'recent')))
|
|
||||||
{
|
|
||||||
$sortBy = 'name';
|
|
||||||
}
|
|
||||||
if ($sortBy === 'name')
|
|
||||||
{
|
|
||||||
natcasesort($pageNames);
|
|
||||||
foreach($pageNames as $page)
|
|
||||||
{
|
|
||||||
$filelist[$page] = filemtime(fileNameForPage($page));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach($pageNames as $page)
|
|
||||||
{
|
|
||||||
$filelist[$page] = filemtime(fileNameForPage($page));
|
|
||||||
}
|
|
||||||
arsort($filelist, SORT_NUMERIC);
|
|
||||||
}
|
|
||||||
$html .= "<p>".__('Total').": ".count($pageNames)." ".__("pages")."</p>";
|
|
||||||
$html .= "<table><thead>";
|
|
||||||
$html .= "<tr>".
|
|
||||||
"<td>".(($sortBy!='name')?("<a href=\"".SELF."?action=all&sortBy=name\">Name</a>"):"<span class=\"sortBy\">".__('Name')."</span>")."</td>".
|
|
||||||
"<td>".(($sortBy!='recent')?("<a href=\"".SELF."?action=all&sortBy=recent\">".__('Modified')."</a>"):"<span class=\"sortBy\">".__('Modified')."</span>")."</td>".
|
|
||||||
"<td>".__('Action')."</td>".
|
|
||||||
"</tr></thead><tbody>";
|
|
||||||
$date_format = __('date_format', TITLE_DATE);
|
|
||||||
|
|
||||||
foreach ($filelist as $pageName => $pageDate)
|
|
||||||
{
|
|
||||||
$html .= "<tr>".
|
|
||||||
"<td>".pageLink($pageName, $pageName)."</td>".
|
|
||||||
"<td valign=\"top\"><nobr>".date( $date_format, $pageDate)."</nobr></td>".
|
|
||||||
//"<td class=\"pageActions\">".getPageActions($pageName, $action,"-dark")."</td>". /* dark mode */
|
|
||||||
"<td class=\"pageActions\">".getPageActions($pageName, $action, "")."</td>". /* light mode */
|
|
||||||
"</tr>\n";
|
|
||||||
}
|
|
||||||
$html .= "</tbody></table>\n";
|
|
||||||
}
|
|
||||||
else if ( $action === 'search' )
|
|
||||||
{
|
|
||||||
$matches = 0;
|
|
||||||
$q = $_REQUEST['q'];
|
|
||||||
$html .= " <h1>Search: $q</h1>\n";
|
|
||||||
|
|
||||||
if ( trim($q) != "" )
|
|
||||||
{
|
|
||||||
$html .= " <ul>\n";
|
|
||||||
$pagenames = getAllPageNames();
|
|
||||||
$found = FALSE;
|
|
||||||
$matchingPages = array();
|
|
||||||
foreach ($pagenames as $searchPage)
|
|
||||||
{
|
|
||||||
if ($searchPage === $q)
|
|
||||||
{
|
|
||||||
$found = TRUE;
|
|
||||||
}
|
|
||||||
if (preg_match("/{$q}/i", $searchPage))
|
|
||||||
{
|
|
||||||
array_unshift($matchingPages, $searchPage);
|
|
||||||
++$matches;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$text = file_get_contents(fileNameForPage($searchPage));
|
|
||||||
if ( preg_match("/{$q}/i", $text) )
|
|
||||||
{
|
|
||||||
$matchingPages[] = $searchPage;
|
|
||||||
++$matches;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
foreach ($matchingPages as $page)
|
|
||||||
{
|
|
||||||
$link = pageLink($page, $page, ($page === $q)? " class=\"literalMatch\"": "");
|
|
||||||
$html .= " <li>$link</li>\n";
|
|
||||||
}
|
|
||||||
if (!$found)
|
|
||||||
{
|
|
||||||
$html .= " <li>".pageLink($q, __('Create page')." '$q'", " class=\"noexist\"")."</li>";
|
|
||||||
}
|
|
||||||
$html .= " </ul>\n";
|
|
||||||
}
|
|
||||||
$html .= " <p>$matches ".__('matches')."</p>\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$html .= empty($text) ? '' : toHTML($text);
|
|
||||||
}
|
|
||||||
|
|
||||||
$datetime = '';
|
|
||||||
|
|
||||||
if ( ($action === 'all'))
|
|
||||||
{
|
|
||||||
$title = __("All");
|
|
||||||
}
|
|
||||||
else if ( $action === 'upload' )
|
|
||||||
{
|
|
||||||
$title = __("Upload");
|
|
||||||
}
|
|
||||||
else if ( $action === 'new' )
|
|
||||||
{
|
|
||||||
$title = __("New");
|
|
||||||
}
|
|
||||||
else if ( $action === 'search' )
|
|
||||||
{
|
|
||||||
$title = __("Search");
|
|
||||||
}
|
|
||||||
else if ($filename != '')
|
|
||||||
{
|
|
||||||
$title = (($action === 'edit')? (__('Edit').": "):"") . $page;
|
|
||||||
$date_format = __('date_format', TITLE_DATE);
|
|
||||||
if ( $date_format )
|
|
||||||
{
|
|
||||||
$datetime = "<span class=\"titledate\">" . date($date_format, @filemtime($filename)) . "</span>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$title = __($action);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Disable caching on the client (the iPhone is pretty agressive about this
|
|
||||||
// and it can cause problems with the editing function)
|
|
||||||
|
|
||||||
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
|
|
||||||
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past
|
|
||||||
printHeader($title, $action);
|
|
||||||
print " <div class=\"titlebar\"><span class=\"title\">$title</span>$datetime";
|
|
||||||
if ($action === 'view' || $action === 'rename' || $action === 'delete' || $action === 'edit')
|
|
||||||
{
|
|
||||||
print(getPageActions($page, $action, ""));
|
|
||||||
}
|
|
||||||
print " </div>\n";
|
|
||||||
print " <div class=\"toolbar\">\n";
|
|
||||||
print " <a href=\"" . SELF . "\"><img src=\"/icons/home.svg\" alt=\"". __(DEFAULT_PAGE) . "\" title=\"". __(DEFAULT_PAGE) . "\" class=\"icon\"></a>\n";
|
|
||||||
print " <a href=\"" . SELF . "?action=all\"><img src=\"/icons/list.svg\" alt=\"". __('All') . "\" title=\"". __('All') . "\" class=\"icon\"></a>\n";
|
|
||||||
print " <a href=\"" . SELF . "?action=new\"><img src=\"/icons/new.svg\" alt=\"".__('New')."\" title=\"".__('New')."\" class=\"icon\"></a>\n";
|
|
||||||
if ( !DISABLE_UPLOADS )
|
|
||||||
{
|
|
||||||
print " <a href=\"" . SELF . VIEW . "?action=upload\"><img src=\"/icons/upload.svg\" alt=\"".__('Upload')."\" title=\"".__('Upload')."\" class=\"icon\"/></a>\n";
|
|
||||||
}
|
|
||||||
if ( REQUIRE_PASSWORD )
|
|
||||||
{
|
|
||||||
print " <a href=\"" . SELF . "?action=logout\">". __('Log out') . "</a>";
|
|
||||||
}
|
|
||||||
print " <form method=\"post\" action=\"" . SELF . "?action=search\">\n";
|
|
||||||
print " <input class=\"search\" placeholder=\"". __('Search') ."\" size=\"20\" id=\"search\" type=\"text\" name=\"q\" />\n </form>\n";
|
|
||||||
if ($action === 'edit')
|
|
||||||
{
|
|
||||||
printDrawer();
|
|
||||||
}
|
|
||||||
print " </div>\n";
|
|
||||||
if (SIDEBAR_PAGE != '')
|
|
||||||
{
|
|
||||||
print " <div class=\"sidebar\">\n\n";
|
|
||||||
$sidebarFile = fileNameForPage(SIDEBAR_PAGE);
|
|
||||||
if (file_exists($sidebarFile))
|
|
||||||
{
|
|
||||||
$text = file_get_contents($sidebarFile);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$text = __('Sidebar file could not be found')." ($sidebarFile)";
|
|
||||||
}
|
|
||||||
print toHTML($text);
|
|
||||||
print " </div>\n";
|
|
||||||
}
|
|
||||||
if ($action === 'view' && $_GET['linkshere'])
|
|
||||||
{
|
|
||||||
print "<div class=\"linkshere\">".__('What links here:')."<ul>";
|
|
||||||
$pagenames = getAllPageNames();
|
|
||||||
foreach($pagenames as $searchPage)
|
|
||||||
{
|
|
||||||
$text = file_get_contents(fileNameForPage($searchPage));
|
|
||||||
$regexSavePage = str_replace("/", "\\/", $page);
|
|
||||||
if ( preg_match("/\[\[$regexSavePage/i", $text) )
|
|
||||||
{
|
|
||||||
$link = pageLink($searchPage, $searchPage, "");
|
|
||||||
print(" <li>$link</li>\n");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print "</ul></div>";
|
|
||||||
}
|
|
||||||
print " <div class=\"main\">\n\n";
|
|
||||||
if(isset($_SESSION['msg']) && $_SESSION['msg'] != '')
|
|
||||||
{
|
|
||||||
print " <div class=\"note\">".$_SESSION['msg']."</div>";
|
|
||||||
unset($_SESSION['msg']);
|
|
||||||
}
|
|
||||||
print "$html\n";
|
|
||||||
print " </div>\n";
|
|
||||||
printFooter();
|
|
|
@ -1,65 +0,0 @@
|
||||||
<?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',
|
|
||||||
);
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?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',
|
|
||||||
);
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?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',
|
|
||||||
);
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?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',
|
|
||||||
);
|
|
|
@ -1,10 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// Use this file if you cannot use class autoloading. It will include all the
|
|
||||||
// files needed for the Markdown parser.
|
|
||||||
//
|
|
||||||
// Take a look at the PSR-0-compatible class autoloading implementation
|
|
||||||
// in the Readme.php file if you want a simple autoloader setup.
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/MarkdownInterface.php';
|
|
||||||
require_once dirname(__FILE__) . '/Markdown.php';
|
|
1909
md/Markdown.php
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// Use this file if you cannot use class autoloading. It will include all the
|
|
||||||
// files needed for the MarkdownExtra parser.
|
|
||||||
//
|
|
||||||
// Take a look at the PSR-0-compatible class autoloading implementation
|
|
||||||
// in the Readme.php file if you want a simple autoloader setup.
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/MarkdownInterface.php';
|
|
||||||
require_once dirname(__FILE__) . '/Markdown.php';
|
|
||||||
require_once dirname(__FILE__) . '/MarkdownExtra.php';
|
|
1895
md/MarkdownExtra.php
|
@ -1,9 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// Use this file if you cannot use class autoloading. It will include all the
|
|
||||||
// files needed for the MarkdownInterface interface.
|
|
||||||
//
|
|
||||||
// Take a look at the PSR-0-compatible class autoloading implementation
|
|
||||||
// in the Readme.php file if you want a simple autoloader setup.
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/MarkdownInterface.php';
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Markdown - A text-to-HTML conversion tool for web writers
|
|
||||||
*
|
|
||||||
* @package php-markdown
|
|
||||||
* @author Michel Fortin <michel.fortin@michelf.com>
|
|
||||||
* @copyright 2004-2019 Michel Fortin <https://michelf.com/projects/php-markdown/>
|
|
||||||
* @copyright (Original Markdown) 2004-2006 John Gruber <https://daringfireball.net/projects/markdown/>
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace md;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Markdown Parser Interface
|
|
||||||
*/
|
|
||||||
interface MarkdownInterface {
|
|
||||||
/**
|
|
||||||
* Initialize the parser and return the result of its transform method.
|
|
||||||
* This will work fine for derived classes too.
|
|
||||||
*
|
|
||||||
* @api
|
|
||||||
*
|
|
||||||
* @param string $text
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public static function defaultTransform($text);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Main function. Performs some preprocessing on the input text
|
|
||||||
* and pass it through the document gamut.
|
|
||||||
*
|
|
||||||
* @api
|
|
||||||
*
|
|
||||||
* @param string $text
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function transform($text);
|
|
||||||
}
|
|
|
@ -1,183 +0,0 @@
|
||||||
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'.
|
|
|
@ -1,4 +0,0 @@
|
||||||
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.
|
|
|
@ -1,173 +0,0 @@
|
||||||
# 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.
|
|
|
@ -1,9 +0,0 @@
|
||||||
# [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.
|
|
|
@ -1,5 +0,0 @@
|
||||||
Useful articles:
|
|
||||||
|
|
||||||
- [[Home]]
|
|
||||||
- [[[spmenu] Code documentation]]
|
|
||||||
- [[[spmenu] How to use the buildconf]]
|
|
30
run.sh
|
@ -1,30 +0,0 @@
|
||||||
#!/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
|
|
|
@ -1,21 +0,0 @@
|
||||||
<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>
|
|