many fixes and updates
This commit is contained in:
25
README.md
25
README.md
@ -129,3 +129,28 @@ See the [LICENSE](LICENSE) file for licensing information as it pertains to file
|
|||||||
- [ ] Implement uniformity in terms of error reporting, exceptions, logging.
|
- [ ] Implement uniformity in terms of error reporting, exceptions, logging.
|
||||||
- [ ] I want to make an api that allows you to download and install new plugins from a centralized repository
|
- [ ] I want to make an api that allows you to download and install new plugins from a centralized repository
|
||||||
- [ ] i want plugin instalation to be compatible with composer for easier management of added plugins.
|
- [ ] i want plugin instalation to be compatible with composer for easier management of added plugins.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
e-corp backup
|
||||||
|
jfk tapes
|
||||||
|
ruby ridge shooter confession
|
||||||
|
obamas kenyan birth certificate
|
||||||
|
trumps taxes
|
||||||
|
buiilding 7 charge placement map
|
||||||
|
moon landing script
|
||||||
|
Real Twitter users (Page 1 of 1)
|
||||||
|
binders full of women
|
||||||
|
gelaines panel
|
||||||
|
Illumiinati Training - year 6
|
||||||
|
Error 404 Page - The link
|
||||||
|
Contacts - B. Footy
|
||||||
|
11,778 votes
|
||||||
|
Patent Filing - Approved - iSuck
|
||||||
|
the remote
|
||||||
|
a clue
|
||||||
|
Out of stock - Nevel's Novelties
|
||||||
|
Google Maps - 33°24'55.8"N 43°18'33.3"E - WMD
|
||||||
|
Youtube - Unlisted Video PP Tape
|
||||||
|
|
||||||
|
@ -311,6 +311,38 @@ body {
|
|||||||
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.atb-green {
|
||||||
|
color: #85bd3e;
|
||||||
|
}
|
||||||
|
a.atb-green:hover {
|
||||||
|
color: #1b947f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.atb-green-outline {
|
||||||
|
color: #85bd3e;
|
||||||
|
border-color: #85bd3e;
|
||||||
|
}
|
||||||
|
.atb-green-outline-only {
|
||||||
|
border-color: #85bd3e;
|
||||||
|
}
|
||||||
|
a.atb-green-outline:hover {
|
||||||
|
color: #1b947f;
|
||||||
|
border-color: #1b947f;
|
||||||
|
}
|
||||||
|
|
||||||
|
.atb-green-bg {
|
||||||
|
color: #fff;
|
||||||
|
background-color: #85bd3e;
|
||||||
|
border-color: #85bd3e;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.atb-green-bg:hover {
|
||||||
|
background-color: #1b947f;
|
||||||
|
border-color: #1b947f;
|
||||||
|
/* background-color: #44a466; */
|
||||||
|
/* background-color: #3fa269; */
|
||||||
|
}
|
||||||
|
|
||||||
.bookmark-card.dragging {
|
.bookmark-card.dragging {
|
||||||
opacity: 0.7;
|
opacity: 0.7;
|
||||||
cursor: move; /* Show a move cursor when dragging */
|
cursor: move; /* Show a move cursor when dragging */
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 78 KiB |
Binary file not shown.
Before Width: | Height: | Size: 40 KiB |
Binary file not shown.
Before Width: | Height: | Size: 80 KiB |
@ -151,67 +151,3 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
document.addEventListener('DOMContentLoaded', () => {
|
|
||||||
// Initialize Masonry
|
|
||||||
const masonryContainer = document.querySelector('[data-masonry]');
|
|
||||||
const masonryInstance = new Masonry(masonryContainer, {
|
|
||||||
// horizontalOrder: false, // Maintains natural order in DOM
|
|
||||||
columnHeight: '.accordion',
|
|
||||||
// columnWidth: '.card', // Use the card width as the column reference
|
|
||||||
percentPosition: true
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
// const sortContainer = document.getElementById('bookmarkSort');
|
|
||||||
// Sortable.create(masonryContainer, {
|
|
||||||
// // animation: 150, // Smooth animations
|
|
||||||
// sort: true,
|
|
||||||
// ghostClass: 'bg-primary',
|
|
||||||
// onEnd: () => {
|
|
||||||
// // Trigger Masonry layout after drag-and-drop
|
|
||||||
// masonryInstance.layout();
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
|
|
||||||
// Function to trigger layout after any accordion change
|
|
||||||
const updateMasonryLayout = () => masonryInstance.layout();
|
|
||||||
|
|
||||||
// Listen for all accordion collapse/expand events
|
|
||||||
masonryContainer.addEventListener('hidden.bs.collapse', updateMasonryLayout);
|
|
||||||
masonryContainer.addEventListener('shown.bs.collapse', updateMasonryLayout);
|
|
||||||
|
|
||||||
// Observe dynamic content changes (e.g., rows added/removed)
|
|
||||||
const observer = new MutationObserver(() => {
|
|
||||||
updateMasonryLayout();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Observe all cards for changes in the DOM
|
|
||||||
document.querySelectorAll('.card').forEach((card) => {
|
|
||||||
observer.observe(card, { childList: true, subtree: true });
|
|
||||||
});
|
|
||||||
|
|
||||||
jQuery(function($) {
|
|
||||||
var panelList = $('#bookmarkSort');
|
|
||||||
|
|
||||||
panelList.sortable({
|
|
||||||
// Only make the .panel-heading child elements support dragging.
|
|
||||||
// Omit this to make then entire <li>...</li> draggable.
|
|
||||||
handle: '.card',
|
|
||||||
update: function() {
|
|
||||||
console.error( 'update' );
|
|
||||||
$('.bookmark-card', panelList).each(function(index, elem) {
|
|
||||||
var $listItem = $(elem),
|
|
||||||
|
|
||||||
newIndex = $listItem.index();
|
|
||||||
masonryInstance.layout();
|
|
||||||
console.error( $listItem );
|
|
||||||
console.error( index );
|
|
||||||
console.error( newIndex );
|
|
||||||
|
|
||||||
// Persist the new indices.
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
@ -22,25 +22,31 @@ use TheTempusProject\Classes\Controller;
|
|||||||
use TheTempusProject\Classes\Forms;
|
use TheTempusProject\Classes\Forms;
|
||||||
use TheTempusProject\Models\Bookmarks as Bookmark;
|
use TheTempusProject\Models\Bookmarks as Bookmark;
|
||||||
use TheTempusProject\Models\Folders;
|
use TheTempusProject\Models\Folders;
|
||||||
|
use TheTempusProject\Models\BookmarkDashboards as Dashboards;
|
||||||
use TheTempusProject\TheTempusProject as App;
|
use TheTempusProject\TheTempusProject as App;
|
||||||
use TheTempusProject\Houdini\Classes\Components;
|
use TheTempusProject\Houdini\Classes\Components;
|
||||||
use TheTempusProject\Houdini\Classes\Forms as HoudiniForms;
|
use TheTempusProject\Houdini\Classes\Forms as HoudiniForms;
|
||||||
use TheTempusProject\Houdini\Classes\Navigation;
|
use TheTempusProject\Houdini\Classes\Navigation;
|
||||||
use TheTempusProject\Houdini\Classes\Template;
|
use TheTempusProject\Houdini\Classes\Template;
|
||||||
use TheTempusProject\Hermes\Functions\Route as Routes;
|
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 {
|
class Bookmarks extends Controller {
|
||||||
protected static $bookmarks;
|
protected static $bookmarks;
|
||||||
protected static $folders;
|
protected static $folders;
|
||||||
|
protected static $dashboards;
|
||||||
|
|
||||||
public function __construct() {
|
public function __construct() {
|
||||||
parent::__construct();
|
parent::__construct();
|
||||||
if ( !App::$isLoggedIn ) {
|
if ( ! App::$isLoggedIn ) {
|
||||||
Session::flash( 'notice', 'You must be logged in to create or manage bookmarks.' );
|
Session::flash( 'notice', 'You must be logged in to create or manage bookmarks.' );
|
||||||
return Redirect::home();
|
return Redirect::home();
|
||||||
}
|
}
|
||||||
self::$bookmarks = new Bookmark;
|
self::$bookmarks = new Bookmark;
|
||||||
self::$folders = new Folders;
|
self::$folders = new Folders;
|
||||||
|
self::$dashboards = new Dashboards;
|
||||||
self::$title = 'Bookmarks - {SITENAME}';
|
self::$title = 'Bookmarks - {SITENAME}';
|
||||||
self::$pageDescription = 'Add and save url bookmarks here.';
|
self::$pageDescription = 'Add and save url bookmarks here.';
|
||||||
|
|
||||||
@ -57,14 +63,23 @@ class Bookmarks extends Controller {
|
|||||||
Components::set( 'SITE_URL', Routes::getAddress() );
|
Components::set( 'SITE_URL', Routes::getAddress() );
|
||||||
Views::raw( $tabsView );
|
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>' ) );
|
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' );
|
$viewOptions = Views::simpleView( 'bookmarks.nav.viewOptions' );
|
||||||
Components::set( 'VIEW_OPTIONS', $options );
|
Components::set( 'VIEW_OPTIONS', $viewOptions );
|
||||||
|
$dashOptions = Views::simpleView( 'bookmarks.dashboards.dashOptions' );
|
||||||
|
Components::set( 'DASH_OPTIONS', $dashOptions );
|
||||||
|
$this->setPrefToggles();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function index() {
|
public function index() {
|
||||||
$bookmarks = self::$bookmarks->noFolder();
|
if ( Input::exists('submit') ) {
|
||||||
$folders = self::$folders->byUser();
|
$prefs = new Preferences;
|
||||||
|
$user = new User;
|
||||||
|
$fields = $prefs->convertFormToArray( true );
|
||||||
|
$out = $user->updatePrefs( $fields, App::$activeUser->ID );
|
||||||
|
$this->setPrefToggles();
|
||||||
|
}
|
||||||
|
|
||||||
|
$folders = self::$folders->byUser();
|
||||||
$panelArray = [];
|
$panelArray = [];
|
||||||
if ( !empty( $folders ) ) {
|
if ( !empty( $folders ) ) {
|
||||||
foreach ( $folders as $folder ) {
|
foreach ( $folders as $folder ) {
|
||||||
@ -79,9 +94,7 @@ class Bookmarks extends Controller {
|
|||||||
$panelArray[] = $folderObject;
|
$panelArray[] = $folderObject;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Components::set( 'foldersList', Views::simpleView( 'bookmarks.folders.list', $folders ) );
|
|
||||||
Components::set( 'folderPanels', Views::simpleView( 'bookmarks.components.bookmarkListPanel', $panelArray ) );
|
Components::set( 'folderPanels', Views::simpleView( 'bookmarks.components.bookmarkListPanel', $panelArray ) );
|
||||||
Components::set( 'bookmarksList', Views::simpleView( 'bookmarks.bookmarks.list', $bookmarks ) );
|
|
||||||
return Views::view( 'bookmarks.dash' );
|
return Views::view( 'bookmarks.dash' );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,6 +115,11 @@ class Bookmarks extends Controller {
|
|||||||
return Views::view( 'bookmarks.bookmarks.view', $bookmark );
|
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 ) {
|
public function bookmarks( $id = null ) {
|
||||||
$folder = self::$folders->findById( $id );
|
$folder = self::$folders->findById( $id );
|
||||||
if ( $folder == false ) {
|
if ( $folder == false ) {
|
||||||
@ -114,8 +132,6 @@ class Bookmarks extends Controller {
|
|||||||
}
|
}
|
||||||
Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmarks/' . $id );
|
Navigation::setCrumbComponent( 'BookmarkBreadCrumbs', 'bookmarks/bookmarks/' . $id );
|
||||||
|
|
||||||
$bookmarks = self::$bookmarks->noFolder();
|
|
||||||
|
|
||||||
$panelArray = [];
|
$panelArray = [];
|
||||||
$panel = new \stdClass();
|
$panel = new \stdClass();
|
||||||
$folderObject = new \stdClass();
|
$folderObject = new \stdClass();
|
||||||
@ -325,6 +341,179 @@ class Bookmarks extends Controller {
|
|||||||
Redirect::to( 'bookmarks/folders' );
|
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
|
* Functionality
|
||||||
*/
|
*/
|
||||||
@ -688,4 +877,47 @@ class Bookmarks extends Controller {
|
|||||||
$folderSelect = Template::parse( $out );
|
$folderSelect = Template::parse( $out );
|
||||||
Components::set( 'folderSelect', $folderSelect );
|
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' );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,40 +13,53 @@ namespace TheTempusProject\Controllers;
|
|||||||
|
|
||||||
use TheTempusProject\Classes\Controller;
|
use TheTempusProject\Classes\Controller;
|
||||||
use TheTempusProject\Houdini\Classes\Views;
|
use TheTempusProject\Houdini\Classes\Views;
|
||||||
|
use TheTempusProject\Houdini\Classes\Issues;
|
||||||
|
use TheTempusProject\TheTempusProject as App;
|
||||||
|
|
||||||
class Extensions extends Controller {
|
class Extensions extends Controller {
|
||||||
public function index() {
|
public function index() {
|
||||||
self::$title = 'Browser Extensions';
|
self::$title = 'Browser Extensions';
|
||||||
Views::view( 'extensions.index' );
|
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() {
|
public function chrome() {
|
||||||
self::$title = 'Chrome Extension';
|
self::$title = 'Chrome Extension';
|
||||||
Views::view( 'extensions.chrome' );
|
Views::view( 'bookmarks.extensions.chrome' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function firefox() {
|
public function firefox() {
|
||||||
self::$title = 'Firefox Extension';
|
self::$title = 'Firefox Extension';
|
||||||
Views::view( 'extensions.firefox' );
|
Views::view( 'bookmarks.extensions.firefox' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function opera() {
|
public function opera() {
|
||||||
self::$title = 'Opera Extension';
|
self::$title = 'Opera Extension';
|
||||||
Views::view( 'extensions.opera' );
|
Views::view( 'bookmarks.extensions.opera' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function edge() {
|
public function edge() {
|
||||||
self::$title = 'Edge Extension';
|
self::$title = 'Edge Extension';
|
||||||
Views::view( 'extensions.edge' );
|
Views::view( 'bookmarks.extensions.edge' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function brave() {
|
public function brave() {
|
||||||
self::$title = 'Brave Extension';
|
self::$title = 'Brave Extension';
|
||||||
Views::view( 'extensions.brave' );
|
Views::view( 'bookmarks.extensions.brave' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public function safari() {
|
public function safari() {
|
||||||
self::$title = 'Safari Extension';
|
self::$title = 'Safari Extension';
|
||||||
Views::view( 'extensions.safari' );
|
Views::view( 'bookmarks.extensions.safari' );
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -27,6 +27,8 @@ class BookmarksForms extends Forms {
|
|||||||
self::addHandler( 'editFolder', __CLASS__, 'editFolder' );
|
self::addHandler( 'editFolder', __CLASS__, 'editFolder' );
|
||||||
self::addHandler( 'importBookmarks', __CLASS__, 'importBookmarks' );
|
self::addHandler( 'importBookmarks', __CLASS__, 'importBookmarks' );
|
||||||
self::addHandler( 'exportBookmarks', __CLASS__, 'exportBookmarks' );
|
self::addHandler( 'exportBookmarks', __CLASS__, 'exportBookmarks' );
|
||||||
|
self::addHandler( 'createDashboard', __CLASS__, 'createDashboard' );
|
||||||
|
self::addHandler( 'editDashboard', __CLASS__, 'editDashboard' );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function createBookmark() {
|
public static function createBookmark() {
|
||||||
@ -168,6 +170,44 @@ class BookmarksForms extends Forms {
|
|||||||
// }
|
// }
|
||||||
return true;
|
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;
|
new BookmarksForms;
|
@ -34,6 +34,11 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
toggleVisibility('privacyButtonSwitch', 'btn-publish');
|
toggleVisibility('privacyButtonSwitch', 'btn-publish');
|
||||||
toggleVisibility('addButtonSwitch', 'btn-addlink');
|
toggleVisibility('addButtonSwitch', 'btn-addlink');
|
||||||
toggleVisibility('shareButtonSwitch', 'btn-share');
|
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 to handle showing or hiding elements based on the checkbox state
|
||||||
@ -41,6 +46,10 @@ function toggleVisibility(switchId, className) {
|
|||||||
const switchElement = document.getElementById(switchId);
|
const switchElement = document.getElementById(switchId);
|
||||||
const elementsToToggle = document.querySelectorAll(`.${className}`);
|
const elementsToToggle = document.querySelectorAll(`.${className}`);
|
||||||
|
|
||||||
|
if ( ! switchElement ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Listen for changes to the checkbox
|
// Listen for changes to the checkbox
|
||||||
switchElement.addEventListener('change', () => {
|
switchElement.addEventListener('change', () => {
|
||||||
if (switchElement.checked) {
|
if (switchElement.checked) {
|
||||||
@ -59,6 +68,9 @@ function toggleVisibility(switchId, className) {
|
|||||||
}
|
}
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
document.addEventListener('DOMContentLoaded', function () {
|
||||||
const bookmarkSort = document.getElementById('bookmarkSort');
|
const bookmarkSort = document.getElementById('bookmarkSort');
|
||||||
|
if ( ! bookmarkSort ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let draggingElement = null;
|
let draggingElement = null;
|
||||||
let placeholder = null;
|
let placeholder = null;
|
||||||
let initialX = 0;
|
let initialX = 0;
|
||||||
@ -180,7 +192,3 @@ document.addEventListener('DOMContentLoaded', function () {
|
|||||||
document.addEventListener('mouseup', handleDragEnd);
|
document.addEventListener('mouseup', handleDragEnd);
|
||||||
bookmarkSort.addEventListener('dragover', handleDrop); // Listen for the drop event to update the order
|
bookmarkSort.addEventListener('dragover', handleDrop); // Listen for the drop event to update the order
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
|||||||
<?php
|
<?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
|
* @package TP Bookmarks
|
||||||
* @version 3.0
|
* @version 3.0
|
||||||
@ -19,26 +19,17 @@ use TheTempusProject\TheTempusProject as App;
|
|||||||
use TheTempusProject\Houdini\Classes\Filters;
|
use TheTempusProject\Houdini\Classes\Filters;
|
||||||
use TheTempusProject\Canary\Classes\CustomException;
|
use TheTempusProject\Canary\Classes\CustomException;
|
||||||
|
|
||||||
class Bookmarkviews extends DatabaseModel {
|
class BookmarkDashboards extends DatabaseModel {
|
||||||
public $tableName = 'bookmark_views';
|
public $tableName = 'bookmark_dashboards';
|
||||||
public $databaseMatrix = [
|
public $databaseMatrix = [
|
||||||
[ 'title', 'varchar', '256' ],
|
[ 'title', 'varchar', '256' ],
|
||||||
|
[ 'saved_prefs', 'text', '' ],
|
||||||
|
[ 'link_order', 'text', '' ],
|
||||||
[ 'description', 'text', '' ],
|
[ 'description', 'text', '' ],
|
||||||
[ 'privacy', 'varchar', '48' ],
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[ 'createdBy', 'int', '11' ],
|
[ 'createdBy', 'int', '11' ],
|
||||||
[ 'createdAt', 'int', '11' ],
|
[ 'createdAt', 'int', '11' ],
|
||||||
[ 'updatedAt', 'int', '11' ],
|
[ 'updatedAt', 'int', '11' ],
|
||||||
[ 'uuid', 'text', '' ],
|
[ 'uuid', 'char', '36' ],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -48,7 +39,7 @@ class Bookmarkviews extends DatabaseModel {
|
|||||||
parent::__construct();
|
parent::__construct();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function create( $title, $description = '', $privacy = 'private' ) {
|
public function create( $title, $saved_prefs, $link_order, $description = '' ) {
|
||||||
if ( ! Check::dataTitle( $title ) ) {
|
if ( ! Check::dataTitle( $title ) ) {
|
||||||
Debug::info( 'Views: illegal title.' );
|
Debug::info( 'Views: illegal title.' );
|
||||||
return false;
|
return false;
|
||||||
@ -56,7 +47,8 @@ class Bookmarkviews extends DatabaseModel {
|
|||||||
$fields = [
|
$fields = [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'description' => $description,
|
'description' => $description,
|
||||||
'privacy' => $privacy,
|
'saved_prefs' => $saved_prefs,
|
||||||
|
'link_order' => $link_order,
|
||||||
'uuid' => generateUuidV4(),
|
'uuid' => generateUuidV4(),
|
||||||
'createdBy' => App::$activeUser->ID,
|
'createdBy' => App::$activeUser->ID,
|
||||||
'createdAt' => time(),
|
'createdAt' => time(),
|
||||||
@ -69,7 +61,7 @@ class Bookmarkviews extends DatabaseModel {
|
|||||||
return self::$db->lastId();
|
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 ) ) {
|
if ( !Check::id( $id ) ) {
|
||||||
Debug::info( 'Views: illegal ID.' );
|
Debug::info( 'Views: illegal ID.' );
|
||||||
return false;
|
return false;
|
||||||
@ -81,11 +73,12 @@ class Bookmarkviews extends DatabaseModel {
|
|||||||
$fields = [
|
$fields = [
|
||||||
'title' => $title,
|
'title' => $title,
|
||||||
'description' => $description,
|
'description' => $description,
|
||||||
'privacy' => $privacy,
|
'saved_prefs' => $saved_prefs,
|
||||||
|
'link_order' => $link_order,
|
||||||
];
|
];
|
||||||
if ( !self::$db->update( $this->tableName, $id, $fields ) ) {
|
if ( !self::$db->update( $this->tableName, $id, $fields ) ) {
|
||||||
new CustomException( 'viewUpdate' );
|
new CustomException( 'viewUpdate' );
|
||||||
Debug::error( "Views: $id not updated: $fields" );
|
Debug::error( "Views: $id not updated" );
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -147,4 +140,16 @@ class Bookmarkviews extends DatabaseModel {
|
|||||||
}
|
}
|
||||||
return $out;
|
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() );
|
||||||
|
}
|
||||||
}
|
}
|
@ -42,7 +42,7 @@ class Bookmarks extends DatabaseModel {
|
|||||||
[ 'hiddenAt', 'int', '11' ],
|
[ 'hiddenAt', 'int', '11' ],
|
||||||
[ 'order', 'int', '11' ],
|
[ 'order', 'int', '11' ],
|
||||||
[ 'linkType', 'varchar', '32' ],
|
[ 'linkType', 'varchar', '32' ],
|
||||||
[ 'uuid', 'uuid', '36' ],
|
[ 'uuid', 'char', '36' ],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -29,7 +29,7 @@ class Folders extends DatabaseModel {
|
|||||||
[ 'folderID', 'int', '11' ],
|
[ 'folderID', 'int', '11' ],
|
||||||
[ 'createdBy', 'int', '11' ],
|
[ 'createdBy', 'int', '11' ],
|
||||||
[ 'createdAt', 'int', '11' ],
|
[ 'createdAt', 'int', '11' ],
|
||||||
[ 'uuid', 'text', '' ],
|
[ 'uuid', 'char', '36' ],
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,6 +55,90 @@ class Bookmarks extends Plugin {
|
|||||||
'default' => true,
|
'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 $bookmarks;
|
||||||
public $folders;
|
public $folders;
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="mb-4 mt-4">
|
<div class="my-4">
|
||||||
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
<div class="offset-md-2 col-8 py-3 context-main-bg">
|
||||||
<legend class="text-center">Add Bookmark</legend>
|
<legend class="text-center">Add Bookmark</legend>
|
||||||
<hr>
|
<hr>
|
||||||
<form method="post" class="container py-4">
|
<form method="post" class="container py-4">
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
<form action="" method="post" class="container py-4">
|
<div class="my-4">
|
||||||
<h2 class="text-center mb-4">Edit Bookmark</h2>
|
<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>
|
<fieldset>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
|
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
|
||||||
@ -48,4 +51,6 @@
|
|||||||
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
|
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,5 +1,4 @@
|
|||||||
|
<table class="table table-striped context-main">
|
||||||
<table class="table context-main">
|
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th style="width: 75%">Bookmark</th>
|
<th style="width: 75%">Bookmark</th>
|
||||||
@ -20,9 +19,9 @@
|
|||||||
<td style="text-align: center;">
|
<td style="text-align: center;">
|
||||||
{privacy}
|
{privacy}
|
||||||
</td>
|
</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/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-warning"><i class="fa fa-fw fa-pencil"></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-danger"><i class="fa fa-fw fa-trash"></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>
|
</tr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
@ -33,8 +32,7 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{/ALT}
|
{/ALT}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
<div class="text-center">
|
||||||
<div class="text-center">
|
|
||||||
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-md btn-primary">Create</a>
|
<a href="{ROOT_URL}bookmarks/createBookmark" class="btn btn-md btn-primary">Create</a>
|
||||||
</div>
|
</div>
|
44
app/plugins/bookmarks/views/bookmarks/unsorted.html
Normal file
44
app/plugins/bookmarks/views/bookmarks/unsorted.html
Normal 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>
|
@ -28,7 +28,7 @@
|
|||||||
|
|
||||||
<div id="Collapse{ID}" class="accordion-collapse collapse w-100 position-relative show">
|
<div id="Collapse{ID}" class="accordion-collapse collapse w-100 position-relative show">
|
||||||
<div class="card-body accordion-body p-2 context-second-bg">
|
<div class="card-body accordion-body p-2 context-second-bg">
|
||||||
<ul class="list-group">
|
<ul class="list-group mt-1">
|
||||||
{bookmarkListRows}
|
{bookmarkListRows}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
{LOOP}
|
{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="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
|
||||||
<a href="{url}"> {title}</a>
|
<a href="{url}"> {title}</a>
|
||||||
<span class="float-end">
|
<span class="float-end">
|
||||||
@ -29,7 +29,7 @@
|
|||||||
</li>
|
</li>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<li class="list-group-item context-main context-main-bg">
|
<li class="list-group-item context-main context-main-bg mb-1">
|
||||||
<p class="list-group text-center">No Bookmarks</p>
|
<p class="list-group text-center">No Bookmarks</p>
|
||||||
</li>
|
</li>
|
||||||
{/ALT}
|
{/ALT}
|
16
app/plugins/bookmarks/views/components/linkSelect.html
Normal file
16
app/plugins/bookmarks/views/components/linkSelect.html
Normal 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>
|
@ -1,5 +1,5 @@
|
|||||||
{LOOP}
|
{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="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
|
||||||
<a href="{url}"> {title}</a>{privacyBadge}
|
<a href="{url}"> {title}</a>{privacyBadge}
|
||||||
<span class="float-end">
|
<span class="float-end">
|
||||||
|
@ -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="mb-4 mt-4">
|
||||||
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
<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}
|
{VIEW_OPTIONS}
|
||||||
<hr>
|
<hr>
|
||||||
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
|
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
|
||||||
|
30
app/plugins/bookmarks/views/dashboards/bookmarkRows.html
Normal file
30
app/plugins/bookmarks/views/dashboards/bookmarkRows.html
Normal 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}
|
43
app/plugins/bookmarks/views/dashboards/create.html
Normal file
43
app/plugins/bookmarks/views/dashboards/create.html
Normal 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>
|
29
app/plugins/bookmarks/views/dashboards/dashOptions.html
Normal file
29
app/plugins/bookmarks/views/dashboards/dashOptions.html
Normal 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>
|
||||||
|
|
||||||
|
|
43
app/plugins/bookmarks/views/dashboards/edit.html
Normal file
43
app/plugins/bookmarks/views/dashboards/edit.html
Normal 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>
|
51
app/plugins/bookmarks/views/dashboards/folderPanels.html
Normal file
51
app/plugins/bookmarks/views/dashboards/folderPanels.html
Normal 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}
|
44
app/plugins/bookmarks/views/dashboards/list.html
Normal file
44
app/plugins/bookmarks/views/dashboards/list.html
Normal 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>
|
26
app/plugins/bookmarks/views/dashboards/view.html
Normal file
26
app/plugins/bookmarks/views/dashboards/view.html
Normal 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>
|
@ -1,10 +1,10 @@
|
|||||||
<div class="mb-4 mt-4">
|
<div class="my-4">
|
||||||
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
<div class="offset-2 col-8 p-3 context-main-bg">
|
||||||
<legend class="text-center">Bookmark Export</legend>
|
<legend class="text-center">Bookmark Export</legend>
|
||||||
<hr>
|
<hr>
|
||||||
<h3 class="text-center text-muted">Select which folders to include in the export.</h3>
|
<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">
|
<form action="" method="post">
|
||||||
|
<div class="row g-3 col-4 offset-4" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
|
||||||
<table class="table context-main">
|
<table class="table context-main">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
64
app/plugins/bookmarks/views/extensions/bookmarklet.html
Normal file
64
app/plugins/bookmarks/views/extensions/bookmarklet.html
Normal 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>
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Call to Action -->
|
<!-- Call to Action -->
|
||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<a href="#" class="btn btn-primary btn-lg">
|
<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
|
<i class="fas fa-download me-2"></i>Get the Addon for Brave
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Call to Action -->
|
<!-- Call to Action -->
|
||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<a href="#" class="btn btn-primary btn-lg">
|
<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
|
<i class="fas fa-download me-2"></i>Get the Addon for Chrome
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Call to Action -->
|
<!-- Call to Action -->
|
||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<a href="#" class="btn btn-primary btn-lg">
|
<a href="#" class="btn btn-primary atb-green-bg btn-lg">
|
||||||
<i class="fas fa-download me-2"></i>Get the Addon for Edge
|
<i class="fas fa-download me-2"></i>Get the Addon for Edge
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Call to Action -->
|
<!-- Call to Action -->
|
||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<a href="#" class="btn btn-primary btn-lg">
|
<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
|
<i class="fas fa-download me-2"></i>Get the Addon for Firefox
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@ -14,7 +14,7 @@
|
|||||||
<i class="fab fa-chrome fa-3x text-primary mb-3"></i>
|
<i class="fab fa-chrome fa-3x text-primary mb-3"></i>
|
||||||
<h5 class="card-title">Chrome Extension</h5>
|
<h5 class="card-title">Chrome Extension</h5>
|
||||||
<p class="card-text">Enhance your Chrome browser with advanced features and effortless organization.</p>
|
<p class="card-text">Enhance your Chrome browser with advanced features and effortless organization.</p>
|
||||||
<a href="/extensions/chrome" class="btn btn-primary btn-sm">Learn More</a>
|
<a href="/extensions/chrome" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -26,7 +26,7 @@
|
|||||||
<i class="fab fa-firefox fa-3x text-warning mb-3"></i>
|
<i class="fab fa-firefox fa-3x text-warning mb-3"></i>
|
||||||
<h5 class="card-title">Firefox Extension</h5>
|
<h5 class="card-title">Firefox Extension</h5>
|
||||||
<p class="card-text">Seamlessly integrate with Firefox for a smoother browsing experience.</p>
|
<p class="card-text">Seamlessly integrate with Firefox for a smoother browsing experience.</p>
|
||||||
<a href="/extensions/firefox" class="btn btn-primary btn-sm">Learn More</a>
|
<a href="/extensions/firefox" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -38,7 +38,7 @@
|
|||||||
<i class="fab fa-opera fa-3x text-danger mb-3"></i>
|
<i class="fab fa-opera fa-3x text-danger mb-3"></i>
|
||||||
<h5 class="card-title">Opera Extension</h5>
|
<h5 class="card-title">Opera Extension</h5>
|
||||||
<p class="card-text">Boost your Opera browser with intuitive features and tools.</p>
|
<p class="card-text">Boost your Opera browser with intuitive features and tools.</p>
|
||||||
<a href="/extensions/opera" class="btn btn-primary btn-sm">Learn More</a>
|
<a href="/extensions/opera" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -50,7 +50,7 @@
|
|||||||
<i class="fab fa-brave fa-3x text-orange mb-3"></i>
|
<i class="fab fa-brave fa-3x text-orange mb-3"></i>
|
||||||
<h5 class="card-title">Brave Extension</h5>
|
<h5 class="card-title">Brave Extension</h5>
|
||||||
<p class="card-text">Enjoy secure and private browsing with Brave, enhanced by our extension.</p>
|
<p class="card-text">Enjoy secure and private browsing with Brave, enhanced by our extension.</p>
|
||||||
<a href="/extensions/brave" class="btn btn-primary btn-sm">Learn More</a>
|
<a href="/extensions/brave" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -62,7 +62,7 @@
|
|||||||
<i class="fab fa-edge fa-3x text-info mb-3"></i>
|
<i class="fab fa-edge fa-3x text-info mb-3"></i>
|
||||||
<h5 class="card-title">Edge Extension</h5>
|
<h5 class="card-title">Edge Extension</h5>
|
||||||
<p class="card-text">Maximize productivity on Microsoft Edge with our extension.</p>
|
<p class="card-text">Maximize productivity on Microsoft Edge with our extension.</p>
|
||||||
<a href="/extensions/edge" class="btn btn-primary btn-sm">Learn More</a>
|
<a href="/extensions/edge" class="btn btn-primary atb-green-bg btn-sm">Learn More</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -72,7 +72,7 @@
|
|||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<p class="text-muted">
|
<p class="text-muted">
|
||||||
<i class="fas fa-exclamation-circle me-2"></i>
|
<i class="fas fa-exclamation-circle me-2"></i>
|
||||||
Unfortunately, our extensions are not currently supported on <a href="/extensions/safari">Safari</a>.
|
Unfortunately, our extensions are not currently supported on <a href="/extensions/safari" class="text-decoration-none atb-green">Safari</a>.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
<!-- Call to Action -->
|
<!-- Call to Action -->
|
||||||
<div class="text-center mt-5">
|
<div class="text-center mt-5">
|
||||||
<a href="#" class="btn btn-primary btn-lg">
|
<a href="#" class="btn btn-primary atb-green-bg btn-lg">
|
||||||
<i class="fas fa-download me-2"></i>Get the Addon for Opera
|
<i class="fas fa-download me-2"></i>Get the Addon for Opera
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
@ -1,7 +1,8 @@
|
|||||||
|
<div class="mb-4 mt-4">
|
||||||
|
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
||||||
<form action="" method="post" class="container py-4">
|
<legend class="text-center">Edit Folder</legend>
|
||||||
<h2 class="text-center mb-4">Edit Folder</h2>
|
<hr>
|
||||||
|
<form action="" method="post" class="container py-4">
|
||||||
<fieldset>
|
<fieldset>
|
||||||
<div class="mb-3 row">
|
<div class="mb-3 row">
|
||||||
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
|
<label for="title" class="col-lg-5 col-form-label text-end">Title</label>
|
||||||
@ -40,4 +41,6 @@
|
|||||||
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
|
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg">Save</button>
|
||||||
</div>
|
</div>
|
||||||
</fieldset>
|
</fieldset>
|
||||||
</form>
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -1,35 +1,34 @@
|
|||||||
|
<table class="table table-striped context-main text-center">
|
||||||
<table class="table context-main">
|
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th class="text-center" style="width: 35%">Title</th>
|
<th>Title</th>
|
||||||
<th class="text-center" style="width: 20%">Privacy</th>
|
<th>Privacy</th>
|
||||||
<th class="text-center" style="width: 30%">Description</th>
|
<th>Description</th>
|
||||||
<th style="width: 5%"></th>
|
<th></th>
|
||||||
<th style="width: 5%"></th>
|
|
||||||
<th style="width: 5%"></th>
|
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center">{prettyTitle}</td>
|
<td>{prettyTitle}</td>
|
||||||
<td class="text-center">{prettyPrivacy}</td>
|
<td>{prettyPrivacy}</td>
|
||||||
<td>{description}</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>
|
||||||
<td><a href="{ROOT_URL}bookmarks/editFolder/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a></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>
|
||||||
<td><a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a></td>
|
<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>
|
</tr>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-center context-main" colspan="7">
|
<td colspan="4">
|
||||||
No results to show.
|
No results to show.
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{/ALT}
|
{/ALT}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-md btn-primary">Create</a>
|
<a href="{ROOT_URL}bookmarks/createFolder" class="btn btn-md btn-primary">Create</a>
|
||||||
</div>
|
</div>
|
@ -1,6 +1,5 @@
|
|||||||
<div class="offset-md-2 col-8 py-3 context-main-bg mt-4">
|
<div class="offset-2 col-8 p-3 context-main-bg my-4">
|
||||||
<div class="text-center">
|
<legend class="text-center">Folders List</legend>
|
||||||
<legend class="">Folders List</legend>
|
<hr>
|
||||||
</div>
|
|
||||||
{foldersList}
|
{foldersList}
|
||||||
</div>
|
</div>
|
@ -1,15 +1,15 @@
|
|||||||
<div class="mb-4 mt-4">
|
<div class="my-4">
|
||||||
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
<div class="offset-2 col-8 p-3 context-main-bg">
|
||||||
<legend class="text-center">Import Bookmarks</legend>
|
<legend class="text-center">Import Bookmarks</legend>
|
||||||
<hr>
|
<hr>
|
||||||
<div class="offset-3 col-lg-6 my-4">
|
<form method="post" enctype="multipart/form-data">
|
||||||
<form action="" method="post" enctype="multipart/form-data" class="text-center">
|
<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>
|
<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">
|
<input type="file" name="bookmark_file" id="bookmark_file" accept=".html">
|
||||||
</form>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Import</button>
|
<button type="submit" name="submit" value="submit" class="btn btn-primary btn-lg center-block">Import</button>
|
||||||
</div>
|
</div>
|
||||||
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,8 +1,10 @@
|
|||||||
<ul class="nav nav-tabs justify-content-center mt-4" role="tablist">
|
<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/index/" class="nav-link context-main">Manage</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/unsorted/" class="nav-link context-main">Unsorted</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/dashboards/" class="nav-link context-main">Dashboards</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/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">Share</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>
|
</ul>
|
||||||
{userFolderTabs}
|
{userFolderTabs}
|
@ -1,59 +1,66 @@
|
|||||||
<div class="container mt-3">
|
<div class="m-3">
|
||||||
<div class="card">
|
<div class="card w-100">
|
||||||
<div class="card-header">
|
<div class="card-header text-center context-main-bg">
|
||||||
<a class="btn btn-link text-decoration-none w-100" data-bs-toggle="collapse" href="#filterOptions" role="button" aria-expanded="false" aria-controls="filterOptions">
|
<a class="btn btn-link text-decoration-none" data-bs-toggle="collapse" href="#filterOptions" role="button" aria-expanded="false" aria-controls="filterOptions">
|
||||||
<strong>Filter Options</strong>
|
<strong class="h3 context-main"><i class="fa-solid fa-fw fa-gears"></i></strong>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div id="filterOptions" class="collapse">
|
<div id="filterOptions" class="collapse">
|
||||||
<div class="card-body">
|
<form method="post">
|
||||||
|
<div class="card-body context-second-bg">
|
||||||
|
<fieldset>
|
||||||
<!-- Edit Mode -->
|
<!-- Edit Mode -->
|
||||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
<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="me-3 fw-bold">Edit Mode:</div>
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input class="form-check-input" type="checkbox" id="editModeSwitch">
|
<input class="form-check-input" type="checkbox" id="editModeSwitch" name="editModeSwitch"{editModeSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="editModeSwitch"></label>
|
<label class="form-check-label" for="editModeSwitch"></label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Status Filters -->
|
<!-- Status Filters -->
|
||||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
<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="me-3 fw-bold">Status:</div>
|
||||||
<div class="form-check form-switch me-3">
|
<div class="form-check form-switch me-3">
|
||||||
<input class="form-check-input" type="checkbox" id="showArchivedSwitch">
|
<input class="form-check-input" type="checkbox" id="showArchivedSwitch" name="showArchivedSwitch"{showArchivedSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
|
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input class="form-check-input" type="checkbox" id="showHiddenSwitch">
|
<input class="form-check-input" type="checkbox" id="showHiddenSwitch" name="showHiddenSwitch"{showHiddenSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
|
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Buttons Filters -->
|
<!-- Buttons Filters -->
|
||||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
<div class="d-flex align-items-center border p-2 rounded context-main-bg">
|
||||||
<div class="me-3 fw-bold">Buttons:</div>
|
<div class="me-3 fw-bold">Buttons:</div>
|
||||||
<div class="form-check form-switch me-3">
|
<div class="form-check form-switch me-3">
|
||||||
<input class="form-check-input" type="checkbox" id="archiveButtonSwitch">
|
<input class="form-check-input" type="checkbox" id="archiveButtonSwitch" name="archiveButtonSwitch"{archiveButtonSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="archiveButtonSwitch">Archive Button</label>
|
<label class="form-check-label" for="archiveButtonSwitch">Archive Button</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch me-3">
|
<div class="form-check form-switch me-3">
|
||||||
<input class="form-check-input" type="checkbox" id="visibilityButtonSwitch">
|
<input class="form-check-input" type="checkbox" id="visibilityButtonSwitch" name="visibilityButtonSwitch"{visibilityButtonSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="visibilityButtonSwitch">Visibility Button</label>
|
<label class="form-check-label" for="visibilityButtonSwitch">Visibility Button</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch me-3">
|
<div class="form-check form-switch me-3">
|
||||||
<input class="form-check-input" type="checkbox" id="privacyButtonSwitch">
|
<input class="form-check-input" type="checkbox" id="privacyButtonSwitch" name="privacyButtonSwitch"{privacyButtonSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="privacyButtonSwitch">Privacy Button</label>
|
<label class="form-check-label" for="privacyButtonSwitch">Privacy Button</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch me-3">
|
<div class="form-check form-switch me-3">
|
||||||
<input class="form-check-input" type="checkbox" id="shareButtonSwitch">
|
<input class="form-check-input" type="checkbox" id="shareButtonSwitch" name="shareButtonSwitch"{shareButtonSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
|
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
|
||||||
</div>
|
</div>
|
||||||
<div class="form-check form-switch">
|
<div class="form-check form-switch">
|
||||||
<input class="form-check-input" type="checkbox" id="addButtonSwitch">
|
<input class="form-check-input" type="checkbox" id="addButtonSwitch" name="addButtonSwitch"{addButtonSwitch_IS_CHECKED}>
|
||||||
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
|
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
|
||||||
</div>
|
</div>
|
||||||
</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>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%">
|
<th style="width: 5%">
|
||||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]">
|
<input type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]">
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
<div class="card-footer text-center">
|
<div class="card-footer text-center">
|
||||||
{ADMIN}
|
{ADMIN}
|
||||||
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
||||||
<INPUT type="hidden" name="F_" value="{ID}">
|
<input type="hidden" name="F_" value="{ID}">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
|
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
|
||||||
</form>
|
</form>
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%">
|
<th style="width: 5%">
|
||||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]">
|
<input type="checkbox" onchange="checkAll(this)" name="check.f" value="F_[]">
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<div class="col-md-5 offset-md-1 mb-3">
|
<div class="col-md-5 offset-md-1 mb-3 text-center">
|
||||||
<h5>Subscribe to our newsletter</h5>
|
<h5>Subscribe</h5>
|
||||||
<div class="d-flex flex-column flex-sm-row w-100 gap-2">
|
<div class="d-flex flex-column flex-sm-row gap-2 justify-content-center mx-auto">
|
||||||
<form action="{ROOT_URL}subscribe/home" method="post" class="form-horizontal"></form>
|
<form action="{ROOT_URL}subscribe/home" method="post" class="form-horizontal">
|
||||||
<label for="newsletter1" class="visually-hidden">Email address</label>
|
<label for="email" class="visually-hidden">Email address</label>
|
||||||
<input name="email" id="email" type="email" class="form-control" placeholder="Email address" autocomplete="email">
|
<input name="email" id="email" type="email" class="form-control my-2" placeholder="Email address" autocomplete="email">
|
||||||
<input type="hidden" name="token" value="{TOKEN}">
|
<input type="hidden" name="token" value="{TOKEN}">
|
||||||
<button class="btn btn-primary" name="submit" value="submit" type="submit">Subscribe</button>
|
<button class="btn btn-primary my-2 w-100 atb-green-bg" name="submit" value="submit" type="submit">Subscribe</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -16,7 +16,7 @@
|
|||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%"></th>
|
<th style="width: 5%"></th>
|
||||||
<th style="width: 5%">
|
<th style="width: 5%">
|
||||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.br" value="S_[]">
|
<input type="checkbox" onchange="checkAll(this)" name="check.br" value="S_[]">
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -11,11 +11,16 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="col-6 offset-3 my-2">
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
{ALT}
|
{ALT}
|
||||||
<div class="blog-post">
|
<div class="blog-post">
|
||||||
<p class="blog-post-meta py-3 text-center">No Suggestions Found.</p>
|
<p class="blog-post-meta py-3 text-center">No Suggestions Found.</p>
|
||||||
</div>
|
</div>
|
||||||
{/ALT}
|
{/ALT}
|
||||||
<a href="{ROOT_URL}suggestions/create" class="btn btn-sm btn-primary" role="button">Make a Suggestion</a>
|
<div class="text-center">
|
||||||
|
<a href="{ROOT_URL}suggestions/create" class="btn btn-lg btn-primary" role="button">Make a Suggestion</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
@ -12,7 +12,7 @@
|
|||||||
<th scope="col" style="width: 10%"></th>
|
<th scope="col" style="width: 10%"></th>
|
||||||
<th scope="col" style="width: 10%"></th>
|
<th scope="col" style="width: 10%"></th>
|
||||||
<th scope="col" style="width: 10%">
|
<th scope="col" style="width: 10%">
|
||||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.b" value="P_[]">
|
<input type="checkbox" onchange="checkAll(this)" name="check.b" value="P_[]">
|
||||||
</th>
|
</th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="col-6 col-md-2 mb-3">
|
<div class="col-6 col-md-2 mb-3">
|
||||||
<h5>More Info</h5>
|
<h5 class="atb-green">More Info</h5>
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="nav-item mb-2"><a href="{url}" class="nav-link p-0 text-muted">{text}</a></li>
|
<li class="nav-item mb-2"><a href="{url}" class="nav-link p-0 text-muted">{text}</a></li>
|
||||||
|
@ -1 +1 @@
|
|||||||
<span>© 2024 AllTheBookmarks, Powered by <a href="https://thetempusproject.com" class="text-decoration-none">The Tempus Project</a>.</span>
|
<span>© 2024 AllTheBookmarks, Powered by <a href="https://thetempusproject.com" class="text-decoration-none atb-green">The Tempus Project</a>.</span>
|
@ -1,5 +1,5 @@
|
|||||||
<div class="col-6 col-md-2 mb-3">
|
<div class="col-6 col-md-2 mb-3">
|
||||||
<h5>Contact Us</h5>
|
<h5 class="atb-green">Contact Us</h5>
|
||||||
<ul class="nav flex-column">
|
<ul class="nav flex-column">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li class="nav-item mb-2"><a href="{url}" class="nav-link p-0 text-muted">{text}</a></li>
|
<li class="nav-item mb-2"><a href="{url}" class="nav-link p-0 text-muted">{text}</a></li>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<div class="col-6 col-md-2 mb-3">
|
<div class="col-6 col-md-2 mb-3">
|
||||||
<h5>Dark Mode</h5>
|
<h5 class="atb-green">Dark Mode</h5>
|
||||||
<div class="material-switch px-4">
|
<div class="material-switch px-4">
|
||||||
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
|
<input name="dark-mode-toggle" type="checkbox" id="dark-mode-toggle" class="form-check-input">
|
||||||
<label for="dark-mode-toggle" class="label-default"></label>
|
<label for="dark-mode-toggle" class="label-default"></label>
|
||||||
|
@ -4,17 +4,17 @@
|
|||||||
<div class="col-lg-6 mx-auto">
|
<div class="col-lg-6 mx-auto">
|
||||||
<p class="lead mb-4">Quickly add and manage an internet worth of bookmarks with AllTheBookmarks, my personal favorite app for keeping track of dead memes long after they outlive their hilarity.</p>
|
<p class="lead mb-4">Quickly add and manage an internet worth of bookmarks with AllTheBookmarks, my personal favorite app for keeping track of dead memes long after they outlive their hilarity.</p>
|
||||||
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center mb-5">
|
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center mb-5">
|
||||||
<a href="#pricing" class="btn btn-primary btn-lg px-4 me-sm-3">
|
<a href="#pricing" class="btn btn-primary atb-green-bg btn-lg px-4 me-sm-3">
|
||||||
Buy Now (Too Fast)
|
Buy Now (Too Fast)
|
||||||
</a>
|
</a>
|
||||||
<a href="#features" class="btn btn-outline-secondary btn-lg px-4">
|
<a href="#features" class="btn btn-outline-secondary btn-lg px-4 atb-green-outline">
|
||||||
Learn More
|
Learn More
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="overflow-hidden" style="max-height: 30vh;">
|
<div class="overflow-hidden" style="max-height: 30vh;">
|
||||||
<div class="container px-5">
|
<div class="container px-5">
|
||||||
<img src="{ROOT_URL}app/images/in-one-place.png" class="img-fluid border rounded-3 shadow-lg mb-4" alt="Example image" width="700" height="500" loading="lazy">
|
<img src="{ROOT_URL}images/manage.png" class="img-fluid border rounded-3 shadow-lg mb-4" alt="Example image" width="700" height="500" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
<!-- All the stuff you need -->
|
<!-- All the stuff you need -->
|
||||||
<div class="container px-4 py-5" id="features">
|
<div class="container px-4 py-5" id="features">
|
||||||
<h2 class="pb-2 border-bottom">All the stuff you need, none of the stuff you don't!</h2>
|
<h2 class="pb-2 border-bottom atb-green">All the stuff you need, none of the stuff you don't!</h2>
|
||||||
<div class="row row-cols-1 row-cols-md-2 align-items-md-center g-5 py-5">
|
<div class="row row-cols-1 row-cols-md-2 align-items-md-center g-5 py-5">
|
||||||
<div class="d-flex flex-column align-items-start gap-2">
|
<div class="d-flex flex-column align-items-start gap-2">
|
||||||
<h3 class="fw-bold">I just wanted something cross-browser for storing bookmarks.</h3>
|
<h3 class="fw-bold">I just wanted something cross-browser for storing bookmarks.</h3>
|
||||||
@ -31,28 +31,28 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="row row-cols-1 row-cols-sm-2 g-4">
|
<div class="row row-cols-1 row-cols-sm-2 g-4">
|
||||||
<div class="d-flex flex-column gap-2">
|
<div class="d-flex flex-column gap-2">
|
||||||
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
|
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center atb-green-bg fs-4 rounded-3">
|
||||||
<i class="fa fa-fw fa-add"></i>
|
<i class="fa fa-fw fa-add"></i>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="fw-semibold mb-0">Add</h4>
|
<h4 class="fw-semibold mb-0">Add</h4>
|
||||||
<p class="text-muted">Whether its through the web-interface or supported browser extensions, you can add bookmarks from (almost) anywhere.</p>
|
<p class="text-muted">Whether its through the web-interface or supported browser extensions, you can add bookmarks from (almost) anywhere.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column gap-2">
|
<div class="d-flex flex-column gap-2">
|
||||||
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
|
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center atb-green-bg fs-4 rounded-3">
|
||||||
<i class="fa fa-fw fa-solid fa-list-check"></i>
|
<i class="fa fa-fw fa-solid fa-list-check"></i>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="fw-semibold mb-0">Manage</h4>
|
<h4 class="fw-semibold mb-0">Manage</h4>
|
||||||
<p class="text-muted">Create folders, tag links, keep notes and create custom dashboards.</p>
|
<p class="text-muted">Create folders, tag links, keep notes and create custom dashboards.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column gap-2">
|
<div class="d-flex flex-column gap-2">
|
||||||
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
|
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center atb-green-bg fs-4 rounded-3">
|
||||||
<i class="fa fa-fw fa-share"></i>
|
<i class="fa fa-fw fa-share"></i>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="fw-semibold mb-0">Share</h4>
|
<h4 class="fw-semibold mb-0">Share</h4>
|
||||||
<p class="text-muted">All links are kept private by default but if you need to share with a friend or co-worker you can change this setting individually or for entire folders.</p>
|
<p class="text-muted">All links are kept private by default but if you need to share with a friend or co-worker you can change this setting individually or for entire folders.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="d-flex flex-column gap-2">
|
<div class="d-flex flex-column gap-2">
|
||||||
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-4 rounded-3">
|
<div class="feature-icon-small d-inline-flex align-items-center justify-content-center atb-green-bg fs-4 rounded-3">
|
||||||
<i class="fa-solid fa-arrow-right-arrow-left"></i>
|
<i class="fa-solid fa-arrow-right-arrow-left"></i>
|
||||||
</div>
|
</div>
|
||||||
<h4 class="fw-semibold mb-0">Import / Export</h4>
|
<h4 class="fw-semibold mb-0">Import / Export</h4>
|
||||||
@ -68,16 +68,16 @@
|
|||||||
<div class="container col-xxl-8 px-4 py-5">
|
<div class="container col-xxl-8 px-4 py-5">
|
||||||
<div class="row flex-lg-row-reverse align-items-center g-5 py-5">
|
<div class="row flex-lg-row-reverse align-items-center g-5 py-5">
|
||||||
<div class="col-10 col-sm-8 col-lg-6">
|
<div class="col-10 col-sm-8 col-lg-6">
|
||||||
<img src="{ROOT_URL}app/images/keep-track.png" class="d-block mx-lg-auto img-fluid" alt="Bootstrap Themes" width="700" height="500" loading="lazy">
|
<img src="{ROOT_URL}images/folders.png" class="d-block mx-lg-auto img-fluid" alt="Bootstrap Themes" width="700" height="500" loading="lazy">
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-6">
|
<div class="col-lg-6">
|
||||||
<h1 class="display-5 fw-bold lh-1 mb-3">It can be difficult to keep track of... all of the internet</h1>
|
<h1 class="display-5 fw-bold lh-1 mb-3">It can be difficult to keep track of... all of the internet</h1>
|
||||||
<p class="lead">With a million and one devices from all three companies, it can be a lot to manage. From work links, to Instagram stories, ticktocks for cooking, to Pinterest for Halloween; we consume a thousand different sources in a hundred different ways. Keep it all centralized with a new forth company!</p>
|
<p class="lead">With a million and one devices from all three companies, it can be a lot to manage. From work links, to Instagram stories, ticktocks for cooking, to Pinterest for Halloween; we consume a thousand different sources in a hundred different ways. Keep it all centralized with a new forth company!</p>
|
||||||
<div class="d-grid gap-2 d-md-flex justify-content-md-start">
|
<div class="d-grid gap-2 d-md-flex justify-content-md-start">
|
||||||
<a href="#pricing" class="btn btn-primary btn-lg px-4 me-md-2">
|
<a href="#pricing" class="btn btn-primary atb-green-bg btn-lg px-4 me-md-2">
|
||||||
Buy Now (Still too fast)
|
Buy Now (Still too fast)
|
||||||
</a>
|
</a>
|
||||||
<a href="#darkmode" class="btn btn-outline-secondary btn-lg px-4">
|
<a href="#darkmode" class="btn btn-outline-secondary btn-lg px-4 atb-green-outline">
|
||||||
Keep Learning?
|
Keep Learning?
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -104,7 +104,7 @@
|
|||||||
|
|
||||||
<!-- Never Browse without it -->
|
<!-- Never Browse without it -->
|
||||||
<div class="container px-4 py-5" id="extension">
|
<div class="container px-4 py-5" id="extension">
|
||||||
<h2 class="pb-2 border-bottom">Never Browse without it</h2>
|
<h2 class="pb-2 border-bottom atb-green">Never Browse without it</h2>
|
||||||
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
|
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
|
||||||
<div class="col d-flex align-items-start">
|
<div class="col d-flex align-items-start">
|
||||||
<div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
|
<div class="icon-square text-bg-light d-inline-flex align-items-center justify-content-center fs-4 flex-shrink-0 me-3">
|
||||||
@ -113,7 +113,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3 class="fs-2">Chrome Extension</h3>
|
<h3 class="fs-2">Chrome Extension</h3>
|
||||||
<p>Quickly add new bookmarks to your "2017 Taxes" folder with ease! Keep them private or share it with the other haberdashers from any page.</p>
|
<p>Quickly add new bookmarks to your "2017 Taxes" folder with ease! Keep them private or share it with the other haberdashers from any page.</p>
|
||||||
<a href="/extensions/chrome" class="btn btn-primary">
|
<a href="/extensions/chrome" class="btn btn-primary atb-green-bg">
|
||||||
Download Now
|
Download Now
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -125,7 +125,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3 class="fs-2">Firefox Extension</h3>
|
<h3 class="fs-2">Firefox Extension</h3>
|
||||||
<p>Funny enough, Firefox is basically just chrome now.</p>
|
<p>Funny enough, Firefox is basically just chrome now.</p>
|
||||||
<a href="/extensions/firefox" class="btn btn-primary">
|
<a href="/extensions/firefox" class="btn btn-primary atb-green-bg">
|
||||||
Download Now
|
Download Now
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -137,7 +137,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<h3 class="fs-2">Opera Extension</h3>
|
<h3 class="fs-2">Opera Extension</h3>
|
||||||
<p>This is also Chrome.</p>
|
<p>This is also Chrome.</p>
|
||||||
<a href="/extensions/opera" class="btn btn-primary">
|
<a href="/extensions/opera" class="btn btn-primary atb-green-bg">
|
||||||
Download Now
|
Download Now
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -154,7 +154,7 @@
|
|||||||
<h1 class="display-4 fw-normal">Pricing</h1>
|
<h1 class="display-4 fw-normal">Pricing</h1>
|
||||||
<p class="fs-5 text-muted">The pricing is very straight-forward: free, monthly, yearly.</p>
|
<p class="fs-5 text-muted">The pricing is very straight-forward: free, monthly, yearly.</p>
|
||||||
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center">
|
<div class="d-grid gap-2 d-sm-flex justify-content-sm-center">
|
||||||
<a href="#compare" class="btn btn-outline-secondary btn-lg px-4">
|
<a href="#compare" class="btn btn-outline-secondary btn-lg px-4 atb-green-outline">
|
||||||
Compare
|
Compare
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -166,19 +166,19 @@
|
|||||||
<div class="container my-5">
|
<div class="container my-5">
|
||||||
<div class="row p-4 pb-0 pe-lg-0 pt-lg-5 align-items-center rounded-3 border shadow-lg context-main-bg">
|
<div class="row p-4 pb-0 pe-lg-0 pt-lg-5 align-items-center rounded-3 border shadow-lg context-main-bg">
|
||||||
<div class="col-lg-7 p-3 p-lg-5 pt-lg-3">
|
<div class="col-lg-7 p-3 p-lg-5 pt-lg-3">
|
||||||
<h1 class="display-4 fw-bold lh-1">Clean, Simple, Direct</h1>
|
<h1 class="display-4 fw-bold lh-1 atb-green">Clean, Simple, Direct</h1>
|
||||||
<p class="lead">An intuitive app with a sleep, modern design is the goal. There is no need for hundreds of bells in whistles, no bluetooth, no AII to tell you what your best bookmark is, just a simple app to make life easier.</p>
|
<p class="lead">An intuitive app with a sleep, modern design is the goal. There is no need for hundreds of bells in whistles, no bluetooth, no AII to tell you what your best bookmark is, just a simple app to make life easier.</p>
|
||||||
<div class="d-grid gap-2 d-md-flex justify-content-md-start mb-4 mb-lg-3">
|
<div class="d-grid gap-2 d-md-flex justify-content-md-start mb-4 mb-lg-3">
|
||||||
<a href="#pricing" class="btn btn-primary btn-lg px-4 me-md-2 fw-bold">
|
<a href="#pricing" class="btn btn-primary btn-lg px-4 me-md-2 fw-bold atb-green-bg">
|
||||||
Buy Now
|
Buy Now
|
||||||
</a>
|
</a>
|
||||||
<a href="/register" class="btn btn-outline-secondary btn-lg px-4">
|
<a href="/register" class="btn btn-outline-secondary btn-lg px-4 atb-green-outline">
|
||||||
Sign-Up for Free
|
Sign-Up for Free
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-lg-4 offset-lg-1 p-0 overflow-hidden shadow-lg">
|
<div class="col-lg-4 offset-lg-1 p-0 overflow-hidden shadow-lg">
|
||||||
<img class="rounded-lg-3" src="{ROOT_URL}app/images/clean-simple.png" alt="" width="720">
|
<img class="rounded-lg-3" src="{ROOT_URL}images/dashboard.png" alt="" width="720">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -190,21 +190,21 @@
|
|||||||
<h2 class="pb-2 border-bottom">Built to.... work</h2>
|
<h2 class="pb-2 border-bottom">Built to.... work</h2>
|
||||||
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
|
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
|
||||||
<div class="feature col">
|
<div class="feature col">
|
||||||
<div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
|
<div class="feature-icon d-inline-flex align-items-center justify-content-center atb-green-bg fs-2 mb-3">
|
||||||
<i class="fa-solid fa-bolt"></i>
|
<i class="fa-solid fa-bolt"></i>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="fs-2">Versatile</h3>
|
<h3 class="fs-2">Versatile</h3>
|
||||||
<p>Built to be a responsive application, AllTheBookmarks can be easily accessed and used from any web-enabled device.</p>
|
<p>Built to be a responsive application, AllTheBookmarks can be easily accessed and used from any web-enabled device.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature col">
|
<div class="feature col">
|
||||||
<div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
|
<div class="feature-icon d-inline-flex align-items-center justify-content-center atb-green-bg fs-2 mb-3">
|
||||||
<i class="fa-solid fa-star"></i>
|
<i class="fa-solid fa-star"></i>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="fs-2">Simple</h3>
|
<h3 class="fs-2">Simple</h3>
|
||||||
<p>At the end of the day, you are managing a giant list of websites, lets not complicate that too much eh?</p>
|
<p>At the end of the day, you are managing a giant list of websites, lets not complicate that too much eh?</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="feature col">
|
<div class="feature col">
|
||||||
<div class="feature-icon d-inline-flex align-items-center justify-content-center text-bg-primary bg-gradient fs-2 mb-3">
|
<div class="feature-icon d-inline-flex align-items-center justify-content-center atb-green-bg fs-2 mb-3">
|
||||||
<i class="fa-solid fa-wand-magic-sparkles"></i>
|
<i class="fa-solid fa-wand-magic-sparkles"></i>
|
||||||
</div>
|
</div>
|
||||||
<h3 class="fs-2">Robust</h3>
|
<h3 class="fs-2">Robust</h3>
|
||||||
@ -231,56 +231,56 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Add and Manage Bookmarks</th>
|
<th scope="row" class="text-start">Add and Manage Bookmarks</th>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Extensions for all major browsers</th>
|
<th scope="row" class="text-start">Extensions for all major browsers</th>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Access from any device</th>
|
<th scope="row" class="text-start">Access from any device</th>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Share bookmarks abd folders</th>
|
<th scope="row" class="text-start">Share bookmarks abd folders</th>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Import/Export Features</th>
|
<th scope="row" class="text-start">Import/Export Features</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Customizable Dashboards / Pages</th>
|
<th scope="row" class="text-start">Customizable Dashboards / Pages</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Request/Influence Development</th>
|
<th scope="row" class="text-start">Request/Influence Development</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Early Access</th>
|
<th scope="row" class="text-start">Early Access</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><i class="fa fa-fw fa-check"></i></td>
|
<td><i class="fa fa-fw fa-check atb-green"></i></td>
|
||||||
<td><i class="fa-solid fa-check"></i></td>
|
<td><i class="fa-solid fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="row" class="text-start">Cheaper</th>
|
<th scope="row" class="text-start">Cheaper</th>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td></td>
|
<td></td>
|
||||||
<td><i class="fa-solid fa-check"></i></td>
|
<td><i class="fa-solid fa-check atb-green"></i></td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -304,7 +304,7 @@
|
|||||||
<li>Access from any device</li>
|
<li>Access from any device</li>
|
||||||
<li>Share access with anyone</li>
|
<li>Share access with anyone</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/register" class="mt-auto w-100 btn btn-lg btn-outline-primary">
|
<a href="/register" class="mt-auto w-100 btn btn-lg atb-green-outline">
|
||||||
Sign-Up for Free
|
Sign-Up for Free
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -324,15 +324,15 @@
|
|||||||
<li>Direct control of Feature Development</li>
|
<li>Direct control of Feature Development</li>
|
||||||
<li>Early Access to new features</li>
|
<li>Early Access to new features</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/member/signup/monthly" class="mt-auto w-100 btn btn-lg btn-primary">
|
<a href="/member/signup/monthly" class="mt-auto w-100 btn btn-lg atb-green-bg">
|
||||||
Get started
|
Get started
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col">
|
<div class="col">
|
||||||
<div class="card mb-4 rounded-3 shadow-sm border-primary h-100 context-main-bg">
|
<div class="card mb-4 rounded-3 shadow-sm atb-green-outline-only h-100 context-main-bg">
|
||||||
<div class="card-header py-3 text-bg-primary border-primary">
|
<div class="card-header py-3 atb-green-bg">
|
||||||
<h4 class="my-0 fw-normal">Yearly</h4>
|
<h4 class="my-0 fw-normal">Yearly</h4>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body d-flex flex-column">
|
<div class="card-body d-flex flex-column">
|
||||||
@ -340,7 +340,7 @@
|
|||||||
<ul class="list-unstyled mt-3 mb-4">
|
<ul class="list-unstyled mt-3 mb-4">
|
||||||
<li>Its cheaper if you like the product</li>
|
<li>Its cheaper if you like the product</li>
|
||||||
</ul>
|
</ul>
|
||||||
<a href="/member/signup/yearly" class="mt-auto w-100 btn btn-lg btn-primary">
|
<a href="/member/signup/yearly" class="mt-auto w-100 btn btn-lg atb-green-bg">
|
||||||
Get started
|
Get started
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@ -350,5 +350,5 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="text-center py-3">
|
<div class="text-center py-3">
|
||||||
<a href="#top" class="btn btn-outline-primary">Back to Top</a>
|
<a href="#top" class="btn atb-green-outline">Back to Top</a>
|
||||||
</div>
|
</div>
|
@ -1,5 +1,5 @@
|
|||||||
<ul class="nav col-12 col-lg-auto mb-2 justify-content-center mb-md-0 mx-auto">
|
<ul class="nav col-12 col-lg-auto mb-2 justify-content-center mb-md-0 mx-auto">
|
||||||
{LOOP}
|
{LOOP}
|
||||||
<li><a href="{url}" class="nav-link px-2 text-white">{text}</a></li>
|
<li><a href="{url}" class="nav-link px-2 atb-green">{text}</a></li>
|
||||||
{/LOOP}
|
{/LOOP}
|
||||||
</ul>
|
</ul>
|
BIN
images/dashboard.png
Normal file
BIN
images/dashboard.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 64 KiB |
BIN
images/folders.png
Normal file
BIN
images/folders.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 101 KiB |
BIN
images/manage.png
Normal file
BIN
images/manage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 113 KiB |
Reference in New Issue
Block a user