V2 dev into master #21

Merged
andydixon merged 2 commits from v2-dev into master 2024-10-01 23:16:23 +02:00
49 changed files with 4834 additions and 3669 deletions
+2
View File
@@ -1,4 +1,5 @@
# NeoCMS # NeoCMS
## Version 2.0 ## Version 2.0
Version 2.0 is a complete rewrite to ensure we support the latest jQuery and TinyMCE GPL version. Version 2.0 is a complete rewrite to ensure we support the latest jQuery and TinyMCE GPL version.
@@ -16,6 +17,7 @@ To install:
* PHP 8 on Linux. None of that Windows Server crap * PHP 8 on Linux. None of that Windows Server crap
## Known Bugs ## Known Bugs
* Templating (New Page) not yet implemented * Templating (New Page) not yet implemented
* File (not images) uploads need to be implemented * File (not images) uploads need to be implemented
* Not completely tested * Not completely tested
+54 -2
View File
@@ -6,9 +6,61 @@ switch ($_REQUEST["action"]) {
case "save": case "save":
if (!empty($_POST['uri']) && !empty($_POST['content'])) { if (!empty($_POST['uri']) && !empty($_POST['content'])) {
$_SESSION['core']->saveContent($_POST['uri'], $_POST['content']); $_SESSION['core']->saveContent($_POST['uri'], $_POST['content']);
die("Page Updated."); echo 'Page Updated.';
} else { } else {
die('Unable to save page'); echo 'Unable to save page';
} }
break; break;
/**
* getTemplates AJAX call to get list of files
*/
case "getTemplates":
header('Content-type: application/json');
$files = array_diff(scandir("../templates/"), array('..', '.'));
$returnArray = [];
foreach ($files as $file) {
$returnArray[] = array("id" => $file, "name" => str_replace(array(".html", ".htm"), "", $file));
}
echo json_encode($returnArray);
break;
/**
* newPage AJAX call to take a template file and create a new page
*/
case "newPage":
header('Content-type: application/json');
$filename = str_replace("..", "", $_POST['filename']);
$template = str_replace("..", "", $_POST['template']);
if (!str_ends_with($filename, ".htm") && !str_ends_with($filename, ".html")) {
$filename .= ".html";
}
// Some vhosts can supply a trailing slash on DOCUMENT_ROOT so tidy it up
$destination = str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/" . $filename);
if (!file_exists("../templates/" . $template)) die(json_encode(array("error" => "Template not found")));
if (file_exists($destination)) die(json_encode(array("error" => "Page or file already exists")));
file_put_contents($destination, file_get_contents("../templates/" . $template));
if (!file_exists($destination)) die(json_encode(array("error" => "Template copy failed")));
echo json_encode(array("ok" => "DONE_THE_NEEDFUL", "url" => str_replace("//", "/", "/" . $filename)));
break;
case "getPages":
header('Content-type: application/json');
$it = new RecursiveDirectoryIterator("../../");
$returnArray = [];
foreach (new RecursiveIteratorIterator($it) as $file) {
// Strip document root from URI, so relative
$file = str_replace($_SERVER["DOCUMENT_ROOT"], "", $file->getRealPath());
if (!str_starts_with($file, "/cms/") && (str_ends_with($file, ".html") || str_ends_with($file, ".htm")))
$returnArray[] = array("name" => $file, "url" => $file);
}
echo json_encode($returnArray);
break;
} }
+69
View File
@@ -100,3 +100,72 @@ body {
position: relative; position: relative;
top: 1px; top: 1px;
} }
/**
New Page Modal
*/
#newPageDialog {
display: none;
}
.newpage-content {
padding: 20px;
background-color: #fefefe;
border: 1px solid #888;
width: 400px;
margin: auto;
}
.newpage-content form {
display: flex;
flex-direction: column;
}
.newpage-content label {
margin-bottom: 10px;
}
.newpage-content input[type="text"] {
margin-bottom: 20px;
padding: 5px;
}
#newPageForm label {
display: block;
}
/**
File List Modal
*/
#fileListDialog {
display: none;
}
.filelist-content {
padding: 20px;
background-color: #fefefe;
border: 1px solid #888;
width: 400px;
margin: auto;
}
#fileList {
list-style-type: none;
padding: 0;
}
#fileList li {
padding: 10px;
cursor: pointer;
background-color: #f0f0f0;
margin-bottom: 5px;
}
#fileList li:hover {
background-color: #e0e0e0;
}
+29 -1
View File
@@ -3,16 +3,20 @@ require_once "neoCMSCore.php";
require_once "init.php"; require_once "init.php";
?> ?>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html lang="en-gb">
<head> <head>
<title>NeoCMS</title> <title>NeoCMS</title>
<!-- Include jQuery --> <!-- Include jQuery -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://code.jquery.com/ui/1.14.0/jquery-ui.min.js" crossorigin="anonymous"></script>
<!-- Include TinyMCE --> <!-- Include TinyMCE -->
<script src="/cms/tinymce/tinymce.min.js"></script> <script src="/cms/tinymce/tinymce.min.js"></script>
<!-- Include Bootstrap for modal --> <!-- Include Bootstrap for modal -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<!-- Include JqueryUI CSS -->
<link rel="stylesheet" href="https://code.jquery.com/ui/1.14.0/themes/base/jquery-ui.css">
<!-- Include editor styles --> <!-- Include editor styles -->
<link rel="stylesheet" href="/cms/css/editor.css"> <link rel="stylesheet" href="/cms/css/editor.css">
@@ -58,6 +62,30 @@ require_once "init.php";
</div> </div>
</div> </div>
<!--New Page modal -->
<div id="newPageDialog" title="Create a New Page">
<div class="newpage-content">
<form id="newPageForm">
<div id="radioList">
<!-- Radio buttons will be populated here -->
</div>
<label for="filename">New Filename:</label>
<input type="text" id="filename" name="filename" placeholder="Enter new filename" required>
<button type="submit">Submit</button>
</form>
</div>
</div>
<!-- Page list modal -->
<div id="fileListDialog" title="Select an Existing Page">
<div class="filelist-content">
<ul id="fileList">
<!-- File names will be populated here -->
</ul>
</div>
</div>
<script src="/cms/js/cms.js"></script> <script src="/cms/js/cms.js"></script>
</body> </body>
+112 -2
View File
@@ -51,6 +51,7 @@ $(document).ready(function () {
}); });
}); });
// Save changes made to a div, but not save to the file on the server
$('#saveBtn').click(function () { $('#saveBtn').click(function () {
// Get the data from TinyMCE // Get the data from TinyMCE
var data = tinymce.get('editor').getContent(); var data = tinymce.get('editor').getContent();
@@ -69,13 +70,122 @@ $(document).ready(function () {
} }
}); });
// Handle Saving changes to the page
$('#savePage').click(() => { $('#savePage').click(() => {
$.post("./controller/", { $.post("/cms/controller/", {
action: "save", action: "save",
uri: $('#frameContainer').contents().get(0).location.pathname, uri: $('#frameContainer').contents().get(0).location.pathname,
content: new XMLSerializer().serializeToString($('#frameContainer').contents().get(0)) content: new XMLSerializer().serializeToString($('#frameContainer').contents().get(0))
}, function (data) { }, function (data) {
alert(data) // alert(data)
}); });
}); });
// Show dialog for page templates
$("#newPage").click(function () {
loadListOfTemplates(); // Call the function to load items when the modal is opened
$("#newPageDialog").dialog({
modal: true,
width: 500,
buttons: {
Close: function () {
$(this).dialog("close");
}
}
});
});
// Handle form submission for creating a new page
$("#newPageForm").submit(function (event) {
event.preventDefault(); // Prevent the default form submission
let selectedItemId = $('input[name="item"]:checked').val();
let filename = $("#filename").val();
$.ajax({
url: "/cms/controller/?action=newPage",
method: "POST",
data: {
template: selectedItemId,
filename: filename
},
success: function (response) {
if (typeof response.error != "undefined") {
alert(response.error);
} else {
$('#frameContainer').contents().get(0).location.href = response.url;
$("#newPageForm").dialog("close"); // Close the modal on success
}
},
error: function () {
alert('Failed to create the new page.');
}
});
});
// Function to load the items via an AJAX GET request and populate the radio buttons for page templates
function loadListOfTemplates() {
$.ajax({
url: "/cms/controller/?action=getTemplates",
method: "GET",
dataType: "json",
success: function (data) {
let radioList = $('#radioList');
radioList.empty(); // Clear previous content
data.forEach(function (item, index) {
radioList.append(`
<label>
<input type="radio" name="item" value="${item.id}" ${index === 0 ? 'checked' : ''}>
${item.name}
</label>
`);
});
},
error: function () {
alert('Failed to load templates.');
}
});
}
// Function to load the list of filenames via AJAX
function loadListOfPages() {
$.ajax({
url: "/cms/controller/?action=getPages", // Replace with your actual API endpoint
method: "GET",
dataType: "json",
success: function (data) {
let fileList = $('#fileList');
fileList.empty(); // Clear previous list
data.forEach(function (file) {
fileList.append(`<li data-url="${file.url}">${file.name}</li>`);
});
// Add click event to list items to redirect
$("#fileList li").click(function () {
const fileUrl = $(this).data("url");
$('#frameContainer').contents().get(0).location.href = fileUrl; // Redirect to the clicked file's URL
$("#fileListDialog").dialog("close"); // Close the modal
});
},
error: function () {
alert('Failed to load file list.');
}
});
}
// Handle 'Select Page' button
$("#selectPage").click(function () {
loadListOfPages(); // Call function to load the file list
$("#fileList").dialog({
modal: true,
width: 500,
buttons: {
Close: function () {
$(this).dialog("close");
}
}
});
});
}); });
+10 -3
View File
@@ -4,8 +4,8 @@ require_once "../init.php";
// Initialize error message variable // Initialize error message variable
$error = ''; $error = '';
if(isset($_POST['username']) && isset($_POST['password'])){ if (isset($_POST['username']) && isset($_POST['password'])) {
if(!$_SESSION['core']->login($_POST['username'],$_POST['password'])) { if (!$_SESSION['core']->login($_POST['username'], $_POST['password'])) {
$error = "Invalid username or password"; $error = "Invalid username or password";
} else { } else {
header("Location:/cms/"); header("Location:/cms/");
@@ -24,24 +24,28 @@ if(isset($_POST['username']) && isset($_POST['password'])){
font-family: Arial, sans-serif; font-family: Arial, sans-serif;
background-color: #eef1f5; background-color: #eef1f5;
} }
.login-container { .login-container {
width: 350px; width: 350px;
margin: 100px auto; margin: 100px auto;
padding: 40px; padding: 40px;
background-color: #ffffff; background-color: #ffffff;
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 10px rgba(0,0,0,0.1); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
} }
.login-container h2 { .login-container h2 {
text-align: center; text-align: center;
margin-bottom: 30px; margin-bottom: 30px;
color: #333333; color: #333333;
} }
.login-container label { .login-container label {
display: block; display: block;
margin-bottom: 8px; margin-bottom: 8px;
color: #555555; color: #555555;
} }
.login-container input[type="text"], .login-container input[type="text"],
.login-container input[type="password"] { .login-container input[type="password"] {
width: 100%; width: 100%;
@@ -51,6 +55,7 @@ if(isset($_POST['username']) && isset($_POST['password'])){
border-radius: 4px; border-radius: 4px;
box-sizing: border-box; box-sizing: border-box;
} }
.login-container button { .login-container button {
width: 100%; width: 100%;
padding: 12px; padding: 12px;
@@ -61,9 +66,11 @@ if(isset($_POST['username']) && isset($_POST['password'])){
font-size: 16px; font-size: 16px;
cursor: pointer; cursor: pointer;
} }
.login-container button:hover { .login-container button:hover {
background-color: #005bb5; background-color: #005bb5;
} }
.error-message { .error-message {
color: #ff4d4d; color: #ff4d4d;
margin-bottom: 20px; margin-bottom: 20px;
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to NeoCMS</title>
<link href="/cms/css/welcome.style.css" rel="stylesheet">
</head>
<body>
<header>
<img alt="Application Logo" class="logo" src="/cms/img/welcomeLogo.png">
</header>
<main>
<h1>Welcome to NeoCMS</h1>
<p>This is another example template, found in /cms/templates/ - remove me and replace me with your own site
templates!</p>
<p class="editable">
This box is editable!<br/>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Quisque sit amet accumsan tortor. Itaque earum rerum hic tenetur a sapiente delectus.
</p>
</main>
<footer>
<p>&copy; 2024 Andy Dixon</p>
</footer>
</body>
</html>
+26
View File
@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Welcome to NeoCMS</title>
<link href="/cms/css/welcome.style.css" rel="stylesheet">
</head>
<body>
<header>
<img alt="Application Logo" class="logo" src="/cms/img/welcomeLogo.png">
</header>
<main>
<h1>Welcome to NeoCMS</h1>
<p>This is an example template, found in /cms/templates/ - remove me and replace me with your own site
templates!</p>
<p class="editable">
This box is editable!<br/>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Quisque sit amet accumsan tortor. Itaque earum rerum hic tenetur a sapiente delectus.
</p>
</main>
<footer>
<p>&copy; 2024 Andy Dixon</p>
</footer>
</body>
</html>
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar',
'<h1>بدء التنقل بواسطة لوحة المفاتيح</h1>\n' + '<h1>بدء التنقل بواسطة لوحة المفاتيح</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>التركيز على شريط القوائم</dt>\n' + ' <dt>التركيز على شريط القوائم</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG', tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG',
'<h1>Начало на навигацията с клавиатурата</h1>\n' + '<h1>Начало на навигацията с клавиатурата</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Фокусиране върху лентата с менюта</dt>\n' + ' <dt>Фокусиране върху лентата с менюта</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca',
'<h1>Inici de la navegació amb el teclat</h1>\n' + '<h1>Inici de la navegació amb el teclat</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Enfocar la barra de menús</dt>\n' + ' <dt>Enfocar la barra de menús</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs', tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs',
'<h1>Začínáme navigovat pomocí klávesnice</h1>\n' + '<h1>Začínáme navigovat pomocí klávesnice</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Přejít na řádek nabídek</dt>\n' + ' <dt>Přejít na řádek nabídek</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.da', tinymce.Resource.add('tinymce.html-i18n.help-keynav.da',
'<h1>Start tastaturnavigation</h1>\n' + '<h1>Start tastaturnavigation</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokuser på menulinjen</dt>\n' + ' <dt>Fokuser på menulinjen</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.de', tinymce.Resource.add('tinymce.html-i18n.help-keynav.de',
'<h1>Grundlagen der Tastaturnavigation</h1>\n' + '<h1>Grundlagen der Tastaturnavigation</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokus auf Menüleiste</dt>\n' + ' <dt>Fokus auf Menüleiste</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.el', tinymce.Resource.add('tinymce.html-i18n.help-keynav.el',
'<h1>Έναρξη πλοήγησης μέσω πληκτρολογίου</h1>\n' + '<h1>Έναρξη πλοήγησης μέσω πληκτρολογίου</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Εστίαση στη γραμμή μενού</dt>\n' + ' <dt>Εστίαση στη γραμμή μενού</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.en', tinymce.Resource.add('tinymce.html-i18n.help-keynav.en',
'<h1>Begin keyboard navigation</h1>\n' + '<h1>Begin keyboard navigation</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Focus the Menu bar</dt>\n' + ' <dt>Focus the Menu bar</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.es', tinymce.Resource.add('tinymce.html-i18n.help-keynav.es',
'<h1>Iniciar la navegación con el teclado</h1>\n' + '<h1>Iniciar la navegación con el teclado</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Enfocar la barra de menús</dt>\n' + ' <dt>Enfocar la barra de menús</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu', tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu',
'<h1>Hasi teklatuaren nabigazioa</h1>\n' + '<h1>Hasi teklatuaren nabigazioa</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokuratu menu-barra</dt>\n' + ' <dt>Fokuratu menu-barra</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa', tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa',
'<h1>شروع پیمایش صفحه‌کلید</h1>\n' + '<h1>شروع پیمایش صفحه‌کلید</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>تمرکز بر نوار منو</dt>\n' + ' <dt>تمرکز بر نوار منو</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi', tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi',
'<h1>Näppäimistönavigoinnin aloittaminen</h1>\n' + '<h1>Näppäimistönavigoinnin aloittaminen</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Siirrä kohdistus valikkopalkkiin</dt>\n' + ' <dt>Siirrä kohdistus valikkopalkkiin</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR', tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR',
'<h1>Débuter la navigation au clavier</h1>\n' + '<h1>Débuter la navigation au clavier</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Cibler la barre du menu</dt>\n' + ' <dt>Cibler la barre du menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL', tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL',
'<h1>התחל ניווט במקלדת</h1>\n' + '<h1>התחל ניווט במקלדת</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>התמקד בשורת התפריטים</dt>\n' + ' <dt>התמקד בשורת התפריטים</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi', tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi',
'<h1>कीबोर्ड नेविगेशन शुरू करें</h1>\n' + '<h1>कीबोर्ड नेविगेशन शुरू करें</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>मेन्यू बार पर फ़ोकस करें</dt>\n' + ' <dt>मेन्यू बार पर फ़ोकस करें</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr', tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr',
'<h1>Početak navigacije na tipkovnici</h1>\n' + '<h1>Početak navigacije na tipkovnici</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokusiranje trake izbornika</dt>\n' + ' <dt>Fokusiranje trake izbornika</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU', tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU',
'<h1>Billentyűzetes navigáció indítása</h1>\n' + '<h1>Billentyűzetes navigáció indítása</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fókusz a menüsávra</dt>\n' + ' <dt>Fókusz a menüsávra</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.id', tinymce.Resource.add('tinymce.html-i18n.help-keynav.id',
'<h1>Memulai navigasi keyboard</h1>\n' + '<h1>Memulai navigasi keyboard</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokus pada bilah Menu</dt>\n' + ' <dt>Fokus pada bilah Menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.it', tinymce.Resource.add('tinymce.html-i18n.help-keynav.it',
'<h1>Iniziare la navigazione tramite tastiera</h1>\n' + '<h1>Iniziare la navigazione tramite tastiera</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Impostare lo stato attivo per la barra dei menu</dt>\n' + ' <dt>Impostare lo stato attivo per la barra dei menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja',
'<h1>キーボード ナビゲーションの開始</h1>\n' + '<h1>キーボード ナビゲーションの開始</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>メニュー バーをフォーカス</dt>\n' + ' <dt>メニュー バーをフォーカス</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk', tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk',
'<h1>Пернетақта навигациясын бастау</h1>\n' + '<h1>Пернетақта навигациясын бастау</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Мәзір жолағын фокустау</dt>\n' + ' <dt>Мәзір жолағын фокустау</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR',
'<h1>키보드 탐색 시작</h1>\n' + '<h1>키보드 탐색 시작</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>메뉴 모음 포커스 표시</dt>\n' + ' <dt>메뉴 모음 포커스 표시</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms',
'<h1>Mulakan navigasi papan kekunci</h1>\n' + '<h1>Mulakan navigasi papan kekunci</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokus bar Menu</dt>\n' + ' <dt>Fokus bar Menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO', tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO',
'<h1>Starte tastaturnavigering</h1>\n' + '<h1>Starte tastaturnavigering</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Utheve menylinjen</dt>\n' + ' <dt>Utheve menylinjen</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl', tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl',
'<h1>Toetsenbordnavigatie starten</h1>\n' + '<h1>Toetsenbordnavigatie starten</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Focus op de menubalk instellen</dt>\n' + ' <dt>Focus op de menubalk instellen</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl', tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl',
'<h1>Początek nawigacji przy użyciu klawiatury</h1>\n' + '<h1>Początek nawigacji przy użyciu klawiatury</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Ustaw fokus na pasek menu</dt>\n' + ' <dt>Ustaw fokus na pasek menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR', tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR',
'<h1>Iniciar navegação pelo teclado</h1>\n' + '<h1>Iniciar navegação pelo teclado</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Foco na barra de menus</dt>\n' + ' <dt>Foco na barra de menus</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT', tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT',
'<h1>Iniciar navegação com teclado</h1>\n' + '<h1>Iniciar navegação com teclado</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Foco na barra de menu</dt>\n' + ' <dt>Foco na barra de menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro',
'<h1>Începeți navigarea de la tastatură</h1>\n' + '<h1>Începeți navigarea de la tastatură</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Focalizare pe bara de meniu</dt>\n' + ' <dt>Focalizare pe bara de meniu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru', tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru',
'<h1>Начните управление с помощью клавиатуры</h1>\n' + '<h1>Начните управление с помощью клавиатуры</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Фокус на панели меню</dt>\n' + ' <dt>Фокус на панели меню</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk', tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk',
'<h1>Začíname s navigáciou pomocou klávesnice</h1>\n' + '<h1>Začíname s navigáciou pomocou klávesnice</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Prejsť na panel s ponukami</dt>\n' + ' <dt>Prejsť na panel s ponukami</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI', tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI',
'<h1>Začetek krmarjenja s tipkovnico</h1>\n' + '<h1>Začetek krmarjenja s tipkovnico</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokus na menijsko vrstico</dt>\n' + ' <dt>Fokus na menijsko vrstico</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE', tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE',
'<h1>Påbörja tangentbordsnavigering</h1>\n' + '<h1>Påbörja tangentbordsnavigering</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Fokusera på menyraden</dt>\n' + ' <dt>Fokusera på menyraden</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH', tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH',
'<h1>เริ่มต้นการนำทางด้วยแป้นพิมพ์</h1>\n' + '<h1>เริ่มต้นการนำทางด้วยแป้นพิมพ์</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>โฟกัสที่แถบเมนู</dt>\n' + ' <dt>โฟกัสที่แถบเมนู</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr', tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr',
'<h1>Klavyeyle gezintiyi başlatma</h1>\n' + '<h1>Klavyeyle gezintiyi başlatma</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Menü çubuğuna odaklan</dt>\n' + ' <dt>Menü çubuğuna odaklan</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk', tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk',
'<h1>Початок роботи з навігацією за допомогою клавіатури</h1>\n' + '<h1>Початок роботи з навігацією за допомогою клавіатури</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Фокус на рядок меню</dt>\n' + ' <dt>Фокус на рядок меню</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi', tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi',
'<h1>Bắt đầu điều hướng bàn phím</h1>\n' + '<h1>Bắt đầu điều hướng bàn phím</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>Tập trung vào thanh menu</dt>\n' + ' <dt>Tập trung vào thanh menu</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN', tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN',
'<h1>开始键盘导航</h1>\n' + '<h1>开始键盘导航</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>使菜单栏处于焦点</dt>\n' + ' <dt>使菜单栏处于焦点</dt>\n' +
@@ -1,5 +1,5 @@
tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW', tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW',
'<h1>開始鍵盤瀏覽</h1>\n' + '<h1>開始鍵盤瀏覽</h1>\n' +
'\n' + '\n' +
'<dl>\n' + '<dl>\n' +
' <dt>跳至功能表列</dt>\n' + ' <dt>跳至功能表列</dt>\n' +
+915 -76
View File
File diff suppressed because it is too large Load Diff
+9 -3
View File
@@ -2,7 +2,7 @@
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Welcome to Our Application</title> <title>Welcome to NeoCMS</title>
<link href="/cms/css/welcome.style.css" rel="stylesheet"> <link href="/cms/css/welcome.style.css" rel="stylesheet">
</head> </head>
<body> <body>
@@ -11,9 +11,15 @@
</header> </header>
<main> <main>
<h1>Welcome to NeoCMS</h1> <h1>Welcome to NeoCMS</h1>
<p>Put some content in here</p> <p>Introducing a cutting-edge CMS designed to effortlessly integrate with your existing flat-file website—no
database required. Our databaseless WYSIWYG content management system empowers you to create, edit, and manage
content visually, all while maintaining the simplicity and speed of a flat-file setup. Enjoy a seamless
experience that combines the flexibility of a modern CMS with the efficiency of a static website, allowing you
to focus on content without the complexity of database management. Perfect for developers and creators looking
to streamline workflows without sacrificing control or performance.</p>
<p class="editable"> <p class="editable">
This box is editable!<br/> This box is editable! Just click me to edit me!<br/>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Quisque sit amet accumsan tortor. Itaque earum rerum hic tenetur a sapiente delectus. Quisque sit amet accumsan tortor. Itaque earum rerum hic tenetur a sapiente delectus.
</p> </p>