Compare commits

..

7 Commits
5.0 ... 5.1.2

Author SHA1 Message Date
5590592ebe composer bump 2025-02-05 22:05:19 -05:00
b65dda1328 composer changes 2025-02-05 20:56:39 -05:00
f928e87141 bugfixes 2025-02-05 20:45:41 -05:00
a6b241c7f0 add qr-codes, share button, and pwa config toggle 2025-02-05 19:39:54 -05:00
a38d132e61 rename comments 2025-02-05 06:36:53 -05:00
d7e8b586d7 various updates
remove dependence on jQuery
add image delete
Admin ui fix for mobile
image updates to new style
update comments
2025-02-05 06:36:29 -05:00
ea120e09bc add missing webmanifest parts 2025-02-05 05:30:23 -05:00
118 changed files with 707 additions and 522 deletions

1
.gitignore vendored
View File

@ -65,3 +65,4 @@ vendor/canary/logs/*
components/*
mailhog.log
uploads/*
images/qr-codes/

View File

@ -35,7 +35,7 @@ New classes must be prefaced with a doc-block following this style:
*
* This is the admin controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the base admin controller. Every other admin controller should
* extend this class.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the base api controller. Every other api controller should
* extend this class.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class handles all the hard-coded configurations.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -69,14 +69,21 @@ class Config extends BedrockConfig {
$html .= '<div class="col-lg-6">';
$html .= $fieldHtml;
$html .= '</div>';
$html .= '</div>';
if ( 'file' === $node['type'] ) {
$html .= '<div class="mb-3 row">';
$html .= '<h4 class="col-lg-3 col-form-label text-end">Current Image</h4>';
$html .= '<h4 class="col-lg-3 col-form-label text-end">Current Value</h4>';
$html .= '<div class="col-lg-6">';
$html .= '<input type="text" class="form-control" name="'.$name.'Text" value="'.$node['value'] . '">';
$html .= '</div>';
$html .= '</div>';
$html .= '<div class="mb-3 row">';
$html .= '<h4 class="col-lg-3 col-form-label text-end">Current Image</h4>';
$html .= '<div class="col-lg-6 d-flex justify-content-center">';
$html .= '<img alt="configured image" src="{ROOT_URL}' . $node['value'] . '" class="img-circle img-fluid p-2 avatar-125">';
$html .= '</div>';
}
$html .= '</div>';
}
return Template::parse( $html );
}

View File

@ -4,7 +4,7 @@
*
* This is the main controller class.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the main TempusProject database model.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is our class for constructing and sending various kinds of emails.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -7,7 +7,7 @@
* error reporting to easily define exactly what feedback you
* would like to give.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -6,7 +6,7 @@
* the application. It handles installing the application, installing and updating
* models as well as the database, and generating and checking the htaccess file.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class handles all the hard-coded permissions.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class is used as a foundation for all plugins to build from.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class handles all the hard-coded preferences.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin log controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the composer controller. Its only very effective when using composer for autoloading.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the error logs controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the groups admin controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin dashboard controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin app/user tokens controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -36,6 +36,8 @@ class Images extends AdminController {
APP_ROOT_DIRECTORY . 'app/plugins'
];
private $spacer = [];
private $excludedDirectories = [
'.',
'..',
@ -74,35 +76,17 @@ class Images extends AdminController {
Views::view( 'admin.images.upload' );
}
private function getFolderObject( $folder, $subdirs = '' ) {
$names = explode( DIRECTORY_SEPARATOR, $folder );
$folderName = array_pop( $names );
$out = [
'spacer' => implode( '', $this->spacer ),
'folderName' => $folderName,
'location' => $folder,
'subdirs' => $subdirs,
];
if ( ! empty( $subdirs ) ) {
$out['folderexpand'] = '<i class="fa-solid fa-caret-down justify-content-end"></i>';
$out['folderexpand'] = '<i class="fa fa-caret-down"></i>';
} else {
$out['folderexpand'] = '';
}
@ -116,7 +100,9 @@ class Images extends AdminController {
if ( $top == $sub ) {
$html = '';
} else {
$this->spacer[] = '-> ';
$children = $this->generateFolderHtml( $sub );
array_pop( $this->spacer );
Components::set( 'parentfolderName', $object->folderName );
$html = Views::simpleView( 'forms.folderSelectParent', $children );
Components::set( 'parentfolderName', '' );
@ -150,28 +136,6 @@ class Images extends AdminController {
return $dirs;
}
public function __construct() {
parent::__construct();
self::$title = 'Admin - Images';
@ -199,38 +163,44 @@ class Images extends AdminController {
Debug::error( 'There was an error with your upload.');
Issues::add( 'error', [ 'There was an error with your upload.' => Check::userErrors() ] );
}
// if ( self::$token->create(
// Input::post( 'name' ),
// Input::post( 'notes' ),
// Input::post( 'token_type' )
// ) ) {
// Session::flash( 'success', 'Token Created' );
// Redirect::to( 'admin/images' );
// }
}
Views::view( 'admin.images.create' );
}
public function delete() {
if ( self::$token->delete( [ $id ] ) ) {
Session::flash( 'success', 'Token deleted.' );
if ( ! Input::exists( 'fileLocation' ) ) {
Session::flash( 'warning', 'Unknown image.' );
Redirect::to( 'admin/images' );
}
$fileLocation = Input::get('fileLocation');
// Ensure the file exists
if ( ! file_exists( $fileLocation ) ) {
Session::flash('error', 'File does not exist.');
Redirect::to('admin/images');
}
// Check if the file is an image
$validMimeTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
$fileMimeType = mime_content_type( $fileLocation );
if ( ! in_array( $fileMimeType, $validMimeTypes ) ) {
Session::flash('error', 'Invalid file type. Only images can be deleted.');
Redirect::to('admin/images');
}
// Attempt to delete the file
if (@unlink($fileLocation)) {
Session::flash('success', 'Image deleted.');
} else {
Session::flash('error', 'Failed to delete the image.');
}
Redirect::to('admin/images');
}
public function rename() {
if ( ! Input::exists( 'fileLocation' ) ) {
Session::flash( 'warning', 'Unknown image.' );
Redirect::to( 'admin/images' );
@ -243,7 +213,6 @@ class Images extends AdminController {
Issues::add( 'error', [ 'There was an error renaming the image.' => Check::userErrors() ] );
} else {
$result = $this->renameFile( Input::post( 'filelocation' ), Input::post( 'newname' ) );
if ( ! empty( $result ) ) {
Session::flash( 'success', 'Image has been renamed.' );
Redirect::to( 'admin/images' );

View File

@ -4,7 +4,7 @@
*
* This is the login logs controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the generic logs controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the installed plugins controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin routes/redirects controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin email controller. The only real use is to send out emails to the various lists.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the configuration and settings controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the admin app/user tokens controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the users admin controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the api authentication controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the api authentication controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the users' api controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the error controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the home or 'index' controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the user registration controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the user control panel controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -3,7 +3,7 @@
*
* This is css used in the debuging console.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -3,7 +3,7 @@
*
* This file provides dark mode styles to override existing Bootstrap 5 base styles.
*
* @version 3.0-dark
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -12,6 +12,9 @@
.context-main-border {
border-color: #f5f5f5!important;
}
.context-main-border-other {
border-color: #1e1e1e!important;
}
.context-main-bg {
background-color: #2c2c2c;

View File

@ -3,7 +3,7 @@
*
* This file is for any css that should be applied site wide.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -12,6 +12,9 @@
.context-main-border {
border-color: #1e1e1e!important;
}
.context-main-border-other {
border-color: #f5f5f5!important;
}
.context-main-bg {
background-color: #f7f7f7;

View File

@ -2,7 +2,7 @@
/**
* app/functions/common.php
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

BIN
app/images/ttp-gitlab.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 47 KiB

View File

@ -3,11 +3,68 @@
*
* This file is for 'access anywhere' javascript.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
let deferredPrompt;
const installPrompt = document.getElementById("install-prompt");
const installButton = document.getElementById("install-button");
const dismissButton = document.querySelector("#install-prompt .btn-close");
// Check if the user previously dismissed the prompt
if (!localStorage.getItem("pwaInstallDismissed")) {
window.addEventListener("beforeinstallprompt", (event) => {
event.preventDefault();
deferredPrompt = event;
installPrompt.classList.remove("d-none");
installPrompt.classList.add("d-block"); // Show the prompt
});
}
// Handle Install Button Click
if ( installButton ) {
installButton.addEventListener("click", async () => {
if (deferredPrompt) {
deferredPrompt.prompt();
const { outcome } = await deferredPrompt.userChoice;
if (outcome === "dismissed") {
setInstallDismissed(); // Store that the user dismissed the prompt
}
deferredPrompt = null; // Reset prompt
installPrompt.classList.remove("d-block");
installPrompt.classList.add("d-none");
}
});
}
// Handle Close Button Click
if ( dismissButton ) {
dismissButton.addEventListener("click", () => {
setInstallDismissed(); // Store that the user dismissed the prompt
});
}
// Function to remember user choice for 7 days
function setInstallDismissed() {
localStorage.setItem("pwaInstallDismissed", Date.now() + 7 * 24 * 60 * 60 * 1000);
installPrompt.classList.remove("d-block"); // Hide the prompt
installPrompt.classList.add("d-none");
}
// Check if the 7-day period has passed
if (localStorage.getItem("pwaInstallDismissed")) {
const dismissUntil = parseInt(localStorage.getItem("pwaInstallDismissed"), 10);
if (Date.now() < dismissUntil) {
//
} else {
localStorage.removeItem("pwaInstallDismissed"); // Reset after 7 days
}
}
/**
* Automatically selects/de-selects all check boxes associated with that field
**/
@ -80,14 +137,14 @@ function copyElementText( id ) {
}
}
$(document).ready(function() {
$('select').each(function() {
var selectedValue = $(this).attr('value');
document.addEventListener("DOMContentLoaded", function () {
document.querySelectorAll("select").forEach(function (select) {
var selectedValue = select.getAttribute("value");
if (selectedValue) {
$(this).removeAttr('value');
$(this).find('option').each(function() {
if ($(this).attr('value') === selectedValue) {
$(this).prop('selected', true);
select.removeAttribute("value");
select.querySelectorAll("option").forEach(function (option) {
if (option.getAttribute("value") === selectedValue) {
option.selected = true;
}
});
}
@ -179,11 +236,42 @@ document.addEventListener('DOMContentLoaded', function () {
}
function toggleDarkModePref(value) {
var fields = {};
fields.prefName = 'darkMode';
fields.prefValue = value;
$.post( '/usercp/updatePref', fields ).done(function(response) {
// alert('Timer updated successfully!');
});
var fields = new URLSearchParams();
fields.append("prefName", "darkMode");
fields.append("prefValue", value);
fetch("/usercp/updatePref", {
method: "POST",
body: fields,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
})
// .then(response => response.text()) // Handle response if needed
.catch(error => console.error("Error:", error));
}
});
// this reverses the carets for the folderSelect
document.querySelectorAll('[data-bs-toggle="collapse"]').forEach(button => {
button.addEventListener('click', () => {
setTimeout(() => {
const icon = button.querySelector('i');
// Only proceed if the icon already has one of the relevant classes
if (icon && (icon.classList.contains('fa-caret-down') || icon.classList.contains('fa-caret-up'))) {
icon.classList.toggle('fa-caret-down', button.classList.contains('collapsed'));
icon.classList.toggle('fa-caret-up', !button.classList.contains('collapsed'));
}
}, 150);
});
});
// this should load all popovers
document.addEventListener("DOMContentLoaded", function () {
var popoverTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="popover"]'));
var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
return new bootstrap.Popover(popoverTriggerEl);
});
});

View File

@ -4,7 +4,7 @@
*
* This class is used for the manipulation of the groups database table.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* Model for handling all logging.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class is used for the manipulation of the routes database table.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -7,7 +7,7 @@
* Notes: After refactor, the sessions will use ID's for short term, and Cookies
* will use the token for long term storage
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This class is used for the manipulation of the tokens database table.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -8,7 +8,7 @@
* @todo finish fixing the check functions that were migrated here
* These could go in the Forms class?
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the Blog admin controller.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the blog controller.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This class is used for the manipulation of the blog database table.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the loader for the blog template.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
* app/plugins/blog/templates/blog.tpl
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -130,7 +130,6 @@
{FOOT}
</div>
<!-- Bootstrap core JavaScript and jquery -->
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{JQUERY_CDN}jquery.min.js"></script>
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{BOOTSTRAP_CDN}js/bootstrap.min.js"></script>
<!-- Custom javascript for this template -->

View File

@ -5,7 +5,7 @@
* This is the loader for the rss template.
*
* @package TP Blog
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the bug report admin controller.
*
* @package TP BugReports
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the bug reports controller.
*
* @package TP BugReports
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP BugReports
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This class is used for the manipulation of the bugreports database table.
*
* @package TP BugReports
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP BugReports
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the comments admin controller.
*
* @package TP Comments
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the Moderator controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP Comments
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -6,7 +6,7 @@
* of the comments table.
*
* @package TP Comments
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Comments
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the contact admin controller.
*
* @package TP Contact
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the home controller for the contact plugin.
*
* @package TP Contact
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP Contact
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -7,7 +7,7 @@
* @todo make this send a confirmation email
*
* @package TP Contact
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Contact
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the user messages controller.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* Houses all of the functions for the core messaging system.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Messages
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the notifications admin controller.
*
* @package TP Notifications
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the home controller for the notifications plugin.
*
* @package TP Notifications
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP Notifications
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This class is used for the manipulation of the notifications database table.
*
* @package TP Notifications
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Notifications
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the subscriptions admin controller.
*
* @package TP Subscribe
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This is the home controller for the subscribe plugin.
*
* @package TP Subscribe
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the form checking functions for this plugin.
*
* @package TP Subscribe
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This class is used for the manipulation of the subscribers database table.
*
* @package TP Subscribe
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP Subscribe
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is an example controller layout.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is an example model.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -5,7 +5,7 @@
* This houses all of the main plugin info and functionality.
*
* @package TP XXXXXXXXXX
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -3,7 +3,7 @@
<!--
* app/resources/templates/example.tpl
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is an example loader for the example template.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the loader for the admin template.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -3,7 +3,7 @@
<!--
* app/templates/admin/admin.tpl
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -28,27 +28,35 @@
<!-- Main Content Area -->
<div class="d-flex flex-grow-1">
<!-- Side Navigation -->
<div class="d-flex flex-column flex-shrink-0 p-3 text-bg-dark" style="width: 280px;">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none">
<div class="d-flex flex-column p-md-3 text-bg-dark">
<div class="collapse d-md-block" id="mainMenu">
<a href="/" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-white text-decoration-none justify-content-center">
<img src="{ROOT_URL}{LOGO}" class="bi me-2" width="40" height="32" role="img" aria-label="{SITENAME} Logo">
<span class="fs-4">{SITENAME}</span>
</a>
<hr>
<div class="border-top border-bottom border-white mt-4 mb-2 pt-3 pb-5">
{ADMIN}
{ADMIN_LINKS}
{/ADMIN}
<hr>
<div class="d-flex align-items-center">
</div>
<div class="d-flex align-items-center p-2">
{topNavRight}
</div>
</div>
</div>
<!-- Center Element -->
<div class="flex-grow-1 d-flex flex-column">
<!-- Top Navigation Bar -->
<div class="p-2 text-bg-dark">
<div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start">
<div class="d-flex justify-content-between justify-content-md-center">
<div class="d-flex flex-wrap align-items-center justify-content-lg-start">
{topNavLeft}
</div>
<div class="mx-3 d-md-none">
<button class="my-3 btn btn-lg btn-outline-light" type="button" data-bs-toggle="collapse" data-bs-target="#mainMenu" aria-controls="mainMenu" aria-expanded="false" aria-label="Toggle navigation">
<i class="fa fa-bars"></i>
</button>
</div>
</div>
</div>
<!-- Main Content -->
@ -66,26 +74,62 @@
</div>
<!-- Footer -->
<footer class="border-top context-main-bg">
<div class="container pb-4 pt-3 align-items-center">
<div class="d-flex justify-content-between align-items-center context-main-bg">
{COPY}
<div class="col-6 col-md-2">
<div class="material-switch">
<div class="container mt-auto border-top context-main-border">
<footer class="pt-0">
<div class="d-md-block collapse" id="footerMenu">
<div class="d-flex justify-content-between align-items-center py-2 my-2">
<a href="/" class="text-decoration-none lh-1 d-flex align-items-center px-md-5 mx-md-5">
<img src="{ROOT_URL}{LOGO}" class="bi me-2" width="40" height="32" alt="Joey Kimsey Logo">
</a>
<div class="material-switch d-flex align-items-center">
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
<label for="dark-mode-toggle" class="label-default"></label>
</div>
<ul class="list-unstyled d-flex align-items-center mb-0">
<li class="ms-3">
<a class="context-main" href="{ROOT_URL}fb">
<span class="fa-brands fa-fw fa-facebook"></span>
</a>
</li>
<li class="ms-3">
<a class="context-main" href="{ROOT_URL}twitter">
<span class="fa-brands fa-fw fa-twitter"></span>
</a>
</li>
<li class="ms-3">
<a class="context-main" href="{ROOT_URL}in">
<span class="fa-brands fa-fw fa-linkedin"></span>
</a>
</li>
<li class="ms-3">
<a class="context-main" href="{ROOT_URL}youtube">
<span class="fa-brands fa-fw fa-youtube"></span>
</a>
</li>
<li class="ms-3">
<a class="context-main" href="{ROOT_URL}git">
<span class="fa-brands fa-fw fa-github"></span>
</a>
</li>
</ul>
</div>
{SOCIAL}
<div class="d-flex justify-content-center justify-content-md-center text-center text-md-center my-2">
<span>© 2025 {SITENAME}, Powered by <a href="https://thetempusproject.com" class="text-decoration-none">The Tempus Project</a></span>
</div>
</div>
<div class="text-center">
<button class="d-md-none my-3 btn btn-lg context-main context-main-border" type="button" data-bs-toggle="collapse" data-bs-target="#footerMenu" aria-controls="footerMenu" aria-expanded="false" aria-label="Toggle footer navigation">
<i class="fa fa-bars"></i>
</button>
</div>
</footer>
</div>
</div>
</div>
</div>
<!-- Bootstrap core JavaScript and jquery -->
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{JQUERY_CDN}jquery.min.js"></script>
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{BOOTSTRAP_CDN}js/bootstrap.min.js"></script>
<!-- Custom javascript for this template -->

View File

@ -4,7 +4,7 @@
*
* This is the loader for the admin template.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]

View File

@ -4,7 +4,7 @@
*
* This is the loader for the default template.
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -19,11 +19,19 @@ use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Bedrock\Classes\Config;
use TheTempusProject\Bedrock\Functions\Input;
use TheTempusProject\TheTempusProject as App;
use Endroid\QrCode\Builder\Builder;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel;
use Endroid\QrCode\Label\LabelAlignment;
use Endroid\QrCode\Label\Font\OpenSans;
use Endroid\QrCode\RoundBlockSizeMode;
use Endroid\QrCode\Writer\PngWriter;
use TheTempusProject\Hermes\Functions\Route as Routes;
use TheTempusProject\Canary\Bin\Canary as Debug;
class DefaultLoader extends Loader {
private static $loaded = false;
const TEMPLATE_NAME = 'Default Tempus Project Template';
const JQUERY_CDN = 'https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/';
const BOOTSTRAP_CDN = 'https://cdn.jsdelivr.net/npm/bootstrap@3.3.6/dist/';
const FONT_AWESOME_URL = 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/';
@ -36,20 +44,67 @@ class DefaultLoader extends Loader {
if ( VENDOR_AUTOLOADED === true ) {
Components::set( 'FONT_AWESOME_URL', '/vendor/fortawesome/font-awesome/css/' );
Components::set( 'BOOTSTRAP_CDN', '/vendor/twbs/bootstrap/dist/' );
Components::set( 'JQUERY_CDN', '/vendor/components/jquery/' );
} else {
Components::set( 'BOOTSTRAP_CDN', self::BOOTSTRAP_CDN );
Components::set( 'JQUERY_CDN', self::JQUERY_CDN );
Components::set( 'FONT_AWESOME_URL', self::FONT_AWESOME_URL );
}
$this->addJs( '<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{ROOT_URL}app/js/main.js"></script>' );
Components::setIfNull( 'LOGO', Config::getValue( 'main/logo' ) ?? TP_DEFAULT_LOGO );
if ( ! empty( Config::getValue( 'share/enabled' ) ) ) {
$currentUrl = Routes::getAddress() . Input::get( 'url' );
$folder = IMAGE_DIRECTORY . 'qr-codes' . DIRECTORY_SEPARATOR ;
$filename = md5( $currentUrl ) . '.png';
if ( ! file_exists( $folder ) ) {
Debug::Info( 'Creating Directory because it does not exist' );
mkdir( $folder, 0777, true );
}
if ( ! empty( Config::getValue( 'share/qr' ) ) ) {
if ( ! file_exists( $folder . $filename ) ) {
Debug::Info( 'Creating qr-image because it does not exist' );
$builder = new Builder(
writer: new PngWriter(),
writerOptions: [],
validateResult: false,
data: Routes::getAddress() . Input::get( 'url' ),
encoding: new Encoding('UTF-8'),
errorCorrectionLevel: ErrorCorrectionLevel::High,
size: 200,
margin: 10,
roundBlockSizeMode: RoundBlockSizeMode::Margin,
logoPath: APP_ROOT_DIRECTORY . DIRECTORY_SEPARATOR . Config::getValue( 'main/logo' ),
logoResizeToWidth: 30,
logoPunchoutBackground: true,
labelText: Config::getValue( 'main/name' ),
labelFont: new OpenSans(14),
labelAlignment: LabelAlignment::Center
);
$result = $builder->build();
$result->saveToFile( $folder . $filename );
}
Components::set( 'QR_CODE','<img src="{ROOT_URL}images/qr-codes/' . $filename . '" alt="QR Code" class="img-fluid mb-2">' );
} else {
Components::setIfNull( 'QR_CODE', '' );
}
Components::setIfNull( 'SHARE_IMAGE', Views::simpleView( 'footer.share' ) );
} else {
Components::setIfNull( 'SHARE_IMAGE', '' );
}
if ( ! empty( Config::getValue( 'main/pwa' ) ) ) {
Components::setIfNull( 'PWA', Views::simpleView( 'pwa') );
} else {
Components::setIfNull( 'PWA', '' );
}
Components::setIfNull( 'COPY', Views::simpleView( 'footer.copy') );
Components::setIfNull( 'SOCIAL', Views::simpleView( 'footer.social') );
Components::prepend( 'FOOTER_LEFT', Views::simpleView( 'footer.left', Navigation::getMenuLinks( App::CONTACT_FOOTER_MENU_NAME ) ) );
Components::prepend( 'FOOTER_CENTER', Views::simpleView( 'footer.center', Navigation::getMenuLinks( App::INFO_FOOTER_MENU_NAME ) ) );
Components::prepend( 'FOOTER_RIGHT', Views::simpleView( 'footer.right') );
Components::setIfNull( 'FOOT', Views::simpleView( 'footer.container') );
/**
* Top-Nav
*/

View File

@ -3,7 +3,7 @@
<!--
* app/templates/default/default.tpl
*
* @version 3.0
* @version 5.0.1
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
@ -91,6 +91,7 @@
</div>
</div>
{/ISSUES}
{PWA}
<!-- Main Page Content -->
{CONTENT}
</div>
@ -100,7 +101,6 @@
<!-- User Pref to control Dark mode across frontend and backend -->
<input type="hidden" name="dark-mode-pref" id="dark-mode-pref" value="{DARK_MODE_SETTING}">
<!-- Bootstrap core JavaScript and jquery -->
<script crossorigin="anonymous" src="{JQUERY_CDN}jquery.min.js"></script>
<script crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.6/dist/umd/popper.min.js"></script>
<script crossorigin="anonymous" src="{BOOTSTRAP_CDN}js/bootstrap.min.js"></script>
<!-- Custom javascript for this template -->

View File

@ -23,7 +23,7 @@
</h2>
<div id="collapse1" class="accordion-collapse collapse" aria-labelledby="generalHeading1" data-bs-parent="#generalAccordion">
<div class="ml-5 accordion-body context-main context-other-bg" id="general1">
<span class="text-lead">
<span class="text-lead text-primary">
Yes, {SITENAME} is a responsive web-app and it works seamlessly on mobile devices.
The front-end is powered by Bootstrap 5.2.3 the original design system used by twitter.
In addition to the powerful tools behind the scenes, every page on {SITENAME} has been tested to work on devices of all sizes.
@ -39,7 +39,7 @@
</h2>
<div id="collapse2" class="accordion-collapse collapse" aria-labelledby="generalHeading2" data-bs-parent="#generalAccordion">
<div class="accordion-body context-main context-other-bg" id="general2">
<span class="text-lead">
<span class="text-lead text-primary">
Yes, in more ways than one.
Since {SITENAME} is designed as a responsive web-app, its accessible from any browser connected to the internet.
Behind the scenes, the app can be installed on any server hardware and has been tested with both nginx and Apache web-servers.
@ -55,7 +55,7 @@
</h2>
<div id="collapse3" class="accordion-collapse collapse" aria-labelledby="generalHeading3" data-bs-parent="#generalAccordion">
<div class="accordion-body context-main context-other-bg" id="general3">
<span class="text-lead">
<span class="text-lead text-primary">
{SITENAME} is open source and available free of charge through <a href="{ROOT_URL}libraries/ttp/git" class="text-decoration-none">GitLab</a> and <a href="{ROOT_URL}libraries/ttp/packagist" class="text-decoration-none">Packagist</a>.
The developer behind the project is <a href="https://joeykimsey.com/" class="text-decoration-none">Joey Kimsey</a> and he can be contacted through his website for development services.
</span>

View File

@ -1,4 +1,5 @@
<div class="col-12 col-sm-6 col-md-3 col-lg-2 mb-3 text-center">
{SHARE_IMAGE}
<h5>Dark Mode</h5>
<div class="material-switch px-4 mt-2">
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">

View File

@ -0,0 +1,17 @@
<div class="text-center mb-3">
<h5 class="mb-3">Share</h5>
<div class="px-4 mt-2">
<!-- Share Button (visible only on medium+ screens) -->
<button type="button" class="btn btn-outline-primary"
data-bs-toggle="popover" data-bs-html="true" title="Share"
data-bs-content='
{QR_CODE}
<div class="d-flex justify-content-between">
<a href="https://www.reddit.com/submit?type=LINK&url={CURRENT_URL_SAFE}" target="_blank" class="mx-1 btn btn-sm btn-outline-danger"><i class="fa-brands fa-fw fa-reddit"></i></a>
<a href="https://www.facebook.com/sharer/sharer.php?u={CURRENT_URL_SAFE}" target="_blank" class="mx-1 btn btn-sm btn-outline-primary"><i class="fa-brands fa-fw fa-facebook"></i></a>
<a href="https://twitter.com/intent/tweet?url={CURRENT_URL_SAFE}" target="_blank" class="mx-1 btn btn-sm btn-outline-info"><i class="fa-brands fa-fw fa-x"></i></a>
</div>'>
Share
</button>
</div>
</div>

View File

@ -1,14 +1,14 @@
Folder: <strong>{FOLDER_SELECT_ROOT}</strong>
<div class="list-group mx-0 mx-auto">
{LOOP}
<label class="list-group-item d-flex justify-content-between align-items-center">
<div class="d-flex align-items-center">
<input class="form-check-input me-2" type="radio" name="folderSelect" value="{location}" data-bs-toggle="collapse" data-bs-target="#top-{folderName}">
<span>
<label class="list-group-item d-flex align-items-center">
<input class="form-check-input me-2" type="radio" name="folderSelect" value="{location}">
<button class="btn d-flex justify-content-between align-items-center w-100" type="button" aria-expanded="false" aria-controls="top-{folderName}" data-bs-toggle="collapse" data-bs-target="#top-{folderName}">
<span class="d-flex flex-grow-1">
{folderName}
</span>
</div>
{folderexpand}
<i class="fa fa-solid fa-caret-down"></i>
</button>
</label>
<div id="top-{folderName}" class="collapse">
{subdirs}

View File

@ -1,12 +1,12 @@
{LOOP}
<label class="list-group-item d-flex justify-content-between align-items-center">
<div class="d-flex align-items-center">
<input class="form-check-input me-2" type="radio" name="folderSelect" value="{location}" data-bs-toggle="collapse" data-bs-target="#{parentfolderName}-{folderName}">
<span>
{folderName}
<label class="list-group-item d-flex align-items-center">
<input class="form-check-input me-2" type="radio" name="folderSelect" value="{location}">
<button class="btn d-flex justify-content-between align-items-center w-100" type="button" aria-expanded="false" aria-controls="{parentfolderName}-{folderName}" data-bs-toggle="collapse" data-bs-target="#{parentfolderName}-{folderName}">
<span class="d-flex flex-grow-1">
{spacer}{folderName}
</span>
</div>
{folderexpand}
<i class="fa fa-solid fa-caret-down"></i>
</button>
</label>
<div id="{parentfolderName}-{folderName}" class="collapse">
{subdirs}

Some files were not shown because too many files have changed in this diff Show More