wip
This commit is contained in:
@ -39,7 +39,7 @@ if ( ! defined( 'CONFIG_DIRECTORY' ) ) {
|
||||
define( 'CANARY_SECURE_HASH', 'd73ed7591a30f0ca7d686a0e780f0d05' );
|
||||
# Tempus Project Core
|
||||
define( 'APP_NAME', 'All The Bookmarks');
|
||||
define( 'TP_DEFAULT_LOGO', 'images/logo.png');
|
||||
define( 'TP_DEFAULT_LOGO', 'images/logo180.png');
|
||||
// Check
|
||||
define( 'MINIMUM_PHP_VERSION', 8.1);
|
||||
// Cookies
|
||||
|
@ -310,3 +310,8 @@ body {
|
||||
/* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
|
||||
background: linear-gradient(to right, #2c2c2c, #1e1e1e, #1e1e1e);
|
||||
}
|
||||
|
||||
.bookmark-card.dragging {
|
||||
opacity: 0.7;
|
||||
cursor: move; /* Show a move cursor when dragging */
|
||||
}
|
@ -56,6 +56,9 @@ class Bookmarks extends Controller {
|
||||
Components::set( 'userFolderTabs', $userFolderTabsView );
|
||||
Components::set( 'SITE_URL', Routes::getAddress() );
|
||||
Views::raw( $tabsView );
|
||||
Components::append( 'TEMPLATE_JS_INCLUDES', Template::parse('<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{ROOT_URL}app/plugins/bookmarks/js/bookmarks.js"></script>' ) );
|
||||
$options = Views::simpleView( 'bookmarks.nav.viewOptions' );
|
||||
Components::set( 'VIEW_OPTIONS', $options );
|
||||
}
|
||||
|
||||
public function index() {
|
||||
@ -71,6 +74,7 @@ class Bookmarks extends Controller {
|
||||
$folderObject->ID = $folder->ID;
|
||||
$folderObject->title = $folder->title;
|
||||
$folderObject->color = $folder->color;
|
||||
$folderObject->uuid = $folder->uuid;
|
||||
$folderObject->bookmarkListRows = Views::simpleView( 'bookmarks.components.bookmarkListRows', $folderObject->bookmarks );
|
||||
$panelArray[] = $folderObject;
|
||||
}
|
||||
|
186
app/plugins/bookmarks/js/bookmarks.js
Normal file
186
app/plugins/bookmarks/js/bookmarks.js
Normal file
@ -0,0 +1,186 @@
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
// Handle all bootstrap popover inits
|
||||
const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
|
||||
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))
|
||||
|
||||
const masonryContainer = document.querySelector('[data-masonry]');
|
||||
if ( ! masonryContainer ) {
|
||||
return;
|
||||
}
|
||||
const masonryInstance = new Masonry(masonryContainer, {
|
||||
columnHeight: '.accordion',
|
||||
percentPosition: true
|
||||
});
|
||||
const updateMasonryLayout = () => masonryInstance.layout();
|
||||
|
||||
masonryContainer.addEventListener('hidden.bs.collapse', updateMasonryLayout);
|
||||
masonryContainer.addEventListener('shown.bs.collapse', updateMasonryLayout);
|
||||
|
||||
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 });
|
||||
});
|
||||
|
||||
// Initialize all toggle functions
|
||||
toggleVisibility('editModeSwitch', 'edit-mode');
|
||||
toggleVisibility('showArchivedSwitch', 'link-archived');
|
||||
toggleVisibility('showHiddenSwitch', 'link-hidden');
|
||||
toggleVisibility('archiveButtonSwitch', 'btn-archive');
|
||||
toggleVisibility('visibilityButtonSwitch', 'btn-hideshow');
|
||||
toggleVisibility('privacyButtonSwitch', 'btn-publish');
|
||||
toggleVisibility('addButtonSwitch', 'btn-addlink');
|
||||
toggleVisibility('shareButtonSwitch', 'btn-share');
|
||||
});
|
||||
|
||||
// Function to handle showing or hiding elements based on the checkbox state
|
||||
function toggleVisibility(switchId, className) {
|
||||
const switchElement = document.getElementById(switchId);
|
||||
const elementsToToggle = document.querySelectorAll(`.${className}`);
|
||||
|
||||
// Listen for changes to the checkbox
|
||||
switchElement.addEventListener('change', () => {
|
||||
if (switchElement.checked) {
|
||||
elementsToToggle.forEach(element => {
|
||||
element.style.display = ''; // Show the element (default display)
|
||||
});
|
||||
} else {
|
||||
elementsToToggle.forEach(element => {
|
||||
element.style.display = 'none'; // Hide the element
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// Trigger the toggle initially to set the correct visibility on page load
|
||||
switchElement.dispatchEvent(new Event('change'));
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
const bookmarkSort = document.getElementById('bookmarkSort');
|
||||
let draggingElement = null;
|
||||
let placeholder = null;
|
||||
let initialX = 0;
|
||||
let initialY = 0;
|
||||
let offsetX = 0;
|
||||
let offsetY = 0;
|
||||
|
||||
// Function to handle the drag start
|
||||
const handleDragStart = (e, element) => {
|
||||
draggingElement = element;
|
||||
|
||||
// Create a placeholder to maintain layout
|
||||
placeholder = document.createElement('div');
|
||||
placeholder.style.height = `${draggingElement.offsetHeight}px`;
|
||||
placeholder.style.marginBottom = getComputedStyle(draggingElement).marginBottom;
|
||||
placeholder.classList.add('placeholder');
|
||||
draggingElement.parentNode.insertBefore(placeholder, draggingElement);
|
||||
|
||||
const rect = element.getBoundingClientRect();
|
||||
initialX = e.clientX;
|
||||
initialY = e.clientY;
|
||||
offsetX = e.clientX - rect.left;
|
||||
offsetY = e.clientY - rect.top;
|
||||
|
||||
// Prevent the element from moving in the normal flow
|
||||
element.classList.add('dragging');
|
||||
element.style.position = 'absolute';
|
||||
draggingElement.style.width = `${rect.width}px`; // Preserve width
|
||||
draggingElement.style.height = `${rect.height}px`; // Preserve height
|
||||
element.style.zIndex = 1000; // Bring the element on top of others
|
||||
element.style.left = `${rect.left}px`;
|
||||
element.style.top = `${rect.top}px`;
|
||||
|
||||
e.preventDefault();
|
||||
};
|
||||
|
||||
// Function to handle dragging movement
|
||||
const handleDragMove = (e) => {
|
||||
if (draggingElement) {
|
||||
const dx = e.clientX - initialX + offsetX;
|
||||
const dy = e.clientY - initialY + offsetY;
|
||||
|
||||
draggingElement.style.left = `${dx}px`;
|
||||
draggingElement.style.top = `${dy}px`;
|
||||
}
|
||||
};
|
||||
|
||||
// Function to handle the drag end
|
||||
const handleDragEnd = () => {
|
||||
if (draggingElement) {
|
||||
const rect = draggingElement.getBoundingClientRect();
|
||||
|
||||
// Reset the position styles of the dragged element
|
||||
draggingElement.style.position = '';
|
||||
draggingElement.style.zIndex = ''; // Reset z-index
|
||||
draggingElement.style.left = '';
|
||||
draggingElement.style.top = '';
|
||||
draggingElement.classList.remove('dragging');
|
||||
|
||||
// Re-insert the element back into the DOM properly
|
||||
const closestElement = getClosestElement(rect.left, rect.top);
|
||||
console.error(closestElement.id);
|
||||
|
||||
if (closestElement) {
|
||||
bookmarkSort.insertBefore(draggingElement, closestElement);
|
||||
console.log( 'insertBefore' );
|
||||
} else {
|
||||
bookmarkSort.appendChild(draggingElement);
|
||||
console.log( 'append' );
|
||||
}
|
||||
|
||||
// Reorder the elements after the drag ends
|
||||
reorderElements();
|
||||
draggingElement = null;
|
||||
}
|
||||
};
|
||||
|
||||
// Function to reorder the elements inside the container
|
||||
const reorderElements = () => {
|
||||
const elements = Array.from(bookmarkSort.children);
|
||||
const sortedIds = elements.map(element => element.id);
|
||||
console.log('New order:', sortedIds);
|
||||
};
|
||||
|
||||
// Function to handle the drop event
|
||||
const handleDrop = (e) => {
|
||||
e.preventDefault();
|
||||
};
|
||||
|
||||
// Helper function to find the closest element based on mouse position
|
||||
const getClosestElement = (x, y) => {
|
||||
const elements = Array.from(bookmarkSort.children).filter(
|
||||
(el) => el !== placeholder && el !== draggingElement
|
||||
);
|
||||
|
||||
let closest = null;
|
||||
let closestDistance = Number.POSITIVE_INFINITY;
|
||||
|
||||
elements.forEach((child) => {
|
||||
const rect = child.getBoundingClientRect();
|
||||
const distance = Math.abs(rect.top - y);
|
||||
|
||||
if (distance < closestDistance) {
|
||||
closestDistance = distance;
|
||||
closest = child;
|
||||
}
|
||||
});
|
||||
|
||||
return closest;
|
||||
};
|
||||
|
||||
// Attach event listeners to all .card-header elements for dragging
|
||||
Array.from(document.querySelectorAll('.mover-arrow')).forEach(cardHeader => {
|
||||
cardHeader.addEventListener('mousedown', (e) => handleDragStart(e, cardHeader.closest('.bookmark-card')));
|
||||
});
|
||||
|
||||
// Handle the dragging process
|
||||
document.addEventListener('mousemove', handleDragMove);
|
||||
document.addEventListener('mouseup', handleDragEnd);
|
||||
bookmarkSort.addEventListener('dragover', handleDrop); // Listen for the drop event to update the order
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
@ -322,15 +322,6 @@ class Bookmarks extends DatabaseModel {
|
||||
|
||||
return $finalUrl;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// $headers = get_headers( $url, 1 );
|
||||
$headers = @get_headers($url, 1);
|
||||
if ( $headers === false ) {
|
||||
@ -358,35 +349,33 @@ class Bookmarks extends DatabaseModel {
|
||||
$instance->iconHtml = '<i class="fa fa-fw fa-link"></i>';
|
||||
} else {
|
||||
if (strpos($instance->icon, 'http') !== false) {
|
||||
$instance->iconHtml = '<img src="' . $instance->icon .'" />';
|
||||
$instance->iconHtml = '<img src="' . $instance->icon .'">';
|
||||
} else {
|
||||
$instance->iconHtml = '<img src="' . $base_url . ltrim( $instance->icon, '/' ) .'" />';
|
||||
$instance->iconHtml = '<img src="' . $base_url . ltrim( $instance->icon, '/' ) .'">';
|
||||
}
|
||||
}
|
||||
|
||||
if ( $instance->privacy == 'private' ) {
|
||||
$instance->privacyBadge = '<span class="mx-2 translate-center badge bg-success rounded-pill">Private</span>';
|
||||
} else {
|
||||
$instance->privacyBadge = '<span class="mx-2 translate-center badge bg-danger rounded-pill">Public</span>';
|
||||
}
|
||||
|
||||
if ( $instance->privacy == 'private' ) {
|
||||
$instance->publish = '
|
||||
<a href="{ROOT_URL}bookmarks/publish/'.$instance->ID.'" class="btn btn-sm btn-outline-danger">
|
||||
<i class="fa fa-fw fa-lock"></i>
|
||||
</a>';
|
||||
} else {
|
||||
$instance->privacyBadge = '<span class="mx-2 translate-center badge bg-danger rounded-pill">Public</span>';
|
||||
$instance->publish = '
|
||||
<a href="{ROOT_URL}bookmarks/retract/'.$instance->ID.'" class="btn btn-sm btn-outline-secondary">
|
||||
<i class="fa fa-fw fa-lock"></i>
|
||||
</a>';
|
||||
}
|
||||
if ( empty( $instance->hiddenAt ) ) {
|
||||
$instance->hidden_class = '';
|
||||
$instance->hideBtn = '
|
||||
<a href="{ROOT_URL}bookmarks/hideBookmark/'.$instance->ID.'" class="btn btn-sm btn-outline-warning">
|
||||
<i class="fa fa-fw fa-eye"></i>
|
||||
</a>';
|
||||
} else {
|
||||
$instance->hidden_class = 'link-hidden';
|
||||
$instance->hideBtn = '
|
||||
<a href="{ROOT_URL}bookmarks/showBookmark/'.$instance->ID.'" class="btn btn-sm btn-outline-secondary">
|
||||
<i class="fa fa-fw fa-eye"></i>
|
||||
@ -394,11 +383,13 @@ class Bookmarks extends DatabaseModel {
|
||||
}
|
||||
|
||||
if ( empty( $instance->archivedAt ) ) {
|
||||
$instance->archived_class = '';
|
||||
$instance->archiveBtn = '
|
||||
<a href="{ROOT_URL}bookmarks/archiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-outline-info">
|
||||
<i class="fa fa-fw fa-briefcase"></i>
|
||||
</a>';
|
||||
} else {
|
||||
$instance->archived_class = 'link-archived';
|
||||
$instance->archiveBtn = '
|
||||
<a href="{ROOT_URL}bookmarks/unarchiveBookmark/'.$instance->ID.'" class="btn btn-sm btn-outline-secondary">
|
||||
<i class="fa fa-fw fa-briefcase"></i>
|
||||
|
@ -1,10 +1,31 @@
|
||||
{LOOP}
|
||||
<div class="col-xlg-6 col-lg-6 col-md-6 col-sm-6 bookmark-card">
|
||||
<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" data-bs-target="#Collapse{ID}" data-bs-toggle="collapse" aria-expanded="true" aria-controls="Collapse{ID}">
|
||||
<span class="h4 text-center">{title}</span>
|
||||
<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">
|
||||
@ -12,12 +33,12 @@
|
||||
</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"><i class="fa fa-fw fa-plus"></i></a></td>
|
||||
<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>
|
||||
<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/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-warning edit-mode"><i class="fa fa-fw fa-pencil"></i></a></td>
|
||||
<a href="{ROOT_URL}bookmarks/deleteFolder/{ID}" class="btn btn-sm btn-danger edit-mode"><i class="fa fa-fw fa-trash"></i></a></td>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,14 +1,30 @@
|
||||
|
||||
{LOOP}
|
||||
<li class="list-group-item context-main-b bg-{color}">
|
||||
<li class="list-group-item context-main-b bg-{color} {hidden_class} {archived_class}">
|
||||
<a href="{ROOT_URL}bookmarks/bookmark/{ID}" class="context-main">{iconHtml}</a>
|
||||
<a href="{url}"> {title}</a>
|
||||
<span class="float-end">
|
||||
{hideBtn}
|
||||
{archiveBtn}
|
||||
{publish}
|
||||
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning"><i class="fa fa-fw fa-pencil"></i></a>
|
||||
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></a>
|
||||
<span class="btn-hideshow">{hideBtn}</span>
|
||||
<span class="btn-archive">{archiveBtn}</span>
|
||||
<span class="btn-publish">{publish}</span>
|
||||
<a href="{ROOT_URL}bookmarks/editBookmark/{ID}" class="btn btn-sm btn-warning edit-mode"><i class="fa fa-fw fa-pencil"></i></a>
|
||||
<a href="{ROOT_URL}bookmarks/deleteBookmark/{ID}" class="btn btn-sm btn-danger edit-mode"><i class="fa fa-fw fa-trash"></i></a>
|
||||
<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}
|
||||
|
@ -9,7 +9,7 @@
|
||||
<span class="text-center px-5">{privacyBadge}</span>
|
||||
<span class="h4 text-center px-5">{title}</span>
|
||||
</span>
|
||||
<a class="btn btn-sm btn-primary btn-rounded" data-bs-toggle="modal" data-bs-target="#linkShare{ID}">
|
||||
<a class="btn btn-sm btn-primary btn-rounded btn-share" data-bs-toggle="modal" data-bs-target="#linkShare{ID}">
|
||||
<i class="fa fa-fw fa-share"></i>
|
||||
</a>
|
||||
</div>
|
||||
|
@ -4,7 +4,7 @@
|
||||
<a href="{url}"> {title}</a>{privacyBadge}
|
||||
<span class="float-end">
|
||||
{publish}
|
||||
<a class="btn btn-sm btn-primary" data-bs-toggle="modal" data-bs-target="#linkShare{ID}">
|
||||
<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">
|
||||
|
@ -12,6 +12,7 @@
|
||||
<div class="mb-4 mt-4">
|
||||
<div class="offset-md-1 col-10 py-3 context-main-bg">
|
||||
<legend class="text-center">Bookmarks</legend>
|
||||
{VIEW_OPTIONS}
|
||||
<hr>
|
||||
<div class="row g-3" data-masonry='{ "percentPosition": false }' id="bookmarkSort">
|
||||
{folderPanels}
|
||||
|
@ -10,7 +10,7 @@
|
||||
<tr>
|
||||
<th class="text-center" style="width: 80%">Title</th>
|
||||
<th style="width: 20%">
|
||||
<input type="checkbox" onchange="checkAll(this)" name="check.g" value="BF_[]"/>
|
||||
<input type="checkbox" onchange="checkAll(this)" name="check.g" value="BF_[]">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
59
app/plugins/bookmarks/views/nav/viewOptions.html
Normal file
59
app/plugins/bookmarks/views/nav/viewOptions.html
Normal file
@ -0,0 +1,59 @@
|
||||
<div class="container mt-3">
|
||||
<div class="card">
|
||||
<div class="card-header">
|
||||
<a class="btn btn-link text-decoration-none w-100" data-bs-toggle="collapse" href="#filterOptions" role="button" aria-expanded="false" aria-controls="filterOptions">
|
||||
<strong>Filter Options</strong>
|
||||
</a>
|
||||
</div>
|
||||
<div id="filterOptions" class="collapse">
|
||||
<div class="card-body">
|
||||
<!-- Edit Mode -->
|
||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
||||
<div class="me-3 fw-bold">Edit Mode:</div>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="editModeSwitch">
|
||||
<label class="form-check-label" for="editModeSwitch"></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Status Filters -->
|
||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
||||
<div class="me-3 fw-bold">Status:</div>
|
||||
<div class="form-check form-switch me-3">
|
||||
<input class="form-check-input" type="checkbox" id="showArchivedSwitch">
|
||||
<label class="form-check-label" for="showArchivedSwitch">Show Archived</label>
|
||||
</div>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="showHiddenSwitch">
|
||||
<label class="form-check-label" for="showHiddenSwitch">Show Hidden</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Buttons Filters -->
|
||||
<div class="d-flex align-items-center border p-2 rounded mb-3">
|
||||
<div class="me-3 fw-bold">Buttons:</div>
|
||||
<div class="form-check form-switch me-3">
|
||||
<input class="form-check-input" type="checkbox" id="archiveButtonSwitch">
|
||||
<label class="form-check-label" for="archiveButtonSwitch">Archive Button</label>
|
||||
</div>
|
||||
<div class="form-check form-switch me-3">
|
||||
<input class="form-check-input" type="checkbox" id="visibilityButtonSwitch">
|
||||
<label class="form-check-label" for="visibilityButtonSwitch">Visibility Button</label>
|
||||
</div>
|
||||
<div class="form-check form-switch me-3">
|
||||
<input class="form-check-input" type="checkbox" id="privacyButtonSwitch">
|
||||
<label class="form-check-label" for="privacyButtonSwitch">Privacy Button</label>
|
||||
</div>
|
||||
<div class="form-check form-switch me-3">
|
||||
<input class="form-check-input" type="checkbox" id="shareButtonSwitch">
|
||||
<label class="form-check-label" for="shareButtonSwitch">Share Button</label>
|
||||
</div>
|
||||
<div class="form-check form-switch">
|
||||
<input class="form-check-input" type="checkbox" id="addButtonSwitch">
|
||||
<label class="form-check-label" for="addButtonSwitch">Add Button</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
@ -14,7 +14,7 @@
|
||||
<th style="width: 5%"></th>
|
||||
<th style="width: 5%"></th>
|
||||
<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>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -64,8 +64,8 @@
|
||||
<div class="card-footer text-center">
|
||||
{ADMIN}
|
||||
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
||||
<INPUT type="hidden" name="F_" value="{ID}"/>
|
||||
<input type="hidden" name="token" value="{TOKEN}" />
|
||||
<INPUT type="hidden" name="F_" value="{ID}">
|
||||
<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>
|
||||
</form>
|
||||
{/ADMIN}
|
||||
|
@ -13,7 +13,7 @@
|
||||
<th style="width: 5%"></th>
|
||||
<th style="width: 5%"></th>
|
||||
<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>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -60,8 +60,8 @@
|
||||
<div class="card-footer text-center">
|
||||
{ADMIN}
|
||||
<form action="{ROOT_URL}admin/feedback/delete" method="post">
|
||||
<INPUT type="hidden" name="F_" value="{ID}"/>
|
||||
<input type="hidden" name="token" value="{TOKEN}" />
|
||||
<input type="hidden" name="F_" value="{ID}">
|
||||
<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>
|
||||
</form>
|
||||
{/ADMIN}
|
||||
|
@ -44,7 +44,7 @@ class Reviews extends Controller {
|
||||
self::$reviews = new Review;
|
||||
self::$categories = new ReviewCategory;
|
||||
Components::append( 'TEMPLATE_JS_INCLUDES', Template::parse('<script language="JavaScript" crossorigin="anonymous" type="text/javascript" src="{ROOT_URL}app/plugins/reviews/js/reviews.js"></script>' ) );
|
||||
Components::append( 'TEMPLATE_CSS_INCLUDES', Template::parse('<link rel="stylesheet" href="{ROOT_URL}app/plugins/reviews/css/reviews.css" />') );
|
||||
Components::append( 'TEMPLATE_CSS_INCLUDES', Template::parse('<link rel="stylesheet" href="{ROOT_URL}app/plugins/reviews/css/reviews.css">') );
|
||||
}
|
||||
|
||||
public function index() {
|
||||
@ -67,7 +67,7 @@ class Reviews extends Controller {
|
||||
$selectedCategory = $category->ID;
|
||||
Components::set(
|
||||
'reviewCategorySelect',
|
||||
'<input type="hidden" name="review_category_id" id="review_category_id" value="' . $selectedCategory . '" />'
|
||||
'<input type="hidden" name="review_category_id" id="review_category_id" value="' . $selectedCategory . '">'
|
||||
);
|
||||
}
|
||||
if ( ! Input::exists('submit') ) {
|
||||
|
@ -16,7 +16,7 @@
|
||||
<th style="width: 5%"></th>
|
||||
<th style="width: 5%"></th>
|
||||
<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>
|
||||
</tr>
|
||||
</thead>
|
||||
@ -54,6 +54,6 @@
|
||||
</table>
|
||||
<button name="submit" value="submit" type="submit" class="btn btn-sm btn-danger"><i class="fa fa-fw fa-trash"></i></button>
|
||||
</form>
|
||||
<br />
|
||||
<br>
|
||||
<a href="{ROOT_URL}admin/suggestions/clear">clear all</a>
|
||||
</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%">
|
||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.b" value="P_[]"/>
|
||||
<INPUT type="checkbox" onchange="checkAll(this)" name="check.b" value="P_[]">
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
@ -5,7 +5,7 @@
|
||||
</td>
|
||||
<td width="37" style="text-align: center; padding: 0 10px 0 10px;">
|
||||
<a href="{ROOT_ADDRESS}">
|
||||
<img src="{ROOT_ADDRESS}images/logoWhite.png" width="37" height="37" alt="{SITENAME}" border="0" style="height: auto;">
|
||||
<img src="{ROOT_ADDRESS}images/logo180.png" width="37" height="37" alt="{SITENAME}" border="0" style="height: auto;">
|
||||
</a>
|
||||
</td>
|
||||
<td width="37" style="text-align: center; padding: 0 10px 0 10px;">
|
||||
|
@ -103,7 +103,7 @@
|
||||
<div class="b-example-divider"></div>
|
||||
|
||||
<!-- Never Browse without it -->
|
||||
<div class="container px-4 py-5" id="hanging-icons" id="extension">
|
||||
<div class="container px-4 py-5" id="extension">
|
||||
<h2 class="pb-2 border-bottom">Never Browse without it</h2>
|
||||
<div class="row g-4 py-5 row-cols-1 row-cols-lg-3">
|
||||
<div class="col d-flex align-items-start">
|
||||
@ -240,14 +240,18 @@
|
||||
<td><i class="fa fa-fw fa-check"></i></td>
|
||||
<td><i class="fa fa-fw fa-check"></i></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<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>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row" class="text-start">Import/Export Features</th>
|
||||
<td></td>
|
||||
@ -298,6 +302,7 @@
|
||||
<li>Add / Manage your bookmarks</li>
|
||||
<li>Extensions for all major browsers</li>
|
||||
<li>Access from any device</li>
|
||||
<li>Share access with anyone</li>
|
||||
</ul>
|
||||
<a href="/register" class="mt-auto w-100 btn btn-lg btn-outline-primary">
|
||||
Sign-Up for Free
|
||||
|
Reference in New Issue
Block a user