many fixes and updates

This commit is contained in:
Joey Kimsey
2024-12-20 05:53:57 -05:00
parent e7ec79e727
commit 1496b855db
62 changed files with 1211 additions and 438 deletions

View File

@ -22,25 +22,31 @@ use TheTempusProject\Classes\Controller;
use TheTempusProject\Classes\Forms;
use TheTempusProject\Models\Bookmarks as Bookmark;
use TheTempusProject\Models\Folders;
use TheTempusProject\Models\BookmarkDashboards as Dashboards;
use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Houdini\Classes\Components;
use TheTempusProject\Houdini\Classes\Forms as HoudiniForms;
use TheTempusProject\Houdini\Classes\Navigation;
use TheTempusProject\Houdini\Classes\Template;
use TheTempusProject\Hermes\Functions\Route as Routes;
use TheTempusProject\Models\User;
use TheTempusProject\Classes\Preferences;
use TheTempusProject\Canary\Bin\Canary as Debug;
class Bookmarks extends Controller {
protected static $bookmarks;
protected static $folders;
protected static $dashboards;
public function __construct() {
parent::__construct();
if ( !App::$isLoggedIn ) {
if ( ! App::$isLoggedIn ) {
Session::flash( 'notice', 'You must be logged in to create or manage bookmarks.' );
return Redirect::home();
}
self::$bookmarks = new Bookmark;
self::$folders = new Folders;
self::$dashboards = new Dashboards;
self::$title = 'Bookmarks - {SITENAME}';
self::$pageDescription = 'Add and save url bookmarks here.';
@ -57,14 +63,23 @@ class Bookmarks extends Controller {
Components::set( 'SITE_URL', Routes::getAddress() );
Views::raw( $tabsView );
Components::append( 'TEMPLATE_JS_INCLUDES', Template::parse('<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{ROOT_URL}app/plugins/bookmarks/js/bookmarks.js"></script>' ) );
$options = Views::simpleView( 'bookmarks.nav.viewOptions' );
Components::set( 'VIEW_OPTIONS', $options );
$viewOptions = Views::simpleView( 'bookmarks.nav.viewOptions' );
Components::set( 'VIEW_OPTIONS', $viewOptions );
$dashOptions = Views::simpleView( 'bookmarks.dashboards.dashOptions' );
Components::set( 'DASH_OPTIONS', $dashOptions );
$this->setPrefToggles();
}
public function index() {
$bookmarks = self::$bookmarks->noFolder();
if ( Input::exists('submit') ) {
$prefs = new Preferences;
$user = new User;
$fields = $prefs->convertFormToArray( true );
$out = $user->updatePrefs( $fields, App::$activeUser->ID );
$this->setPrefToggles();
}
$folders = self::$folders->byUser();
$panelArray = [];
if ( !empty( $folders ) ) {
foreach ( $folders as $folder ) {
@ -79,9 +94,7 @@ class Bookmarks extends Controller {
$panelArray[] = $folderObject;
}
}
Components::set( 'foldersList', Views::simpleView( 'bookmarks.folders.list', $folders ) );
Components::set( 'folderPanels', Views::simpleView( 'bookmarks.components.bookmarkListPanel', $panelArray ) );
Components::set( 'bookmarksList', Views::simpleView( 'bookmarks.bookmarks.list', $bookmarks ) );
return Views::view( 'bookmarks.dash' );
}
@ -102,6 +115,11 @@ class Bookmarks extends Controller {
return Views::view( 'bookmarks.bookmarks.view', $bookmark );
}
public function unsorted() {
$bookmarks = self::$bookmarks->noFolder();
Views::view( 'bookmarks.bookmarks.unsorted', $bookmarks );
}
public function bookmarks( $id = null ) {
$folder = self::$folders->findById( $id );
if ( $folder == false ) {
@ -113,8 +131,6 @@ class Bookmarks extends Controller {
return Redirect::to( 'bookmarks/index' );
}
Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmarks/' . $id );
$bookmarks = self::$bookmarks->noFolder();
$panelArray = [];
$panel = new \stdClass();
@ -325,6 +341,179 @@ class Bookmarks extends Controller {
Redirect::to( 'bookmarks/folders' );
}
/**
* Dashboards
*/
public function addDash() {
$folders = self::$folders->byUser() ?? [];
if ( !empty( $folders ) ) {
foreach ( $folders as &$folder ) {
$folder->selected = '';
}
}
$linkSelect = Views::simpleView( 'bookmarks.components.linkSelect', $folders );
Components::set( 'LINK_SELECT', $linkSelect );
if ( ! Input::exists( 'submit' ) ) {
return Views::view( 'bookmarks.dashboards.create' );
}
if ( !Forms::check( 'createDashboard' ) ) {
Issues::add( 'error', [ 'There was an error creating your dashboard.' => Check::userErrors() ] );
return Views::view( 'bookmarks.dashboards.create' );
}
if ( is_array( Input::post('link_filter') ) && ! empty( Input::post('link_filter') ) ) {
$filters = implode( ',', Input::post('link_filter') );
} else {
$filters = '';
}
if ( is_array( Input::post('link_order') ) && ! empty( Input::post('link_order') ) ) {
$folders = implode( ',', Input::post('link_order') );
} else {
$folders = '';
}
$result = self::$dashboards->create( Input::post('title'), $filters, $folders, Input::post('description') );
if ( !$result ) {
Issues::add( 'error', [ 'There was an error creating your dashboard.' => Check::userErrors() ] );
return Views::view( 'bookmarks.dashboards.create' );
}
Issues::add( 'success', 'Your dashboard has been created.' );
return $this->dashboards();
}
public function editDash( $id = null ) {
$dash = self::$dashboards->findById( $id );
if ( $dash == false ) {
Issues::add( 'error', 'Unknown Dashboard' );
return $this->dashboards();
}
if ( $dash->createdBy != App::$activeUser->ID ) {
Issues::add( 'error', 'You do not have permission to view this dashboard.' );
return $this->dashboards();
}
$this->setDashToggles( explode( ',', $dash->saved_prefs ) );
$folders = self::$folders->byUser() ?? [];
$selectedFolders = explode( ',', $dash->link_order );
if ( !empty( $folders ) ) {
foreach ( $folders as &$folder ) {
if ( in_array( $folder->ID, $selectedFolders ) ) {
$folder->selected = ' checked';
} else {
$folder->selected = '';
}
}
}
$linkSelect = Views::simpleView( 'bookmarks.components.linkSelect', $folders );
Components::set( 'LINK_SELECT', $linkSelect );
if ( ! Input::exists( 'submit' ) ) {
return Views::view( 'bookmarks.dashboards.edit', $dash );
}
if ( ! Forms::check( 'editDashboard' ) ) {
Issues::add( 'error', [ 'There was an error editing your dashboard.' => Check::userErrors() ] );
return Views::view( 'bookmarks.dashboards.edit', $dash );
}
if ( is_array( Input::post('link_filter') ) && ! empty( Input::post('link_filter') ) ) {
$filters = implode( ',', Input::post('link_filter') );
} else {
$filters = '';
}
if ( is_array( Input::post('link_order') ) && ! empty( Input::post('link_order') ) ) {
$folders = implode( ',', Input::post('link_order') );
} else {
$folders = '';
}
$result = self::$dashboards->update( $id, Input::post('title'), $filters, $folders, Input::post('description') );
if ( !$result ) {
Issues::add( 'error', [ 'There was an error updating your dashboard.' => Check::userErrors() ] );
return Views::view( 'bookmarks.dashboards.edit', $dash );
}
Issues::add( 'success', 'Your dashboard has been updated.' );
return $this->dashboards();
}
public function deleteDash( $id = null ) {
$dash = self::$dashboards->findById( $id );
if ( $dash == false ) {
Issues::add( 'error', 'Unknown Dashboard' );
return $this->dashboards();
}
if ( $dash->createdBy != App::$activeUser->ID ) {
Issues::add( 'error', 'You do not have permission to delete this dash.' );
return $this->dashboards();
}
$result = self::$dashboards->delete( $id );
if ( !$result ) {
Issues::add( 'error', 'There was an error deleting the dashboard(s)' );
} else {
Issues::add( 'success', 'Dashboard deleted' );
}
return $this->dashboards();
}
public function dashboard( $uuid = null ) {
$dash = self::$dashboards->findByUuid( $uuid );
if ( $dash == false ) {
return $this->dashboards();
}
if ( $dash->createdBy != App::$activeUser->ID ) {
Issues::add( 'error', 'You do not have permission to view this dash.' );
return $this->dashboards();
}
$foldersArray = [];
if ( ! empty( $dash->link_order ) ) {
$folders = explode( ',', $dash->link_order );
foreach ( $folders as $key => $id ) {
$folder = self::$folders->findById( $id );
if ( empty( $folder ) ) {
continue;
}
$bookmarks = self::$bookmarks->byFolder( $folder->ID );
if ( empty( $bookmarks ) ) {
continue;
}
$folderObject = new \stdClass();
$folderObject->ID = $folder->ID;
$folderObject->title = $folder->title;
$folderObject->color = $folder->color;
$folderObject->uuid = $folder->uuid;
$folderObject->bookmarkRows = Views::simpleView( 'bookmarks.dashboards.bookmarkRows', $bookmarks );
$foldersArray[] = $folderObject;
}
}
Components::set( 'folderPanels', Views::simpleView( 'bookmarks.dashboards.folderPanels', $foldersArray ) );
if ( ! empty( $dash->saved_prefs ) ) {
$this->setDashToggles( explode( ',', $dash->saved_prefs ) );
}
return Views::view( 'bookmarks.dashboards.view', $dash );
}
public function dashboards() {
$dashboards = self::$dashboards->byUser();
return Views::view( 'bookmarks.dashboards.list', $dashboards );
}
/**
* Functionality
*/
@ -688,4 +877,47 @@ class Bookmarks extends Controller {
$folderSelect = Template::parse( $out );
Components::set( 'folderSelect', $folderSelect );
}
private function setPrefToggles() {
$prefsArray = [
'editModeSwitch',
'showArchivedSwitch',
'showHiddenSwitch',
'archiveButtonSwitch',
'visibilityButtonSwitch',
'privacyButtonSwitch',
'shareButtonSwitch',
'addButtonSwitch'
];
foreach ($prefsArray as $key => $name) {
if ( empty( App::$activeUser->prefs[$name] ) ) {
Components::set( $name . '_IS_CHECKED', '' );
} else {
Components::set( $name . '_IS_CHECKED', ' checked' );
}
}
}
private function setDashToggles( $current = [] ) {
$prefsArray = [
'editModeSwitch',
'showArchivedSwitch',
'showHiddenSwitch',
'archiveButtonSwitch',
'visibilityButtonSwitch',
'privacyButtonSwitch',
'shareButtonSwitch',
'addButtonSwitch'
];
foreach ( $prefsArray as $key => $name ) {
Debug::error( $name );
Debug::error( $current );
if ( ! in_array( $name, $current ) ) {
Components::set( $name . '_IS_CHECKED', '' );
} else {
Debug::error( '_IS_CHECKED' );
Components::set( $name . '_IS_CHECKED', ' checked' );
}
}
}
}

View File

@ -0,0 +1,65 @@
<?php
/**
* app/controllers/extensions.php
*
* This is the extensions controller.
*
* @version 3.0
* @author Joey Kimsey <Joey@thetempusproject.com>
* @link https://TheTempusProject.com
* @license https://opensource.org/licenses/MIT [MIT LICENSE]
*/
namespace TheTempusProject\Controllers;
use TheTempusProject\Classes\Controller;
use TheTempusProject\Houdini\Classes\Views;
use TheTempusProject\Houdini\Classes\Issues;
use TheTempusProject\TheTempusProject as App;
class Extensions extends Controller {
public function index() {
self::$title = 'Browser Extensions';
if ( App::$isLoggedIn ) {
Issues::add( 'success', 'We also have a simple solution to using the app from your mobile devices <a href="/extensions/mobile">here</a>.' );
}
Views::view( 'bookmarks.extensions.index' );
}
public function mobile() {
self::$title = 'Mobile Bookmarklet';
if ( App::$isLoggedIn ) {
return Issues::add( 'error', 'Unfortunately you will need to sign in to generate the bookmarklet unique to your account.' );
}
Views::view( 'bookmarks.extensions.bookmarklet' );
}
public function chrome() {
self::$title = 'Chrome Extension';
Views::view( 'bookmarks.extensions.chrome' );
}
public function firefox() {
self::$title = 'Firefox Extension';
Views::view( 'bookmarks.extensions.firefox' );
}
public function opera() {
self::$title = 'Opera Extension';
Views::view( 'bookmarks.extensions.opera' );
}
public function edge() {
self::$title = 'Edge Extension';
Views::view( 'bookmarks.extensions.edge' );
}
public function brave() {
self::$title = 'Brave Extension';
Views::view( 'bookmarks.extensions.brave' );
}
public function safari() {
self::$title = 'Safari Extension';
Views::view( 'bookmarks.extensions.safari' );
}
}

View File

@ -27,6 +27,8 @@ class BookmarksForms extends Forms {
self::addHandler( 'editFolder', __CLASS__, 'editFolder' );
self::addHandler( 'importBookmarks', __CLASS__, 'importBookmarks' );
self::addHandler( 'exportBookmarks', __CLASS__, 'exportBookmarks' );
self::addHandler( 'createDashboard', __CLASS__, 'createDashboard' );
self::addHandler( 'editDashboard', __CLASS__, 'editDashboard' );
}
public static function createBookmark() {
@ -168,6 +170,44 @@ class BookmarksForms extends Forms {
// }
return true;
}
public static function createDashboard() {
if ( ! Input::exists( 'submit' ) ) {
return false;
}
if ( ! Input::exists( 'title' ) ) {
Check::addUserError( 'You must include a title.' );
return false;
}
if ( ! Input::exists( 'link_order' ) ) {
Check::addUserError( 'You must include at least 1 link or folder.' );
return false;
}
if ( !self::token() ) {
Check::addUserError( 'There was an issue with your request.' );
return false;
}
return true;
}
public static function editDashboard() {
if ( ! Input::exists( 'submit' ) ) {
return false;
}
if ( ! Input::exists( 'title' ) ) {
Check::addUserError( 'You must include a title.' );
return false;
}
if ( ! Input::exists( 'link_order' ) ) {
Check::addUserError( 'You must include at least 1 link or folder.' );
return false;
}
if ( !self::token() ) {
Check::addUserError( 'There was an issue with your request.' );
return false;
}
return true;
}
}
new BookmarksForms;

View File

@ -34,13 +34,22 @@ document.addEventListener('DOMContentLoaded', () => {
toggleVisibility('privacyButtonSwitch', 'btn-publish');
toggleVisibility('addButtonSwitch', 'btn-addlink');
toggleVisibility('shareButtonSwitch', 'btn-share');
toggleVisibility('dashShowArchivedSwitch', 'link-archived');
toggleVisibility('dashShowHiddenSwitch', 'link-hidden');
toggleVisibility('dashAddButtonSwitch', 'btn-addlink');
toggleVisibility('dashShareButtonSwitch', 'btn-share');
});
// Function to handle showing or hiding elements based on the checkbox state
function toggleVisibility(switchId, className) {
const switchElement = document.getElementById(switchId);
const elementsToToggle = document.querySelectorAll(`.${className}`);
if ( ! switchElement ) {
return;
}
// Listen for changes to the checkbox
switchElement.addEventListener('change', () => {
if (switchElement.checked) {
@ -59,6 +68,9 @@ function toggleVisibility(switchId, className) {
}
document.addEventListener('DOMContentLoaded', function () {
const bookmarkSort = document.getElementById('bookmarkSort');
if ( ! bookmarkSort ) {
return;
}
let draggingElement = null;
let placeholder = null;
let initialX = 0;
@ -180,7 +192,3 @@ document.addEventListener('DOMContentLoaded', function () {
document.addEventListener('mouseup', handleDragEnd);
bookmarkSort.addEventListener('dragover', handleDrop); // Listen for the drop event to update the order
});

View File

@ -1,8 +1,8 @@
<?php
/**
* app/plugins/bookmarks/models/bookmarkViews.php
* app/plugins/bookmarks/models/bookmark_dashboards.php
*
* This class is used for the manipulation of the bookmark_views database table.
* This class is used for the manipulation of the bookmark_dashboards database table.
*
* @package TP Bookmarks
* @version 3.0
@ -19,26 +19,17 @@ use TheTempusProject\TheTempusProject as App;
use TheTempusProject\Houdini\Classes\Filters;
use TheTempusProject\Canary\Classes\CustomException;
class Bookmarkviews extends DatabaseModel {
public $tableName = 'bookmark_views';
class BookmarkDashboards extends DatabaseModel {
public $tableName = 'bookmark_dashboards';
public $databaseMatrix = [
[ 'title', 'varchar', '256' ],
[ 'saved_prefs', 'text', '' ],
[ 'link_order', 'text', '' ],
[ 'description', 'text', '' ],
[ 'privacy', 'varchar', '48' ],
[ 'createdBy', 'int', '11' ],
[ 'createdAt', 'int', '11' ],
[ 'updatedAt', 'int', '11' ],
[ 'uuid', 'text', '' ],
[ 'uuid', 'char', '36' ],
];
/**
@ -48,7 +39,7 @@ class Bookmarkviews extends DatabaseModel {
parent::__construct();
}
public function create( $title, $description = '', $privacy = 'private' ) {
public function create( $title, $saved_prefs, $link_order, $description = '' ) {
if ( ! Check::dataTitle( $title ) ) {
Debug::info( 'Views: illegal title.' );
return false;
@ -56,7 +47,8 @@ class Bookmarkviews extends DatabaseModel {
$fields = [
'title' => $title,
'description' => $description,
'privacy' => $privacy,
'saved_prefs' => $saved_prefs,
'link_order' => $link_order,
'uuid' => generateUuidV4(),
'createdBy' => App::$activeUser->ID,
'createdAt' => time(),
@ -69,7 +61,7 @@ class Bookmarkviews extends DatabaseModel {
return self::$db->lastId();
}
public function update( $id, $title, $description = '', $privacy = 'private' ) {
public function update( $id, $title, $saved_prefs, $link_order, $description = '' ) {
if ( !Check::id( $id ) ) {
Debug::info( 'Views: illegal ID.' );
return false;
@ -81,11 +73,12 @@ class Bookmarkviews extends DatabaseModel {
$fields = [
'title' => $title,
'description' => $description,
'privacy' => $privacy,
'saved_prefs' => $saved_prefs,
'link_order' => $link_order,
];
if ( !self::$db->update( $this->tableName, $id, $fields ) ) {
new CustomException( 'viewUpdate' );
Debug::error( "Views: $id not updated: $fields" );
Debug::error( "Views: $id not updated" );
return false;
}
return true;
@ -147,4 +140,16 @@ class Bookmarkviews extends DatabaseModel {
}
return $out;
}
public function findByUuid( $id ) {
$whereClause = ['uuid', '=', $id];
$dashboards = self::$db->get( $this->tableName, $whereClause );
if ( !$dashboards->count() ) {
Debug::info( 'No Dashboards found.' );
return false;
}
return $this->filter( $dashboards->first() );
}
}

View File

@ -42,7 +42,7 @@ class Bookmarks extends DatabaseModel {
[ 'hiddenAt', 'int', '11' ],
[ 'order', 'int', '11' ],
[ 'linkType', 'varchar', '32' ],
[ 'uuid', 'uuid', '36' ],
[ 'uuid', 'char', '36' ],
];
/**

View File

@ -29,7 +29,7 @@ class Folders extends DatabaseModel {
[ 'folderID', 'int', '11' ],
[ 'createdBy', 'int', '11' ],
[ 'createdAt', 'int', '11' ],
[ 'uuid', 'text', '' ],
[ 'uuid', 'char', '36' ],
];
/**

View File

@ -55,6 +55,90 @@ class Bookmarks extends Plugin {
'default' => true,
],
];
public $preferenceMatrix = [
'editModeSwitch' => [
'pretty' => 'Bookmarks default setting for edit mode',
'type' => 'checkbox',
'default' => 'false',
],
'showArchivedSwitch' => [
'pretty' => 'Bookmarks default setting for showing archived bookmarks',
'type' => 'checkbox',
'default' => 'false',
],
'showHiddenSwitch' => [
'pretty' => 'Bookmarks default setting for showing hidden bookmarks',
'type' => 'checkbox',
'default' => 'false',
],
'archiveButtonSwitch' => [
'pretty' => 'Bookmarks default setting for showing the archive buttons',
'type' => 'checkbox',
'default' => 'false',
],
'visibilityButtonSwitch' => [
'pretty' => 'Bookmarks default setting for showing the visibility buttons',
'type' => 'checkbox',
'default' => 'false',
],
'privacyButtonSwitch' => [
'pretty' => 'Bookmarks default setting for showing the privacy buttons',
'type' => 'checkbox',
'default' => 'true',
],
'shareButtonSwitch' => [
'pretty' => 'Bookmarks default setting for showing the share buttons',
'type' => 'checkbox',
'default' => 'true',
],
'addButtonSwitch' => [
'pretty' => 'Bookmarks default setting for showing the add buttons',
'type' => 'checkbox',
'default' => 'true',
],
];
public $resourceMatrix = [
'routes' => [
[
'original_url' => 'chrome',
'redirect_type' => 'external',
'nickname' => 'Chrome Extension',
'forwarded_url' => 'https://chromewebstore.google.com/detail/allthebookmarks/hcofhopnjoodmakhhmgmoohgpdhfkgii?authuser=0&hl=en',
],
[
'original_url' => 'brave',
'redirect_type' => 'external',
'nickname' => 'Brave Extension',
'forwarded_url' => 'https://chromewebstore.google.com/detail/allthebookmarks/hcofhopnjoodmakhhmgmoohgpdhfkgii?authuser=0&hl=en',
],
[
'original_url' => 'firefox',
'redirect_type' => 'external',
'nickname' => 'Firefox Extension',
'forwarded_url' => 'https://addons.mozilla.org/en-US/firefox/addon/allthebookmarks/',
],
// [
// 'original_url' => 'edge',
// 'redirect_type' => 'external',
// 'nickname' => 'Edge Extension',
// 'forwarded_url' => 'https://www.facebook.com/thetempusproject',
// ],
// [
// 'original_url' => 'opera',
// 'redirect_type' => 'external',
// 'nickname' => 'Opera Extension',
// 'forwarded_url' => 'https://www.facebook.com/thetempusproject',
// ],
]
];
public $bookmarks;
public $folders;

View File

@ -1,5 +1,5 @@
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<div class="my-4">
<div class="offset-md-2 col-8 py-3 context-main-bg">
<legend class="text-center">Add Bookmark</legend>
<hr>
<form method="post" class="container py-4">

View File

@ -1,51 +1,56 @@
<form action="" method="post" class="container py-4">
<h2 class="text-center mb-4">Edit Bookmark</h2>
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<div class="my-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<legend class="text-center">Edit Bookmark</legend>
<hr>
<form action="" method="post" class="container py-4">
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<div class="mb-3 row">
<label for="url" class="col-lg-5 col-form-label text-end">URL</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="url" id="url" value="{url}" required>
</div>
</div>
<div class="mb-3 row">
<label for="url" class="col-lg-5 col-form-label text-end">URL</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="url" id="url" value="{url}" required>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Description:</label>
<div class="col-lg-3">
<textarea class="form-control" name="description" maxlength="2000" rows="10" cols="50" id="description">{description}</textarea>
</div>
</div>
{folderSelect}
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Privacy</label>
<div class="col-lg-3">
<select id="privacy" name="privacy" class="form-select" value="{privacy}">
<option value="private">Private</option>
<option value="public">Public</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Color</label>
<div class="col-lg-3" id="colorContainer">
{colorSelect}
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Description:</label>
<div class="col-lg-3">
<textarea class="form-control" name="description" maxlength="2000" rows="10" cols="50" id="description">{description}</textarea>
</div>
</div>
{folderSelect}
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Privacy</label>
<div class="col-lg-3">
<select id="privacy" name="privacy" class="form-select" value="{privacy}">
<option value="private">Private</option>
<option value="public">Public</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Color</label>
<div class="col-lg-3" id="colorContainer">
{colorSelect}
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
</div>
</div>

View File

@ -1,40 +1,38 @@
<table class="table context-main">
<thead>
<tr>
<th style="width: 75%">Bookmark</th>
<th style="width: 10%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td style="text-align: center;">
<a href="{url}">
{title}
</a>
</td>
<td style="text-align: center;">
{privacy}
</td>
<td><a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td style="text-align: center;" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="text-center">
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-md btn-primary">Create</a>
</div>
<table class="table table-striped context-main">
<thead>
<tr>
<th style="width: 75%">Bookmark</th>
<th style="width: 10%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td style="text-align: center;">
<a href="{url}">
{title}
</a>
</td>
<td style="text-align: center;">
{privacy}
</td>
<td><a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="btn btn-sm btn-outline-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-outline-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-outline-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td style="text-align: center;" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="text-center">
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-md btn-primary">Create</a>
</div>

View File

@ -0,0 +1,44 @@
<div class="my-4 g-">
<div class="offset-md-2 col-8 mr-2 py-3 context-main-bg p-3">
<legend class="text-center">Unsorted Bookmarks</legend>
<hr>
<table class="table table-striped context-main1">
<thead>
<tr>
<th style="width: 75%">Bookmark</th>
<th style="width: 10%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td style="text-align: center;">
<a href="{url}">
{title}
</a>
</td>
<td style="text-align: center;">
{privacy}
</td>
<td><a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="btn btn-sm btn-outline-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-outline-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-outline-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td style="text-align: center;" colspan="6">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="text-center">
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-md btn-primary">Add</a>
</div>
</div>
</div>

View File

@ -28,7 +28,7 @@
<div id="Collapse{ID}" class="accordion-collapse collapse w-100 position-relative show">
<div class="card-body accordion-body p-2 context-second-bg">
<ul class="list-group">
<ul class="list-group mt-1">
{bookmarkListRows}
</ul>
</div>

View File

@ -1,5 +1,5 @@
{LOOP}
<li class="list-group-item context-main-b bg-{color} {hidden_class} {archived_class}">
<li class="list-group-item context-main-bg bg-{color} {hidden_class} {archived_class} mb-1">
<a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
<a href="{url}"> {title}</a>
<span class="float-end">
@ -29,7 +29,7 @@
</li>
{/LOOP}
{ALT}
<li class="list-group-item context-main context-main-bg">
<p class="list-group text-center">No Bookmarks</p>
<li class="list-group-item context-main context-main-bg mb-1">
<p class="list-group text-center">No Bookmarks</p>
</li>
{/ALT}

View File

@ -0,0 +1,16 @@
<div class="" id="accordionFolders">
<!-- Folder -->
{LOOP}
<div class="">
<!-- Header -->
<h4 class="" id="headingFolder{ID}">
<div class="d-flex align-items-center context-main-bg context-main bg-{color}">
<input type="checkbox" class="form-check-input m-2" name="link_order[]" value="{ID}"{selected}>
<span class="card-header context-main bg-{color}">
{title}
</span>
</div>
</h4>
</div>
{/LOOP}
</div>

View File

@ -1,5 +1,5 @@
{LOOP}
<li class="list-group-item context-main-bg bg-{color}">
<li class="list-group-item context-main-bg bg-{color} mb-1">
<a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
<a href="{url}"> {title}</a>{privacyBadge}
<span class="float-end">

View File

@ -1,17 +1,7 @@
<div class="row mt-4 g-1">
<div class="offset-md-1 col-5 mr-2 py-3 context-main-bg">
<legend class="text-center">Unsorted Bookmarks</legend>
{bookmarksList}
</div>
<div class="col-5 py-3 ml-2 context-main-bg">
<legend class="text-center">Folders List</legend>
{foldersList}
</div>
</div>
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<legend class="text-center">Bookmarks</legend>
<legend class="text-center">MAnage</legend>
<hr>
{VIEW_OPTIONS}
<hr>
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">

View File

@ -0,0 +1,30 @@
{LOOP}
<li class="list-group-item context-main-bg bg-{color} {hidden_class} {archived_class} mb-1">
<a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
<a href="{url}"> {title}</a>
<span class="float-end">
<a class="btn btn-sm btn-primary btn-share" data-bs-toggle="modal" data-bs-target="#linkShare{ID}">
<i class="fa fa-fw fa-share"></i>
</a>
<div class="modal fade" id="linkShare{ID}" tabindex="-1" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5">Share Url</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<input type="text" value="{SITE_URL}shared/link/{uuid}" name="input" class="w-100 form-control" id="shareLinkUrlInput{ID}">
<button class="btn btn-secondary mt-2" onclick="copyElementText('shareLinkUrlInput{ID}')">Copy</button>
</div>
</div>
</div>
</div>
</span>
</li>
{/LOOP}
{ALT}
<li class="list-group-item context-main context-main-bg mb-1">
<p class="list-group text-center">No Bookmarks</p>
</li>
{/ALT}

View File

@ -0,0 +1,43 @@
<div class="my-4">
<div class="offset-md-1 col-10 py-3 context-main-bg text-center">
<legend class="">Add Dashboard</legend>
<hr>
<p>Dashboards are groups of folders that usually share a theme. When links are added to folders they will automatically be added to dashboards unless hidden or archived. </p>
<form action="" method="post" class="container py-4">
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Title</label>
<div class="col-lg-4">
<input type="text" class="form-control" name="title" id="title" required>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Description:</label>
<div class="col-lg-4">
<textarea class="form-control" name="description" maxlength="2000" rows="4" id="description"></textarea>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Dashboard Filters:</label>
<div class="col-lg-4">
{DASH_OPTIONS}
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Included Folders:</label>
<div class="col-lg-4">
{LINK_SELECT}
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Create</button>
</div>
</fieldset>
</form>
</div>
</div>

View File

@ -0,0 +1,29 @@
<div class="p-2">
<!-- Status Filters -->
<div class="d-flex align-items-center border p-2 rounded mb-3 context-main-bg">
<div class="me-3 fw-bold">Status:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" value="showArchivedSwitch" id="dashShowArchivedSwitch" name="link_filter[]"{showArchivedSwitch_IS_CHECKED}>
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" value="showHiddenSwitch" id="dashShowHiddenSwitch" name="link_filter[]"{showHiddenSwitch_IS_CHECKED}>
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
</div>
</div>
<!-- Buttons Filters -->
<div class="d-flex align-items-center border p-2 rounded context-main-bg">
<div class="me-3 fw-bold">Buttons:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" value="shareButtonSwitch" id="dashShareButtonSwitch" name="link_filter[]"{shareButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" value="addButtonSwitch" id="dashAddButtonSwitch" name="link_filter[]"{addButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
</div>
</div>
</div>

View File

@ -0,0 +1,43 @@
<div class="my-4">
<div class="offset-md-1 col-10 py-3 context-main-bg text-center">
<legend class="">Edit Dashboard</legend>
<hr>
<p>Dashboards are groups of folders that usually share a theme. When links are added to folders they will automatically be added to dashboards unless hidden or archived. </p>
<form action="" method="post" class="container py-4">
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Title</label>
<div class="col-lg-4">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Description:</label>
<div class="col-lg-4">
<textarea class="form-control" name="description" maxlength="2000" rows="4" id="description">{description}</textarea>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Dashboard Filters:</label>
<div class="col-lg-4">
{DASH_OPTIONS}
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-4 col-form-label text-end">Included Folders:</label>
<div class="col-lg-4">
{LINK_SELECT}
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
</div>
</div>

View File

@ -0,0 +1,51 @@
{LOOP}
<div class="col-xlg-6 col-lg-6 col-md-6 col-sm-6 bookmark-card" id="folderCard{ID}">
<div class="card m-3 accordion">
<div class="accordion-item">
<div class="card-header accordion-header text-center bg-{color} context-main">
<span class="h4 float-left mover-arrow"><i class="fa-solid fa-arrows-up-down-left-right"></i></span>
<span class="h4 text-center mx-5" data-bs-target="#Collapse{ID}" data-bs-toggle="collapse" aria-expanded="true" aria-controls="Collapse{ID}">{title}</span>
<a class="btn btn-sm btn-primary btn-rounded float-end btn-share" data-bs-toggle="modal" data-bs-target="#linkShare{ID}">
<i class="fa fa-fw fa-share"></i>
</a>
</div>
<div class="modal fade context-main" id="linkShare{ID}" tabindex="-1" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
<div class="modal-content">
<div class="modal-header context-main-bg">
<h1 class="modal-title fs-5">Share Url</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body context-second-bg">
<p>This link can be shared with anyone and will show display info as long as it is set to public privacy.</p>
<input type="text" value="{SITE_URL}shared/folder/{uuid}" name="input" class="w-100 form-control" id="shareFolderUrlInput{ID}">
<button class="btn btn-secondary mt-2" onclick="copyElementText('shareFolderUrlInput{ID}')">Copy</button>
</div>
</div>
</div>
</div>
<div id="Collapse{ID}" class="accordion-collapse collapse w-100 position-relative show">
<div class="card-body accordion-body p-2 context-second-bg">
<ul class="list-group mt-1">
{bookmarkRows}
</ul>
</div>
<div class="card-footer d-flex justify-content-center align-items-center context-main-bg">
<a href="{ROOT_URL}bookmarks/createBookmark/{ID}" class="btn btn-sm btn-success btn-addlink"><i class="fa fa-fw fa-plus"></i></a></td>
<span class="ms-auto">
<a href="{ROOT_URL}bookmarks/bookmarks/{ID}" class="btn btn-sm btn-outline-primary"><i class="fa fa-fw fa-list"></i></a>
<a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-outline-primary"><i class="fa fa-fw fa-info-circle"></i></a></td>
</span>
</div>
</div>
</div>
</div>
</div>
{/LOOP}
{ALT}
<div class="col-12 text-center h4">
<p>No folders found.</p>
</div>
{/ALT}

View File

@ -0,0 +1,44 @@
<div class="my-4">
<div class="offset-2 col-8 p-3 context-main-bg">
<legend class="text-center">Dashboards</legend>
<hr>
<div class="offset-3 col-lg-6 my-4">
<p>From here you can easily create, update, or remove any bookmark dashboards you have created.</p>
<p>Dashboards are a feature that allow you to build customized bookmark pages that you can easily save and open la</p>
</div>
<div class="row g-3 text-center p-2" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
<table class="table context-main">
<thead>
<tr>
<th>Title</th>
<th>Description</th>
<th></th>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td class="">{title}</td>
<td>{description}</td>
<td><a href="{ROOT_URL}bookmarks/dashboard/{uuid}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-upload"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editDash/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteDash/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td class="context-main" colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="">
<a href="{ROOT_URL}bookmarks/addDash" class="btn btn-md btn-primary">Create</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,26 @@
<div class="my-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<legend class="text-center">{title}</legend>
<hr>
<form method="post">
<fieldset>
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
{folderPanels}
</div>
<hr>
<div class="container">
<div class="row">
<div class="col-md-6 offset-2">
{DASH_OPTIONS}
</div>
<div class="col-md-4">
<div class="h-100 d-flex align-items-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg mx-5">Save</button>
</div>
</div>
</div>
</div>
</fieldset>
</form>
</div>
</div>

View File

@ -1,10 +1,10 @@
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<div class="my-4">
<div class="offset-2 col-8 p-3 context-main-bg">
<legend class="text-center">Bookmark Export</legend>
<hr>
<h3 class="text-center text-muted">Select which folders to include in the export.</h3>
<div class="row g-3 col-4 offset-4" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
<form action="" method="post">
<h3 class="text-center text-muted">Select which folders to include in the export</h3>
<form action="" method="post">
<div class="row g-3 col-4 offset-4" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
<table class="table context-main">
<thead>
<tr>

View File

@ -0,0 +1,64 @@
<div class="col-10 offset-md-1 context-main-bg p-4 my-5">
<legend class="text-center">Mobile Bookmarklet</legend>
<hr>
<div class="col-8 offset-2 ">
<div class="h5">
<p>
You can quickly and easily add bookmarks to your AllTheBookmarks account from any mobile device.
Since you can't use extensions on mobile, you can log in from your mobile device and visit this page.
</p>
<p>
Below is a code snippet that you can copy, then create a new bookmark on your mobile device as you would normally.
Before saving the bookmark, change the name to something simple like "ATB Bookmarker" and paste thiis code as the url.
</p>
<p>
Once you have the bookmarklet saved, you can simply go to your mobile bookmarks while on a page and this snippet will grab the info you need and add it to you account.
</p>
</div>
<div class="">
<pre lang="javascript">
javascript:(function() {
const apiKey = localStorage.getItem('notAnAuthToken');
const apiUrl = localStorage.getItem('api_url');
const name = prompt("Enter a name for the bookmark:");
const notes = prompt("Enter any notes (optional):");
const color = prompt("Enter a color (optional):");
const privacy = prompt("Enter privacy level (e.g., public/private):");
const folder = prompt("Enter a folder (optional):");
const url = window.location.href;
if (!apiKey) {
alert("You must sign in to obtain an auth token.");
return;
}
if (!name) {
alert("Name is required.");
return;
}
fetch(apiUrl + 'api/bookmarks/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${apiKey}`
},
body: JSON.stringify({ name, url, notes, color, privacy, folder })
})
.then(response => {
if (response.ok) {
alert("Bookmark saved successfully!");
} else {
alert("Failed to save bookmark. Please check your API key.");
}
})
.catch(error => {
console.error(error);
alert("An unknown error occurred while saving the bookmark.");
});
})();
</pre>
</div>
</div>
</div>

View File

@ -0,0 +1,62 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-brave fa-3x text-danger mb-3"></i>
<h5 class="card-title">Brave Extension</h5>
<p class="lead text-muted">Your ultimate Brave addon to organize, store, and personalize your bookmarks effortlessly.</p>
</div>
<!-- Features Section -->
<div class="row g-4">
<!-- Feature: Add and Manage Bookmarks -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-bookmark fa-2x text-primary mb-3"></i>
<h5 class="card-title">Add & Manage Bookmarks</h5>
<p class="card-text">Quickly add bookmarks, organize them, and never lose track of your favorite websites.</p>
</div>
</div>
</div>
<!-- Feature: Create Folders -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-folder-open fa-2x text-success mb-3"></i>
<h5 class="card-title">Create Folders</h5>
<p class="card-text">Group your bookmarks into customizable folders for better organization.</p>
</div>
</div>
</div>
<!-- Feature: Set Colors -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-palette fa-2x text-warning mb-3"></i>
<h5 class="card-title">Set Colors</h5>
<p class="card-text">Personalize your folders and bookmarks with color coding.</p>
</div>
</div>
</div>
<!-- Feature: Privacy Settings -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-lock fa-2x text-danger mb-3"></i>
<h5 class="card-title">Privacy Controls</h5>
<p class="card-text">Keep your bookmarks private or share them—your choice, your control.</p>
</div>
</div>
</div>
</div>
<!-- Call to Action -->
<div class="text-center mt-5">
<a href="/brave" class="btn btn-primary atb-green-bg btn-lg">
<i class="fas fa-download me-2"></i>Get the Addon for Brave
</a>
</div>
</div>

View File

@ -0,0 +1,62 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-chrome fa-3x text-primary mb-3"></i>
<h5 class="card-title">Chrome Extension</h5>
<p class="lead text-muted">Your ultimate Chrome addon to organize, store, and personalize your bookmarks effortlessly.</p>
</div>
<!-- Features Section -->
<div class="row g-4">
<!-- Feature: Add and Manage Bookmarks -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-bookmark fa-2x text-primary mb-3"></i>
<h5 class="card-title">Add & Manage Bookmarks</h5>
<p class="card-text">Quickly add bookmarks, organize them, and never lose track of your favorite websites.</p>
</div>
</div>
</div>
<!-- Feature: Create Folders -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-folder-open fa-2x text-success mb-3"></i>
<h5 class="card-title">Create Folders</h5>
<p class="card-text">Group your bookmarks into customizable folders for better organization.</p>
</div>
</div>
</div>
<!-- Feature: Set Colors -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-palette fa-2x text-warning mb-3"></i>
<h5 class="card-title">Set Colors</h5>
<p class="card-text">Personalize your folders and bookmarks with color coding.</p>
</div>
</div>
</div>
<!-- Feature: Privacy Settings -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-lock fa-2x text-danger mb-3"></i>
<h5 class="card-title">Privacy Controls</h5>
<p class="card-text">Keep your bookmarks private or share them—your choice, your control.</p>
</div>
</div>
</div>
</div>
<!-- Call to Action -->
<div class="text-center mt-5">
<a href="/chrome" class="btn btn-primary atb-green-bg btn-lg">
<i class="fas fa-download me-2"></i>Get the Addon for Chrome
</a>
</div>
</div>

View File

@ -0,0 +1,62 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-edge fa-3x text-info mb-3"></i>
<h5 class="card-title">Edge Extension</h5>
<p class="lead text-muted">Your ultimate Edge addon to organize, store, and personalize your bookmarks effortlessly.</p>
</div>
<!-- Features Section -->
<div class="row g-4">
<!-- Feature: Add and Manage Bookmarks -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-bookmark fa-2x text-primary mb-3"></i>
<h5 class="card-title">Add & Manage Bookmarks</h5>
<p class="card-text">Quickly add bookmarks, organize them, and never lose track of your favorite websites.</p>
</div>
</div>
</div>
<!-- Feature: Create Folders -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-folder-open fa-2x text-success mb-3"></i>
<h5 class="card-title">Create Folders</h5>
<p class="card-text">Group your bookmarks into customizable folders for better organization.</p>
</div>
</div>
</div>
<!-- Feature: Set Colors -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-palette fa-2x text-warning mb-3"></i>
<h5 class="card-title">Set Colors</h5>
<p class="card-text">Personalize your folders and bookmarks with color coding.</p>
</div>
</div>
</div>
<!-- Feature: Privacy Settings -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-lock fa-2x text-danger mb-3"></i>
<h5 class="card-title">Privacy Controls</h5>
<p class="card-text">Keep your bookmarks private or share them—your choice, your control.</p>
</div>
</div>
</div>
</div>
<!-- Call to Action -->
<div class="text-center mt-5">
<a href="#" class="btn btn-primary atb-green-bg btn-lg">
<i class="fas fa-download me-2"></i>Get the Addon for Edge
</a>
</div>
</div>

View File

@ -0,0 +1,62 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-firefox fa-3x text-warning mb-3"></i>
<h5 class="card-title">Firefox Extension</h5>
<p class="lead text-muted">Your ultimate Firefox addon to organize, store, and personalize your bookmarks effortlessly.</p>
</div>
<!-- Features Section -->
<div class="row g-4">
<!-- Feature: Add and Manage Bookmarks -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-bookmark fa-2x text-primary mb-3"></i>
<h5 class="card-title">Add & Manage Bookmarks</h5>
<p class="card-text">Quickly add bookmarks, organize them, and never lose track of your favorite websites.</p>
</div>
</div>
</div>
<!-- Feature: Create Folders -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-folder-open fa-2x text-success mb-3"></i>
<h5 class="card-title">Create Folders</h5>
<p class="card-text">Group your bookmarks into customizable folders for better organization.</p>
</div>
</div>
</div>
<!-- Feature: Set Colors -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-palette fa-2x text-warning mb-3"></i>
<h5 class="card-title">Set Colors</h5>
<p class="card-text">Personalize your folders and bookmarks with color coding.</p>
</div>
</div>
</div>
<!-- Feature: Privacy Settings -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-lock fa-2x text-danger mb-3"></i>
<h5 class="card-title">Privacy Controls</h5>
<p class="card-text">Keep your bookmarks private or share them—your choice, your control.</p>
</div>
</div>
</div>
</div>
<!-- Call to Action -->
<div class="text-center mt-5">
<a href="/firefox" class="btn btn-primary atb-green-bg btn-lg">
<i class="fas fa-download me-2"></i>Get the Addon for Firefox
</a>
</div>
</div>

View File

@ -0,0 +1,78 @@
<div class="container py-5">
<!-- Page Header -->
<div class="text-center mb-4">
<h1 class="fw-bold">Our Browser Extensions</h1>
<p class="lead text-muted">Discover powerful tools to enhance your browsing experience, compatible with the browsers you love.</p>
</div>
<!-- Products Grid -->
<div class="row g-4">
<!-- Chrome Extension -->
<div class="col-md-4">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fab fa-chrome fa-3x text-primary mb-3"></i>
<h5 class="card-title">Chrome Extension</h5>
<p class="card-text">Enhance your Chrome browser with advanced features and effortless organization.</p>
<a href="/extensions/chrome" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
</div>
</div>
</div>
<!-- Firefox Extension -->
<div class="col-md-4">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fab fa-firefox fa-3x text-warning mb-3"></i>
<h5 class="card-title">Firefox Extension</h5>
<p class="card-text">Seamlessly integrate with Firefox for a smoother browsing experience.</p>
<a href="/extensions/firefox" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
</div>
</div>
</div>
<!-- Opera Extension -->
<div class="col-md-4">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fab fa-opera fa-3x text-danger mb-3"></i>
<h5 class="card-title">Opera Extension</h5>
<p class="card-text">Boost your Opera browser with intuitive features and tools.</p>
<a href="/extensions/opera" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
</div>
</div>
</div>
<!-- Brave Extension -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fab fa-brave fa-3x text-orange mb-3"></i>
<h5 class="card-title">Brave Extension</h5>
<p class="card-text">Enjoy secure and private browsing with Brave, enhanced by our extension.</p>
<a href="/extensions/brave" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
</div>
</div>
</div>
<!-- Edge Extension -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fab fa-edge fa-3x text-info mb-3"></i>
<h5 class="card-title">Edge Extension</h5>
<p class="card-text">Maximize productivity on Microsoft Edge with our extension.</p>
<a href="/extensions/edge" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
</div>
</div>
</div>
</div>
<!-- Safari Disclaimer -->
<div class="text-center mt-5">
<p class="text-muted">
<i class="fas fa-exclamation-circle me-2"></i>
Unfortunately, our extensions are not currently supported on <a href="/extensions/safari" class="text-decoration-none atb-green">Safari</a>.
</p>
</div>
</div>

View File

@ -0,0 +1,62 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-opera fa-3x text-danger mb-3"></i>
<h5 class="card-title">Opera Extension</h5>
<p class="lead text-muted">Your ultimate Opera addon to organize, store, and personalize your bookmarks effortlessly.</p>
</div>
<!-- Features Section -->
<div class="row g-4">
<!-- Feature: Add and Manage Bookmarks -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-bookmark fa-2x text-primary mb-3"></i>
<h5 class="card-title">Add & Manage Bookmarks</h5>
<p class="card-text">Quickly add bookmarks, organize them, and never lose track of your favorite websites.</p>
</div>
</div>
</div>
<!-- Feature: Create Folders -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-folder-open fa-2x text-success mb-3"></i>
<h5 class="card-title">Create Folders</h5>
<p class="card-text">Group your bookmarks into customizable folders for better organization.</p>
</div>
</div>
</div>
<!-- Feature: Set Colors -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-palette fa-2x text-warning mb-3"></i>
<h5 class="card-title">Set Colors</h5>
<p class="card-text">Personalize your folders and bookmarks with color coding.</p>
</div>
</div>
</div>
<!-- Feature: Privacy Settings -->
<div class="col-md-6">
<div class="card shadow-sm h-100 context-main-bg">
<div class="card-body text-center">
<i class="fas fa-lock fa-2x text-danger mb-3"></i>
<h5 class="card-title">Privacy Controls</h5>
<p class="card-text">Keep your bookmarks private or share them—your choice, your control.</p>
</div>
</div>
</div>
</div>
<!-- Call to Action -->
<div class="text-center mt-5">
<a href="#" class="btn btn-primary atb-green-bg btn-lg">
<i class="fas fa-download me-2"></i>Get the Addon for Opera
</a>
</div>
</div>

View File

@ -0,0 +1,9 @@
<div class="container py-5">
<!-- Product Title and Overview -->
<div class="text-center mb-4">
<i class="fab fa-safari fa-3x text-danger mb-3"></i>
<h1 class="fw-bold">AllTheBookmarks</h1>
<h5 class="card-title">Safari Extension</h5>
<p class="lead text-muted">I'm just gonna level with ya here, I have no idea if this will work on safari, and I'm not going to buy an apple product to find out. If you would like to gift me a relatively modern mac computer, I will happily test and find out.</p>
</div>
</div>

View File

@ -1,43 +1,46 @@
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<legend class="text-center">Edit Folder</legend>
<hr>
<form action="" method="post" class="container py-4">
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Description:</label>
<div class="col-lg-3">
<textarea class="form-control" name="description" maxlength="2000" rows="10" cols="50" id="description">{description}</textarea>
</div>
</div>
{folderSelect}
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Privacy</label>
<div class="col-lg-3">
<select id="privacy" name="privacy" class="form-select" value="{privacy}">
<option value="private">Private</option>
<option value="public">Public</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Color</label>
<div class="col-lg-3">
{colorSelect}
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<form action="" method="post" class="container py-4">
<h2 class="text-center mb-4">Edit Folder</h2>
<fieldset>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
<div class="col-lg-3">
<input type="text" class="form-control" name="title" id="title" value="{title}" required>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Description:</label>
<div class="col-lg-3">
<textarea class="form-control" name="description" maxlength="2000" rows="10" cols="50" id="description">{description}</textarea>
</div>
</div>
{folderSelect}
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Privacy</label>
<div class="col-lg-3">
<select id="privacy" name="privacy" class="form-select" value="{privacy}">
<option value="private">Private</option>
<option value="public">Public</option>
</select>
</div>
</div>
<div class="mb-3 row">
<label for="title" class="col-lg-5 col-form-label text-end">Color</label>
<div class="col-lg-3">
{colorSelect}
</div>
</div>
<!-- Hidden Token -->
<input type="hidden" name="token" value="{TOKEN}">
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
<!-- Submit Button -->
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
</div>
</fieldset>
</form>
</div>
</div>

View File

@ -1,35 +1,34 @@
<table class="table context-main">
<thead>
<tr>
<th class="text-center" style="width: 35%">Title</th>
<th class="text-center" style="width: 20%">Privacy</th>
<th class="text-center" style="width: 30%">Description</th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
<th style="width: 5%"></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td class="text-center">{prettyTitle}</td>
<td class="text-center">{prettyPrivacy}</td>
<td>{description}</td>
<td><a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-primary"><i class="fa fa-fw fa-info-circle"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></td>
<td><a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
</tr>
{/LOOP}
{ALT}
<tr>
<td class="text-center context-main" colspan="7">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="text-center">
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-md btn-primary">Create</a>
</div>
<table class="table table-striped context-main text-center">
<thead>
<tr>
<th>Title</th>
<th>Privacy</th>
<th>Description</th>
<th></th>
</tr>
</thead>
<tbody>
{LOOP}
<tr>
<td>{prettyTitle}</td>
<td>{prettyPrivacy}</td>
<td>{description}</td>
<td>
<a href="{ROOT_URL}bookmarks/folders/{ID}" class="btn btn-sm btn-outline-primary mx-1"><i class="fa fa-fw fa-info-circle"></i></a>
<a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-outline-warning mx-1"><i class="fa fa-fw fa-pencil"></i></a>
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-outline-danger mx-1"><i class="fa fa-fw fa-trash"></i></a>
</td>
</tr>
{/LOOP}
{ALT}
<tr>
<td colspan="4">
No results to show.
</td>
</tr>
{/ALT}
</tbody>
</table>
<div class="text-center">
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-md btn-primary">Create</a>
</div>

View File

@ -1,6 +1,5 @@
<div class="offset-md-2 col-8 py-3 context-main-bg mt-4">
<div class="text-center">
<legend class="">Folders List</legend>
</div>
<div class="offset-2 col-8 p-3 context-main-bg my-4">
<legend class="text-center">Folders List</legend>
<hr>
{foldersList}
</div>

View File

@ -1,15 +1,15 @@
<div class="mb-4 mt-4">
<div class="offset-md-1 col-10 py-3 context-main-bg">
<div class="my-4">
<div class="offset-2 col-8 p-3 context-main-bg">
<legend class="text-center">Import Bookmarks</legend>
<hr>
<div class="offset-3 col-lg-6 my-4">
<form action="" method="post" enctype="multipart/form-data" class="text-center">
<form method="post" enctype="multipart/form-data">
<div class="offset-3 col-lg-6 my-4 text-center">
<label for="bookmark_file" class="col-lg-3 control-label">Import file (.html):</label>
<input type="file" name="bookmark_file" id="bookmark_file" accept=".html">
</form>
</div>
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Import</button>
</div>
</div>
<div class="text-center">
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Import</button>
</div>
</form>
</div>
</div>

View File

@ -1,8 +1,10 @@
<ul class="nav nav-tabs justify-content-center mt-4" role="tablist">
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/index/" class="nav-link">Dashboard</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/folders/" class="nav-link">Folders</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/import/" class="nav-link">Import</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/export/" class="nav-link">Export</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/share/" class="nav-link">Share</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/index/" class="nav-link context-main">Manage</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/unsorted/" class="nav-link context-main">Unsorted</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/dashboards/" class="nav-link context-main">Dashboards</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/folders/" class="nav-link context-main">Folders</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/share/" class="nav-link context-main">Share</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/import/" class="nav-link context-main">Import</a></li>
<li class="nav-item context-main-bg mx-1"><a href="{ROOT_URL}bookmarks/export/" class="nav-link context-main">Export</a></li>
</ul>
{userFolderTabs}

View File

@ -1,59 +1,66 @@
<div class="container mt-3">
<div class="card">
<div class="card-header">
<a class="btn btn-link text-decoration-none w-100" data-bs-toggle="collapse" href="#filterOptions" role="button" aria-expanded="false" aria-controls="filterOptions">
<strong>Filter Options</strong>
<div class="m-3">
<div class="card w-100">
<div class="card-header text-center context-main-bg">
<a class="btn btn-link text-decoration-none" data-bs-toggle="collapse" href="#filterOptions" role="button" aria-expanded="false" aria-controls="filterOptions">
<strong class="h3 context-main"><i class="fa-solid fa-fw fa-gears"></i></strong>
</a>
</div>
<div id="filterOptions" class="collapse">
<div class="card-body">
<!-- Edit Mode -->
<div class="d-flex align-items-center border p-2 rounded mb-3">
<div class="me-3 fw-bold">Edit Mode:</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="editModeSwitch">
<label class="form-check-label" for="editModeSwitch"></label>
</div>
</div>
<form method="post">
<div class="card-body context-second-bg">
<fieldset>
<!-- Edit Mode -->
<div class="d-flex align-items-center border p-2 rounded mb-3 context-main-bg">
<div class="me-3 fw-bold">Edit Mode:</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="editModeSwitch" name="editModeSwitch"{editModeSwitch_IS_CHECKED}>
<label class="form-check-label" for="editModeSwitch"></label>
</div>
</div>
<!-- Status Filters -->
<div class="d-flex align-items-center border p-2 rounded mb-3">
<div class="me-3 fw-bold">Status:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="showArchivedSwitch">
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="showHiddenSwitch">
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
</div>
</div>
<!-- Status Filters -->
<div class="d-flex align-items-center border p-2 rounded mb-3 context-main-bg">
<div class="me-3 fw-bold">Status:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="showArchivedSwitch" name="showArchivedSwitch"{showArchivedSwitch_IS_CHECKED}>
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="showHiddenSwitch" name="showHiddenSwitch"{showHiddenSwitch_IS_CHECKED}>
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
</div>
</div>
<!-- Buttons Filters -->
<div class="d-flex align-items-center border p-2 rounded mb-3">
<div class="me-3 fw-bold">Buttons:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="archiveButtonSwitch">
<label class="form-check-label" for="archiveButtonSwitch">Archive Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="visibilityButtonSwitch">
<label class="form-check-label" for="visibilityButtonSwitch">Visibility Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="privacyButtonSwitch">
<label class="form-check-label" for="privacyButtonSwitch">Privacy Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="shareButtonSwitch">
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="addButtonSwitch">
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
</div>
<!-- Buttons Filters -->
<div class="d-flex align-items-center border p-2 rounded context-main-bg">
<div class="me-3 fw-bold">Buttons:</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="archiveButtonSwitch" name="archiveButtonSwitch"{archiveButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="archiveButtonSwitch">Archive Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="visibilityButtonSwitch" name="visibilityButtonSwitch"{visibilityButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="visibilityButtonSwitch">Visibility Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="privacyButtonSwitch" name="privacyButtonSwitch"{privacyButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="privacyButtonSwitch">Privacy Button</label>
</div>
<div class="form-check form-switch me-3">
<input class="form-check-input" type="checkbox" id="shareButtonSwitch" name="shareButtonSwitch"{shareButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
</div>
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="addButtonSwitch" name="addButtonSwitch"{addButtonSwitch_IS_CHECKED}>
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
</div>
</div>
</fieldset>
</div>
</div>
<div class="card-footer d-flex justify-content-center align-items-center context-main-bg">
<button type="submit" name="submit" value="submit" class="btn btn-md btn-outline-primary my-2">Save as Default</button>
</div>
</form>
</div>
</div>
</div>

View File

@ -7,7 +7,7 @@
</div>
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
{LOOP}
{panel}
{panel}
{/LOOP}
{ALT}
<div class="col-12">