Minify the pageindex by default, but also add a setting to control this

This commit is contained in:
Starbeamrainbowlabs 2019-06-01 15:55:48 +01:00
parent 77ac9bc5fd
commit 712e95474c
Signed by: sbrl
GPG Key ID: 1BE5172E637709C2
11 changed files with 56 additions and 44 deletions

View File

@ -23,6 +23,8 @@ This file holds the changelog for Pepperminty Wiki. This is the master list of t
- It also checks to ensure that access to `peppermint.json` is blocked correctly (coming soon as a one-time check to pre-existing wikis)
- Pre-existing wikis will not see this first-run wizard - a new `firstrun_complete` setting has been added that's automatically set to true if Pepperminty Wiki does a settings upgrade
- Default to allowing lossless flac and ogg audio files to be uploaded
- Added new `minify_pageindex` setting, which defaults to `true` and causes the page index to be minified when saved. Improves performance slightly (especially on larger wikis as the page index grows), but makes debugging and ninja-edits more awkward.
- [Module API] Added new `save_pageindex()` function which respects the above setting.
### Changed
- Core sharding: split `core.php` into multiple files

View File

@ -169,10 +169,7 @@ function check_subpage_parents(string $pagename)
global $pageindex, $paths, $env;
// Save the new pageindex and return if there aren't any more parent pages to check
if(strpos($pagename, "/") === false)
{
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
return;
}
return save_pageindex();
$parent_pagename = substr($pagename, 0, strrpos($pagename, "/"));
$parent_page_filename = "$parent_pagename.md";
@ -527,20 +524,32 @@ function render_editor($editorName)
/**
* Saves the settings file back to peppermint.json.
* @return bool Whether the settings were saved successfully.
* @package core
* @return bool Whether the settings were saved successfully.
*/
function save_settings() {
global $paths, $settings;
return file_put_contents($paths->settings_file, json_encode($settings, JSON_PRETTY_PRINT)) !== false;
}
/**
* Save the page index back to disk, respecting $settings->minify_pageindex
* @package core
* @return bool Whether the page index was saved successfully or not.
*/
function save_pageindex() {
global $paths, $settings, $pageindex;
return file_put_contents(
$paths->pageindex,
json_encode($pageindex, $settings->minify_pageindex ? 0 : JSON_PRETTY_PRINT)
);
}
/**
* Saves the currently logged in user's data back to peppermint.json.
* @package core
* @return bool Whether the user's data was saved successfully. Returns false if the user isn't logged in.
* @package core
* @return bool Whether the user's data was saved successfully. Returns false if the user isn't logged in.
*/
function save_userdata()
{
function save_userdata() {
global $env, $settings, $paths;
if(!$env->is_logged_in)

View File

@ -80,7 +80,7 @@ if(!file_exists($paths->pageindex))
// Store the new entry in the new page index
$pageindex->$pagekey = $newentry;
}
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
unset($existingpages);
}
else

View File

@ -12,10 +12,10 @@
{
"id": "action-protect",
"name": "Page protection",
"version": "0.2",
"version": "0.2.1",
"author": "Starbeamrainbowlabs",
"description": "Exposes Pepperminty Wiki's new page protection mechanism and makes the protect button in the 'More...' menu on the top bar work.",
"lastupdate": 1465751051,
"lastupdate": 1559400034,
"optional": false,
"extra_data": []
},
@ -75,7 +75,7 @@
"version": "0.1",
"author": "Starbeamrainbowlabs",
"description": "Displays a special page to aid in setting up a new wiki for the first time.",
"lastupdate": 1557611407,
"lastupdate": 1557611471,
"optional": false,
"extra_data": []
},
@ -92,10 +92,10 @@
{
"id": "feature-history",
"name": "Page History",
"version": "0.4.1",
"version": "0.4.2",
"author": "Starbeamrainbowlabs",
"description": "Adds the ability to keep unlimited page history, limited only by your disk space. Note that this doesn't store file history (yet). Currently depends on feature-recent-changes for rendering of the history page.",
"lastupdate": 1541003921,
"lastupdate": 1559400114,
"optional": false,
"extra_data": []
},
@ -135,7 +135,7 @@
"version": "0.7.1",
"author": "Starbeamrainbowlabs",
"description": "Adds proper search functionality to Pepperminty Wiki using an inverted index to provide a full text search engine. If pages don't show up, then you might have hit a stop word. If not, try requesting the `invindex-rebuild` action to rebuild the inverted index from scratch.",
"lastupdate": 1557182908,
"lastupdate": 1557653831,
"optional": false,
"extra_data": []
},
@ -152,10 +152,10 @@
{
"id": "feature-upload",
"name": "Uploader",
"version": "0.5.14",
"version": "0.5.16",
"author": "Starbeamrainbowlabs",
"description": "Adds the ability to upload files to Pepperminty Wiki. Uploaded files act as pages and have the special 'File\/' prefix.",
"lastupdate": 1548629209,
"lastupdate": 1559400139,
"optional": false,
"extra_data": []
},
@ -202,20 +202,20 @@
{
"id": "page-delete",
"name": "Page deleter",
"version": "0.10",
"version": "0.10.1",
"author": "Starbeamrainbowlabs",
"description": "Adds an action to allow administrators to delete pages.",
"lastupdate": 1557585339,
"lastupdate": 1559400151,
"optional": false,
"extra_data": []
},
{
"id": "page-edit",
"name": "Page editor",
"version": "0.17.3",
"version": "0.17.4",
"author": "Starbeamrainbowlabs",
"description": "Allows you to edit pages by adding the edit and save actions. You should probably include this one.",
"lastupdate": 1551560775,
"lastupdate": 1559400186,
"optional": false,
"extra_data": {
"diff.min.js": "https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/jsdiff\/2.2.2\/diff.min.js"
@ -274,10 +274,10 @@
{
"id": "page-move",
"name": "Page mover",
"version": "0.9.3",
"version": "0.9.4",
"author": "Starbeamrainbowlabs",
"description": "Adds an action to allow administrators to move pages.",
"lastupdate": 1521408303,
"lastupdate": 1559400217,
"optional": false,
"extra_data": []
},

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Page protection",
"version" => "0.2",
"version" => "0.2.1",
"author" => "Starbeamrainbowlabs",
"description" => "Exposes Pepperminty Wiki's new page protection mechanism and makes the protect button in the 'More...' menu on the top bar work.",
"id" => "action-protect",
@ -45,7 +45,7 @@ register_module([
}
// Save the pageindex
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
$state = ($pageindex->$page->protect ? "enabled" : "disabled");
$title = "Page protection $state.";

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Page History",
"version" => "0.4.1",
"version" => "0.4.2",
"author" => "Starbeamrainbowlabs",
"description" => "Adds the ability to keep unlimited page history, limited only by your disk space. Note that this doesn't store file history (yet). Currently depends on feature-recent-changes for rendering of the history page.",
"id" => "feature-history",
@ -213,11 +213,12 @@ register_module([
* records a new revision against a page name. Thus it is possible to have a
* disparaty between the history revisions and the actual content displayed in
* the current revision if you're not careful!
* @param object $pageinfo The pageindex object of the page to operate on.
* @param string $newsource The page content to save as the new revision.
* @param string $oldsource The old page content that is the current revision (before the update).
* @param boolean $save_pageindex Whether the page index should be saved to disk.
* @param string $change_type The type of change to record this as in the history revision log
* @package feature-history
* @param object $pageinfo The pageindex object of the page to operate on.
* @param string $newsource The page content to save as the new revision.
* @param string $oldsource The old page content that is the current revision (before the update).
* @param bool $save_pageindex Whether the page index should be saved to disk.
* @param string $change_type The type of change to record this as in the history revision log
*/
function history_add_revision(&$pageinfo, &$newsource, &$oldsource, $save_pageindex = true, $change_type = "edit") {
global $env, $paths, $settings, $pageindex;
@ -233,7 +234,7 @@ function history_add_revision(&$pageinfo, &$newsource, &$oldsource, $save_pagein
// this point
// TODO Store tag changes here
end($pageinfo->history); // Calculate the next revision id - we can't just count the reivisions here because we might have a revision limit
end($pageinfo->history); // Calculate the next revision id - we can't just count the revisions here because we might have a revision limit
$nextRid = !empty($pageindex->history) ? $pageinfo->history[key($pageinfo->history)]->rid + 1 : 0;
$ridFilename = "$pageinfo->filename.r$nextRid";
// Insert a new entry into the history
@ -261,7 +262,7 @@ function history_add_revision(&$pageinfo, &$newsource, &$oldsource, $save_pagein
// Save the edited pageindex
if($result !== false && $save_pageindex)
$result = file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
$result = save_pageindex();
return $result;

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Uploader",
"version" => "0.5.15",
"version" => "0.5.16",
"author" => "Starbeamrainbowlabs",
"description" => "Adds the ability to upload files to Pepperminty Wiki. Uploaded files act as pages and have the special 'File/' prefix.",
"id" => "feature-upload",
@ -258,7 +258,7 @@ register_module([
}
// Save the pageindex
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
if(module_exists("feature-recent-changes"))
{

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Page deleter",
"version" => "0.10",
"version" => "0.10.1",
"author" => "Starbeamrainbowlabs",
"description" => "Adds an action to allow administrators to delete pages.",
"id" => "page-delete",
@ -78,7 +78,7 @@ register_module([
unset($pageindex->$page);
// Save the new page index
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
// Remove the page's name from the id index
ids::deletepagename($env->page);

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Page editor",
"version" => "0.17.3",
"version" => "0.17.4",
"author" => "Starbeamrainbowlabs",
"description" => "Allows you to edit pages by adding the edit and save actions. You should probably include this one.",
"id" => "page-edit",
@ -504,8 +504,7 @@ DIFFSCRIPT;
if($pagedata !== $pagedata_orig)
file_put_contents("$env->storage_prefix$env->page.md", $pagedata);
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
if(isset($_GET["newpage"]))
http_response_code(201);

View File

@ -1,7 +1,7 @@
<?php
register_module([
"name" => "Page mover",
"version" => "0.9.3",
"version" => "0.9.4",
"author" => "Starbeamrainbowlabs",
"description" => "Adds an action to allow administrators to move pages.",
"id" => "page-move",
@ -111,7 +111,7 @@ register_module([
}
// Save the updated pageindex
file_put_contents($paths->pageindex, json_encode($pageindex, JSON_PRETTY_PRINT));
save_pageindex();
// Move the page on the disk
rename("$env->storage_prefix$env->page.md", "$env->storage_prefix$new_name.md");

View File

@ -166,7 +166,8 @@
"dynamic_page_suggestion_count": { "type": "number", "description": "The number of dynamic page name suggestions to fetch from the server when typing in the page search box. Note that lowering this number doesn't <em>really</em> improve performance. Set to 0 to disable.", "default": 7 },
"defaultaction": { "type": "text", "description": "The default action. This action will be performed if no other action is specified. It is recommended you set this to \"view\" - that way the user automatically views the default page (see above).", "default": "view" },
"updateurl": { "type": "url", "description": "The url from which to fetch updates. Defaults to the master (development) branch. MAKE SURE THAT THIS POINTS TO A *HTTPS* URL, OTHERWISE SOMEONE COULD INJECT A VIRUS INTO YOUR WIKI!", "default": "https://raw.githubusercontent.com/sbrl/pepperminty-wiki/master/index.php" },
"optimize_pages": { "type": "checkbox", "description": "Whether to optimise all webpages generated.", "default": true},
"optimize_pages": { "type": "checkbox", "description": "Whether to optimise all webpages generated.", "default": true },
"minify_pageindex": { "type": "checkbox", "description": "Whether to minify the page index when saving it. Improves performance slightly (especially on larger wikis), but can make debugging and quick ninja-edits more awkward. Note that this only takes effect when the page index is next saved.", "default": true },
"http2_server_push": { "type": "checkbox", "description": "Whether HTTP/2.0 server should should be enabled. If true, then 'link' HTTP headers will be attached to rendered pages specifying files to push down. Note that web server support <em>also</em> has to be abled for this to work, as PHP can't push resources to the client on its own.", "default": true },
"http2_server_push_items": { "type": "server-push", "description": "An array of items to push to clients when rendering pages. Should be in the format <code>[ [type, path], [type, path], ....]</code>, where <code>type</code> is a <a href='https://fetch.spec.whatwg.org/#concept-request-destination'>resource type</a>, and <code>path</code> is a relative url path to a static file to send via <em>HTTP/2.0 Server Push</em>.<br />Note: These resources will only be pushed if your web server also has support for the link: HTTP/2.0 header, and it's a page that being rendered. If it's some other thing that being sent (e.g. an image, error message, event stream, redirect, etc.), then no server push is indicated by <em>Pepperminty Wiki</em>. Test your estup with your browser's developer tools, or <a href='https://http2-push.io/'>This testing site</a>.", "default": [] },
"max_recent_changes": { "type": "number", "description": "The maximum number of recent changes to display on the recent changes page.", "default": 512},