Обновлена логика центральных блоков: теперь поддерживается несколько блоков
This commit is contained in:
@@ -15,81 +15,11 @@
|
|||||||
<content tclass="btitle" bclass="bfloat">
|
<content tclass="btitle" bclass="bfloat">
|
||||||
<ru><![CDATA[
|
<ru><![CDATA[
|
||||||
<div>
|
<div>
|
||||||
текст текст текст текст текст текст текст текст текст текст текст тексритчрсотат текст текст текст текст </div>
|
test1цыкцып
|
||||||
<div>
|
|
||||||
текст текст текст текст текыККПАФЦКАКПАМст текст текст текст текст текст текст текст урпкцуептекст текст текст
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст
|
test2
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<hr style="height: 5px; width: 50%; background: rgb(0, 0, 0); border: 0px;">
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<table style="width: 50%; margin: 1px; float: left; border: 1px solid rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-collapse: collapse;">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div><br>
|
|
||||||
</div>
|
|
||||||
]]></ru>
|
]]></ru>
|
||||||
<lv><![CDATA[
|
<lv><![CDATA[
|
||||||
<p>Uz šo brīdi šeit ne kā nav</p>
|
<p>Uz šo brīdi šeit ne kā nav</p>
|
||||||
|
|||||||
@@ -8,24 +8,12 @@
|
|||||||
</general>
|
</general>
|
||||||
<!--Содержание страницы-->
|
<!--Содержание страницы-->
|
||||||
<!--Левые блоки-->
|
<!--Левые блоки-->
|
||||||
<lblock>
|
<lblock/>
|
||||||
<block url="/plugin/foto/" title="df" tclass="btitle" bclass="bfloat"/>
|
|
||||||
<block url="/plugin/plugintest/" title="кнерцу" tclass="btitle" bclass="bfloat"/>
|
|
||||||
<block url="/plugin/foto/" title="цкпм" tclass="btitle" bclass="bfloat"/>
|
|
||||||
</lblock>
|
|
||||||
<!--Правые блоки-->
|
<!--Правые блоки-->
|
||||||
<rblock>
|
<rblock/>
|
||||||
<block url="/plugin/plugintest/" title="a5ysd" tclass="btitle" bclass="bfloat"/>
|
|
||||||
</rblock>
|
|
||||||
<!--Текст страницы-->
|
<!--Текст страницы-->
|
||||||
<content tclass="btitle" bclass="bfloat">
|
<content tclass="btitle" bclass="bfloat">
|
||||||
<ru><![CDATA[
|
<ru/>
|
||||||
<!--?php
|
|
||||||
header('Content-Type: text/html; charset=utf-8');
|
|
||||||
readfile(__DIR__ . '/DgrmJS-main/src/index.html');
|
|
||||||
?-->
|
|
||||||
text
|
|
||||||
]]></ru>
|
|
||||||
<lv><![CDATA[
|
<lv><![CDATA[
|
||||||
echo file_get_contents(__DIR__ . '/DgrmJS-main/src/index.html');
|
echo file_get_contents(__DIR__ . '/DgrmJS-main/src/index.html');
|
||||||
]]></lv>
|
]]></lv>
|
||||||
|
|||||||
@@ -8,95 +8,18 @@
|
|||||||
</general>
|
</general>
|
||||||
<!--Содержание страницы-->
|
<!--Содержание страницы-->
|
||||||
<!--Левые блоки-->
|
<!--Левые блоки-->
|
||||||
<lblock>
|
<lblock/>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</lblock>
|
|
||||||
<!--Правые блоки-->
|
<!--Правые блоки-->
|
||||||
<rblock>
|
<rblock/>
|
||||||
|
|
||||||
</rblock>
|
|
||||||
<!--Текст страницы-->
|
<!--Текст страницы-->
|
||||||
<content tclass="btitle" bclass="bfloat">
|
<content tclass="btitle" bclass="bfloat">
|
||||||
<ru><![CDATA[
|
<ru>
|
||||||
<div>
|
<![CDATA[<div>
|
||||||
текст текст текст текст текст текст текст текст текст текст текст тексритчрсотат текст текст текст текст </div>
|
test1цыуквацыфавп
|
||||||
<div>
|
</div>]]><![CDATA[<div>
|
||||||
текст текст текст текст текыККПАФЦКАКПАМст текст текст текст текст текст текст текст урпкцуептекст текст текст
|
test2
|
||||||
</div>
|
</div>]]>
|
||||||
<div>
|
</ru>
|
||||||
текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст текст
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<hr style="height: 5px; width: 50%; background: rgb(0, 0, 0); border: 0px;">
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<table style="width: 50%; margin: 1px; float: left; border: 1px solid rgb(0, 0, 0); background-color: rgb(255, 255, 255); border-collapse: collapse;">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
<td style="padding: 1px; border: 1px solid rgb(0, 0, 0);">
|
|
||||||
</td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<br>
|
|
||||||
</div>
|
|
||||||
<div><br>
|
|
||||||
</div>
|
|
||||||
]]></ru>
|
|
||||||
<lv><![CDATA[
|
<lv><![CDATA[
|
||||||
<p> cb <b>bbvcdjyfdyhyhdывепиwstdg</b></p>
|
<p> cb <b>bbvcdjyfdyhyhdывепиwstdg</b></p>
|
||||||
]]></lv>
|
]]></lv>
|
||||||
|
|||||||
@@ -533,12 +533,12 @@ if(isPhone){
|
|||||||
|
|
||||||
/** @brief Флаг, указывающий, были ли изменения в контенте */
|
/** @brief Флаг, указывающий, были ли изменения в контенте */
|
||||||
window.contentIsEdit = false;
|
window.contentIsEdit = false;
|
||||||
if (document.getElementById("content")) {
|
if (document.querySelectorAll(".content").length) {
|
||||||
document.getElementById("content").addEventListener("input", function() {
|
document.querySelectorAll(".content").forEach(el => {
|
||||||
window.contentIsEdit = true;
|
el.addEventListener("input", () => window.contentIsEdit = true);
|
||||||
|
const observer = new MutationObserver(() => window.contentIsEdit = true);
|
||||||
|
observer.observe(el, { childList: true, subtree: true });
|
||||||
});
|
});
|
||||||
const observer = new MutationObserver(() => window.contentIsEdit = true);
|
|
||||||
observer.observe(document.getElementById("content"), { childList: true, subtree: true });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @brief Очередь сообщений для отображения */
|
/** @brief Очередь сообщений для отображения */
|
||||||
@@ -738,8 +738,11 @@ let cou=1;
|
|||||||
* @brief Показать/скрыть HTML-код страницы в textarea
|
* @brief Показать/скрыть HTML-код страницы в textarea
|
||||||
*/
|
*/
|
||||||
function showHtmlCode() {
|
function showHtmlCode() {
|
||||||
|
let contents = document.getElementsByClassName("content");
|
||||||
if (cou==1) {
|
if (cou==1) {
|
||||||
document.getElementById("tex").value=document.getElementById("content").innerHTML;
|
let combined = "";
|
||||||
|
for (let i=0; i<contents.length; i++) combined += "<![CDATA[" + contents[i].innerHTML + "]]>";
|
||||||
|
document.getElementById("tex").value = combined;
|
||||||
document.getElementById("tex").value = decodeHtmlEntities(document.getElementById("tex").value);
|
document.getElementById("tex").value = decodeHtmlEntities(document.getElementById("tex").value);
|
||||||
document.getElementById("tex").value = formatHTML(document.getElementById("tex").value);
|
document.getElementById("tex").value = formatHTML(document.getElementById("tex").value);
|
||||||
let sbe=document.getElementsByClassName("sb");
|
let sbe=document.getElementsByClassName("sb");
|
||||||
@@ -754,11 +757,18 @@ function showHtmlCode() {
|
|||||||
}
|
}
|
||||||
cou=2;
|
cou=2;
|
||||||
} else {
|
} else {
|
||||||
document.getElementById("content").innerHTML=document.getElementById("tex").value;
|
let text = document.getElementById("tex").value;
|
||||||
|
let split = text.match(/<!\[CDATA\[(.*?)\]\]>/gs);
|
||||||
|
if (split) {
|
||||||
|
for (let i=0; i<contents.length; i++) {
|
||||||
|
if (split[i]) contents[i].innerHTML = split[i].replace(/<!\[CDATA\[|\]\]>/g, '');
|
||||||
|
}
|
||||||
|
}
|
||||||
document.getElementById("tex").style.visibility="hidden";
|
document.getElementById("tex").style.visibility="hidden";
|
||||||
cou=1;
|
cou=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
window.showHtmlCode = showHtmlCode;
|
window.showHtmlCode = showHtmlCode;
|
||||||
|
|
||||||
/** @brief Флаг нового состояния страницы при сохранении */
|
/** @brief Флаг нового состояния страницы при сохранении */
|
||||||
@@ -783,8 +793,10 @@ window.saveChanges = saveChanges;
|
|||||||
*/
|
*/
|
||||||
function saveContentId() {
|
function saveContentId() {
|
||||||
if(cou==1) {
|
if(cou==1) {
|
||||||
document.getElementById("content").innerHTML = decodeHtmlEntities(document.getElementById("content").innerHTML);
|
let contents = document.getElementsByClassName("content");
|
||||||
document.getElementById("tex").value=document.getElementById("content").innerHTML;
|
let combined = "";
|
||||||
|
for (let i = 0; i < contents.length; i++) combined += "<![CDATA[" + contents[i].innerHTML.trim() + "]]>";
|
||||||
|
document.getElementById("tex").value = combined;
|
||||||
}
|
}
|
||||||
document.getElementById("tex").value = decodeHtmlEntities(document.getElementById("tex").value);
|
document.getElementById("tex").value = decodeHtmlEntities(document.getElementById("tex").value);
|
||||||
let saveContentIdData = document.getElementById("tex").value.trim();
|
let saveContentIdData = document.getElementById("tex").value.trim();
|
||||||
@@ -796,8 +808,8 @@ function saveContentId() {
|
|||||||
messageFunction("{{main_block_not_saved}}");
|
messageFunction("{{main_block_not_saved}}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Сохраняет данные подключённых плагинов (левой и правой колонок)
|
* @brief Сохраняет данные подключённых плагинов (левой и правой колонок)
|
||||||
*/
|
*/
|
||||||
@@ -897,11 +909,10 @@ function formatHTML(html) {
|
|||||||
*/
|
*/
|
||||||
window.saveContentIdHow = async function (currentPath) {
|
window.saveContentIdHow = async function (currentPath) {
|
||||||
if (cou == 1) {
|
if (cou == 1) {
|
||||||
document.getElementById("content").innerHTML = decodeHtmlEntities(document.getElementById("content").innerHTML);
|
let contents = Array.from(document.getElementsByClassName("content")).map(el => el.innerHTML.trim());
|
||||||
document.getElementById("tex").value = document.getElementById("content").innerHTML;
|
document.getElementById("tex").value = contents.map(c => `<![CDATA[${c}]]>`).join('');
|
||||||
}
|
}
|
||||||
document.getElementById("tex").value = decodeHtmlEntities(document.getElementById("tex").value);
|
let saveContentIdData = decodeHtmlEntities(document.getElementById("tex").value).trim();
|
||||||
let saveContentIdData = document.getElementById("tex").value.trim();
|
|
||||||
let nameFile = document.getElementById('saveHowName').value;
|
let nameFile = document.getElementById('saveHowName').value;
|
||||||
if (!nameFile.endsWith('.page.php')) {
|
if (!nameFile.endsWith('.page.php')) {
|
||||||
nameFile += '.page.php';
|
nameFile += '.page.php';
|
||||||
@@ -1315,17 +1326,47 @@ window.functionOpenPage = false;
|
|||||||
function getPage(newPath) {
|
function getPage(newPath) {
|
||||||
window.functionOpenPage = true;
|
window.functionOpenPage = true;
|
||||||
jsonrpcRequest("getPage", { newPath }).then(page => {
|
jsonrpcRequest("getPage", { newPath }).then(page => {
|
||||||
|
const centerFloat = document.querySelector('.center-float');
|
||||||
|
const oldBlocks = centerFloat.querySelectorAll('.bfloat');
|
||||||
|
|
||||||
|
oldBlocks.forEach(b => {
|
||||||
|
if (b.querySelector('.content')) {
|
||||||
|
const next = b.nextSibling;
|
||||||
|
if (next && next.nodeType === 1 && next.tagName === 'BR') next.remove();
|
||||||
|
if (next && next.nodeType === 3 && next.textContent.trim() === '') {
|
||||||
|
const next2 = next.nextSibling;
|
||||||
|
if (next2 && next2.nodeType === 1 && next2.tagName === 'BR') next2.remove();
|
||||||
|
}
|
||||||
|
b.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
page.content.forEach((c, i) => {
|
||||||
|
const placeholder = document.getElementById('news-placeholder');
|
||||||
|
if (i > 0) {
|
||||||
|
const br = document.createElement('br');
|
||||||
|
centerFloat.insertBefore(br, placeholder);
|
||||||
|
}
|
||||||
|
const block = document.createElement('div');
|
||||||
|
block.className = 'bfloat' + (i === 0 ? ' content1' : '');
|
||||||
|
block.style.fontSize = '1em';
|
||||||
|
const inner = document.createElement('div');
|
||||||
|
inner.className = 'content';
|
||||||
|
inner.innerHTML = c;
|
||||||
|
block.appendChild(inner);
|
||||||
|
centerFloat.insertBefore(block, placeholder);
|
||||||
|
});
|
||||||
|
|
||||||
document.getElementById("right-float").innerHTML = page.right;
|
document.getElementById("right-float").innerHTML = page.right;
|
||||||
document.getElementById("left-float").innerHTML = page.left;
|
document.getElementById("left-float").innerHTML = page.left;
|
||||||
document.getElementById("content").innerHTML = page.content;
|
|
||||||
document.getElementById("managerDiv").style.visibility = "hidden";
|
document.getElementById("managerDiv").style.visibility = "hidden";
|
||||||
// history.pushState(null, '', page.pagePath);
|
|
||||||
document.getElementById("mainTitle").innerHTML = "<i>{{new_file}}!</i>";
|
document.getElementById("mainTitle").innerHTML = "<i>{{new_file}}!</i>";
|
||||||
removePluginDom("manager")
|
removePluginDom("manager");
|
||||||
});
|
});
|
||||||
window.newPageFunValue = "";
|
window.newPageFunValue = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//обьявление функции для того, чтобы обращатся к ней из других файлов
|
//обьявление функции для того, чтобы обращатся к ней из других файлов
|
||||||
window.getPage = getPage;
|
window.getPage = getPage;
|
||||||
window.managerData = managerData;
|
window.managerData = managerData;
|
||||||
|
|||||||
@@ -3,5 +3,13 @@
|
|||||||
<sitename>RaspberryqePi</sitename>
|
<sitename>RaspberryqePi</sitename>
|
||||||
<slogan>Raspberry Pi</slogan>
|
<slogan>Raspberry Pi</slogan>
|
||||||
<index url='content/index' title='Sākuma lapa' name='index' template='rpi' PageMenu='0,1,2' users='' group=''>
|
<index url='content/index' title='Sākuma lapa' name='index' template='rpi' PageMenu='0,1,2' users='' group=''>
|
||||||
|
<page1 url="content/rpi/index" title="Новый ф6нрцуеыкеа" name="page1" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
||||||
|
<underpage1 url="content/rpi/index" title="Загловок" name="underpage1" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
||||||
|
</underpage1>
|
||||||
|
<underpage2 url="content/rpi/index" title="Загловок" name="underpage2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="SvgEditorM">
|
||||||
|
</underpage2>
|
||||||
|
<createSite url="data/createSite" title="Страница создание нового сайта" name="createSite" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm">
|
||||||
|
</createSite>
|
||||||
|
</page1>
|
||||||
</index>
|
</index>
|
||||||
</site>
|
</site>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<sitename>site</sitename>
|
<sitename>site</sitename>
|
||||||
<slogan>site</slogan>
|
<slogan>site</slogan>
|
||||||
<index url="content/index" title="Новый ф6нрцуеыке" name="index" template="start" PageMenu="0,0" users="" group="" news="" plugins="">
|
<index url="content/index" title="Новый ф6нрцуеыке" name="index" template="start" PageMenu="0,0" users="" group="" news="" plugins="">
|
||||||
<page1 url="content/rpi/index" title="Новый ф6нрцуеыкеа" name="page1" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
<page1 url="content/rpi/index" title="Новый файл" name="page1" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm,SvgEditorM,form_editor">
|
||||||
<underpage1 url="content/rpi/index" title="Загловок" name="underpage1" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
<underpage1 url="content/rpi/index" title="Загловок" name="underpage1" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
||||||
</underpage1>
|
</underpage1>
|
||||||
<underpage2 url="content/rpi/index" title="Загловок" name="underpage2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="SvgEditorM">
|
<underpage2 url="content/rpi/index" title="Загловок" name="underpage2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="SvgEditorM">
|
||||||
|
|||||||
@@ -307,17 +307,6 @@ function GetBlock ($BlockVar, $side) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return $Block;
|
return $Block;
|
||||||
|
|
||||||
// $Block.='<div class="'.$BlockVar[$i]['bclass'].'"><div class="bcont">ku ku</div></div>';
|
|
||||||
/*is_countable($$BlockVar) && count($BlockVar)
|
|
||||||
$Block = "";
|
|
||||||
if (is_countable($$BlockVar) && count($BlockVar) > 0){
|
|
||||||
$Block = "true";
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$Block = "false";
|
|
||||||
}
|
|
||||||
$Block = count($BlockVar);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -769,14 +758,14 @@ if ($RURLstr!='error'){
|
|||||||
function loadPluginsInCenterBlock() {
|
function loadPluginsInCenterBlock() {
|
||||||
global $_SESSION, $path, $config;
|
global $_SESSION, $path, $config;
|
||||||
if ($_SESSION['Login'] == 'true') {
|
if ($_SESSION['Login'] == 'true') {
|
||||||
$availablePlugins = ['dgrm', 'SvgEditorM'];
|
$availablePlugins = ['dgrm', 'SvgEditorM', 'form_editor'];
|
||||||
$pluginDir = $path . 'main_plugin/';
|
$pluginDir = $path . 'main_plugin/';
|
||||||
if (is_dir($pluginDir)) {
|
if (is_dir($pluginDir)) {
|
||||||
$dirs = array_diff(scandir($pluginDir), ['.', '..']);
|
$dirs = array_diff(scandir($pluginDir), ['.', '..']);
|
||||||
foreach ($dirs as $dir) {
|
foreach ($dirs as $dir) {
|
||||||
if (is_dir($pluginDir . $dir)) {
|
if (is_dir($pluginDir . $dir)) {
|
||||||
if (!in_array($dir, $availablePlugins) || strpos($config['page_plugins'] ?? '', $dir) !== false) {
|
if (!in_array($dir, $availablePlugins) || strpos($config['page_plugins'] ?? '', $dir) !== false) {
|
||||||
if ($dir === 'SvgEditorM' || $dir === 'dgrm') {
|
if ($dir === 'SvgEditorM' || $dir === 'dgrm' || $dir === 'form_editor') {
|
||||||
$html .= includePlugin(['plugin' => $dir]);
|
$html .= includePlugin(['plugin' => $dir]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -784,7 +773,6 @@ function loadPluginsInCenterBlock() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$html .= includePlugin(['plugin' => 'form_editor']);
|
|
||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
29
error.txt
29
error.txt
@@ -0,0 +1,29 @@
|
|||||||
|
<![CDATA[
|
||||||
|
<div>
|
||||||
|
test1цыкцып
|
||||||
|
</div>]]><![CDATA[
|
||||||
|
<div>
|
||||||
|
test2
|
||||||
|
</div>]]>
|
||||||
|
<![CDATA[
|
||||||
|
<div>
|
||||||
|
test1цыкцып
|
||||||
|
</div>]]><![CDATA[
|
||||||
|
<div>
|
||||||
|
test2
|
||||||
|
</div>]]>
|
||||||
|
Array
|
||||||
|
(
|
||||||
|
[0] => <div>
|
||||||
|
test1цыкцып
|
||||||
|
</div>
|
||||||
|
[1] => <div>
|
||||||
|
test2
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
|
||||||
|
<![CDATA[<div>
|
||||||
|
test1цыкцып
|
||||||
|
</div>]]><![CDATA[<div>
|
||||||
|
test2
|
||||||
|
</div>]]>
|
||||||
|
|||||||
17
index.php
17
index.php
@@ -7,7 +7,7 @@
|
|||||||
/** @brief Путь к текущей директории */
|
/** @brief Путь к текущей директории */
|
||||||
$path = dirname(__FILE__) . '/';
|
$path = dirname(__FILE__) . '/';
|
||||||
|
|
||||||
/* if(isset($_SESSION)) { file_put_contents($path . '/error.txt', "" . PHP_EOL, FILE_APPEND); }*/
|
/* file_put_contents($path . '/error.txt', "" . PHP_EOL, FILE_APPEND); */
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
@@ -150,7 +150,7 @@ if ($access) {
|
|||||||
$config['right'] = "<div id='right-float'>" . $config['right'] . "</div>";
|
$config['right'] = "<div id='right-float'>" . $config['right'] . "</div>";
|
||||||
|
|
||||||
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
|
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
|
||||||
$config['content'] = $xmlstr->content->{$config['lng']};
|
/* $config['content'] = $xmlstr->content->{$config['lng']}; */
|
||||||
} else {
|
} else {
|
||||||
if ($_SESSION['log_in']) {
|
if ($_SESSION['log_in']) {
|
||||||
$xmlstr = simplexml_load_file($path . 'content/adm/user.page.php');
|
$xmlstr = simplexml_load_file($path . 'content/adm/user.page.php');
|
||||||
@@ -161,7 +161,18 @@ if ($access) {
|
|||||||
$config['left'] = '';
|
$config['left'] = '';
|
||||||
$config['right'] = '';
|
$config['right'] = '';
|
||||||
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
|
$center = '<div class="center-float">' . GetBlock($xmlstr->cblock->block, 'center') . '<div>';
|
||||||
$config['content'] = $xmlstr->content->$config['lng'];
|
/* $config['content'] = $xmlstr->content->{$config['lng']}; */
|
||||||
|
}
|
||||||
|
|
||||||
|
$xmlString = file_get_contents($path . $config['page_url'] . ".page.php");
|
||||||
|
preg_match('#<' . $config['lng'] . '>(.*?)</' . $config['lng'] . '>#s', $xmlString, $tagMatch);
|
||||||
|
$config['content'] = '';
|
||||||
|
if (preg_match_all('#<!\[CDATA\[(.*?)\]\]>#s', $tagMatch[1], $matches)) {
|
||||||
|
foreach ($matches[1] as $i => $cdata) {
|
||||||
|
if ($i > 0)
|
||||||
|
$config['content'] .= "<br>";
|
||||||
|
$config['content'] .= '<div class="%cfloat%' . ($i == 0 ? ' content1' : '') . '"><div class="content">' . $cdata . '</div></div>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach ($config as $key=>$value) if ($key!="request_url")
|
foreach ($config as $key=>$value) if ($key!="request_url")
|
||||||
$config['content'] =str_replace('%'.$key.'%', $value, $config['content']);
|
$config['content'] =str_replace('%'.$key.'%', $value, $config['content']);
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
textarea {
|
textarea {
|
||||||
text-align: center;
|
/* text-align: center;
|
||||||
border: none;;
|
border: none;;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
padding-top: 0.8em;
|
padding-top: 0.8em;
|
||||||
@@ -69,7 +69,7 @@ a {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
resize: none;
|
resize: none;
|
||||||
line-height: 1em;
|
line-height: 1em;
|
||||||
caret-color: #fff;
|
caret-color: #fff; */
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-connect] { display: none; }
|
[data-connect] { display: none; }
|
||||||
|
|||||||
@@ -54,13 +54,13 @@ function basisVis() {
|
|||||||
editableElementsFun();
|
editableElementsFun();
|
||||||
let basis3 = document.getElementById('basis3');
|
let basis3 = document.getElementById('basis3');
|
||||||
let sideFloatClass = basis3 ? basis3.querySelectorAll('[style*="visibility: visible;"]') : null;
|
let sideFloatClass = basis3 ? basis3.querySelectorAll('[style*="visibility: visible;"]') : null;
|
||||||
if (!basis3 || !sideFloatClass || !editableElements || editableElements.length === 0) return;
|
if (!basis3 || !sideFloatClass || !window.editableElements || window.editableElements.length === 0) return;
|
||||||
elementsСhecked = [basis3, ...sideFloatClass, ...editableElements];
|
let elementsСhecked = [basis3, ...sideFloatClass, ...window.editableElements];
|
||||||
|
|
||||||
if (basis3.style.visibility === "visible") {
|
if (basis3.style.visibility === "visible") {
|
||||||
basis3.style.visibility = "hidden";
|
basis3.style.visibility = "hidden";
|
||||||
sessionStorage.setItem('basis3_visibility', 'hidden');
|
sessionStorage.setItem('basis3_visibility', 'hidden');
|
||||||
editableElements.forEach(function(element) {
|
window.editableElements.forEach(function(element) {
|
||||||
if (element) {
|
if (element) {
|
||||||
element.setAttribute("contenteditable", false);
|
element.setAttribute("contenteditable", false);
|
||||||
}
|
}
|
||||||
@@ -69,18 +69,18 @@ function basisVis() {
|
|||||||
sideFloatClass.forEach(function(element) {
|
sideFloatClass.forEach(function(element) {
|
||||||
element.style.visibility = "hidden";
|
element.style.visibility = "hidden";
|
||||||
});
|
});
|
||||||
for (let i = 0; i < editId.length; i++) {
|
for (let i = 0; i < editId.length; i++) {
|
||||||
editMode = -1;
|
editMode = -1;
|
||||||
if (document.getElementById(editId[i])) {
|
if (document.getElementById(editId[i])) {
|
||||||
document.getElementById(editId[i]).classList.remove('active');
|
document.getElementById(editId[i]).classList.remove('active');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
document.getElementById('bcbody').style.top = '0px';
|
document.getElementById('bcbody').style.top = '0px';
|
||||||
document.querySelectorAll('.bfloat').forEach(e=>e.style.fontSize='')
|
document.querySelectorAll('.bfloat').forEach(e => e.style.fontSize = '')
|
||||||
} else {
|
} else {
|
||||||
basis3.style.visibility = "visible";
|
basis3.style.visibility = "visible";
|
||||||
sessionStorage.setItem('basis3_visibility', 'visible');
|
sessionStorage.setItem('basis3_visibility', 'visible');
|
||||||
editableElements.forEach(function(element) {
|
window.editableElements.forEach(function(element) {
|
||||||
if (element) {
|
if (element) {
|
||||||
element.setAttribute("contenteditable", true);
|
element.setAttribute("contenteditable", true);
|
||||||
}
|
}
|
||||||
@@ -90,20 +90,20 @@ function basisVis() {
|
|||||||
basis3.style.top = '20%';
|
basis3.style.top = '20%';
|
||||||
basis3.style.transform = 'translate(0%, -20%)';
|
basis3.style.transform = 'translate(0%, -20%)';
|
||||||
document.getElementById('bcbody').style.top = '30px';
|
document.getElementById('bcbody').style.top = '30px';
|
||||||
document.querySelectorAll('.bfloat').forEach(e=>e.style.fontSize='1em')
|
document.querySelectorAll('.bfloat').forEach(e => e.style.fontSize = '1em')
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
window.basisVis = basisVis;
|
window.basisVis = basisVis;
|
||||||
|
|
||||||
/** @brief Сбор всех редактируемых элементов */
|
/** @brief Сбор всех редактируемых элементов */
|
||||||
function editableElementsFun() {
|
function editableElementsFun() {
|
||||||
let content = document.getElementById('content');
|
window.editableElements = [];
|
||||||
editableElements = document.querySelectorAll('.pluginEditable');
|
let contents = document.querySelectorAll('.content');
|
||||||
editableElements = Array.from(editableElements);
|
let pluginEls = document.querySelectorAll('.pluginEditable');
|
||||||
editableElements.push(content);
|
pluginEls = Array.from(pluginEls);
|
||||||
|
window.editableElements.push(...pluginEls, ...contents);
|
||||||
|
|
||||||
editableElements.forEach(function(element) {
|
window.editableElements.forEach(function(element) {
|
||||||
if (!element) {
|
if (!element) {
|
||||||
console.log("Element " + element + " not found.");
|
console.log("Element " + element + " not found.");
|
||||||
return;
|
return;
|
||||||
@@ -111,31 +111,28 @@ function editableElementsFun() {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
addEventListener("LoadeditorJs", function()
|
addEventListener("LoadeditorJs", function()
|
||||||
{
|
{
|
||||||
|
|
||||||
let te=document.getElementById("tex"); // Ссылка на текстовое поле
|
let te=document.getElementById("tex"); // Ссылка на текстовое поле
|
||||||
let tex=document.getElementById("tex"); // Ссылка на стили текстового поля
|
let tex=document.getElementById("tex"); // Ссылка на стили текстового поля
|
||||||
|
|
||||||
if (document.getElementById("content") == "") {
|
// Передаём содержимое пустых блоков в поле
|
||||||
te.value=document.getElementById("content").innerHTML; // Передача данных из области контента в текстовое поле
|
document.querySelectorAll('.content').forEach(el => {
|
||||||
}
|
if (!el.innerHTML) te.value = el.innerHTML;
|
||||||
|
});
|
||||||
|
|
||||||
// Символы клавиш со знаками препинания или перевода строки
|
// Символы клавиш со знаками препинания или перевода строки
|
||||||
let symb = ["Enter", "!", "?", ";", ":", ",", ".", " ", "-", "'", "\"", "(", ")", "{", "}", "[", "]", "_", "&", "/", "\\", "*"];
|
let symb = ["Enter", "!", "?", ";", ":", ",", ".", " ", "-", "'", "\"", "(", ")", "{", "}", "[", "]", "_", "&", "/", "\\", "*"];
|
||||||
|
|
||||||
// Запись в память введенного текста при нажатии клавиши со знаком препинания или перевода строки
|
// Запись в память введенного текста при нажатии клавиши со знаком препинания или перевода строки
|
||||||
if (document.getElementById("content")) {
|
document.querySelectorAll('.content').forEach(el => {
|
||||||
document.getElementById("content").addEventListener("keyup", function(ev)
|
el.addEventListener('keyup', ev => {
|
||||||
{
|
for (let i = 0; i < symb.length; i++) {
|
||||||
for(let i=0; i<symb.length; i++)
|
if (symb[i] == ev.key) inter();
|
||||||
{
|
}
|
||||||
if(symb[i]==ev.key)
|
});
|
||||||
inter();
|
});
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
let sel = document.getSelection();
|
let sel = document.getSelection();
|
||||||
function selInContenteditable(insertType) {
|
function selInContenteditable(insertType) {
|
||||||
@@ -497,69 +494,74 @@ document.getElementById("newPage").addEventListener("click", newPageFun);
|
|||||||
function newPageFun() {
|
function newPageFun() {
|
||||||
document.getElementById("right-float").innerHTML = "";
|
document.getElementById("right-float").innerHTML = "";
|
||||||
document.getElementById("left-float").innerHTML = "";
|
document.getElementById("left-float").innerHTML = "";
|
||||||
document.getElementById("content").innerHTML = "";
|
document.querySelectorAll('.content').forEach(el => el.innerHTML = "");
|
||||||
document.getElementById("mainTitle").innerHTML = "<i>{{new_file}}!</i>";
|
document.getElementById("mainTitle").innerHTML = "<i>{{new_file}}!</i>";
|
||||||
window.newPageFunValue = "newPage";
|
window.newPageFunValue = "newPage";
|
||||||
document.getElementById("settingsMain_d").style.visibility="hidden";
|
document.getElementById("settingsMain_d").style.visibility="hidden";
|
||||||
}
|
}
|
||||||
|
|
||||||
// Сохранение выделение
|
// Сохранение выделение
|
||||||
|
|
||||||
document.addEventListener('selectionchange', () => {
|
document.addEventListener('selectionchange', () => {
|
||||||
const content = document.getElementById('content');
|
const contents = document.querySelectorAll('.content');
|
||||||
|
if (!contents || contents.length === 0) return;
|
||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
const startNode = range.startContainer;
|
const startNode = range.startContainer;
|
||||||
if (content.contains(startNode)) {
|
for (let content of contents) {
|
||||||
saveSelection();
|
if (content.contains(startNode)) {
|
||||||
|
saveSelection();
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
let savedSel = null;
|
let savedSel = null;
|
||||||
|
|
||||||
function saveSelection() {
|
function saveSelection() {
|
||||||
const content = document.getElementById('content');
|
const contents = document.querySelectorAll('.content');
|
||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return;
|
for (let content of contents) {
|
||||||
const pre = range.cloneRange();
|
if (content.contains(range.commonAncestorContainer)) {
|
||||||
pre.selectNodeContents(content);
|
const pre = range.cloneRange();
|
||||||
pre.setEnd(range.startContainer, range.startOffset);
|
pre.selectNodeContents(content);
|
||||||
const start = pre.toString().length;
|
pre.setEnd(range.startContainer, range.startOffset);
|
||||||
const end = start + range.toString().length;
|
const start = pre.toString().length;
|
||||||
savedSel = { start, end };
|
const end = start + range.toString().length;
|
||||||
|
savedSel = { start, end };
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function restoreSelection() {
|
function restoreSelection() {
|
||||||
if (!savedSel) return;
|
if (!savedSel) return;
|
||||||
const content = document.getElementById('content');
|
const contents = document.querySelectorAll('.content');
|
||||||
const { start, end } = savedSel;
|
const { start, end } = savedSel;
|
||||||
let charIndex = 0;
|
let charIndex = 0;
|
||||||
const range = document.createRange();
|
const range = document.createRange();
|
||||||
range.setStart(content, 0);
|
try {
|
||||||
range.collapse(true);
|
for (const content of contents) {
|
||||||
try {
|
range.setStart(content, 0);
|
||||||
(function traverse(node) {
|
range.collapse(true);
|
||||||
if (node.nodeType === Node.TEXT_NODE) {
|
(function traverse(node) {
|
||||||
const next = charIndex + node.length;
|
if (node.nodeType === Node.TEXT_NODE) {
|
||||||
if (charIndex <= start && next >= start) {
|
const next = charIndex + node.length;
|
||||||
range.setStart(node, start - charIndex);
|
if (charIndex <= start && next >= start) range.setStart(node, start - charIndex);
|
||||||
}
|
if (charIndex <= end && next >= end) {
|
||||||
if (charIndex <= end && next >= end) {
|
range.setEnd(node, end - charIndex);
|
||||||
range.setEnd(node, end - charIndex);
|
throw 'done';
|
||||||
throw 'done';
|
}
|
||||||
}
|
charIndex = next;
|
||||||
charIndex = next;
|
} else node.childNodes.forEach(traverse);
|
||||||
} else {
|
})(content);
|
||||||
node.childNodes.forEach(traverse);
|
}
|
||||||
}
|
} catch (e) {}
|
||||||
})(content);
|
const sel = window.getSelection();
|
||||||
} catch (e) {}
|
sel.removeAllRanges();
|
||||||
const sel = window.getSelection();
|
sel.addRange(range);
|
||||||
sel.removeAllRanges();
|
|
||||||
sel.addRange(range);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Взаимодействие с плагинами
|
// Взаимодействие с плагинами
|
||||||
@@ -1457,14 +1459,14 @@ const singleFormats = [
|
|||||||
const specialFormats = ['butlink', 'linkdel', 'forma', 'col', 'backgr'];
|
const specialFormats = ['butlink', 'linkdel', 'forma', 'col', 'backgr'];
|
||||||
|
|
||||||
addEventListener("LoadeditorJs", function() {
|
addEventListener("LoadeditorJs", function() {
|
||||||
const content = document.getElementById('content');
|
const content = document.querySelectorAll('.content');
|
||||||
|
|
||||||
simpleFormats.forEach(f => {
|
simpleFormats.forEach(f => {
|
||||||
document.getElementById(f.id).addEventListener('click', () => {
|
document.getElementById(f.id).addEventListener('click', () => {
|
||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return;
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return;
|
||||||
let all = true;
|
let all = true;
|
||||||
const it = document.createNodeIterator(
|
const it = document.createNodeIterator(
|
||||||
range.commonAncestorContainer,
|
range.commonAncestorContainer,
|
||||||
@@ -1495,7 +1497,7 @@ divFormats.forEach(f => {
|
|||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return;
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return;
|
||||||
divApplyformat(range, f);
|
divApplyformat(range, f);
|
||||||
inter();
|
inter();
|
||||||
});
|
});
|
||||||
@@ -1506,7 +1508,7 @@ listFormats.forEach(f => {
|
|||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return;
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return;
|
||||||
listApplyformat(range, f);
|
listApplyformat(range, f);
|
||||||
inter();
|
inter();
|
||||||
});
|
});
|
||||||
@@ -1523,7 +1525,7 @@ singleFormats.forEach(f => {
|
|||||||
const sel = window.getSelection()
|
const sel = window.getSelection()
|
||||||
if (!sel.rangeCount) return
|
if (!sel.rangeCount) return
|
||||||
const range = sel.getRangeAt(0)
|
const range = sel.getRangeAt(0)
|
||||||
if (!content.contains(range.commonAncestorContainer)) return
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return;
|
||||||
singleApplyformat(range, f)
|
singleApplyformat(range, f)
|
||||||
inter()
|
inter()
|
||||||
})
|
})
|
||||||
@@ -1534,7 +1536,7 @@ specialFormats.forEach(f => {
|
|||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return;
|
if (!sel.rangeCount) return;
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return;
|
if (![...content].some(c => c.contains(range.commonAncestorContainer))) return;
|
||||||
if (typeof document[f + 'Fun'] === 'function') document[f + 'Fun'](range);
|
if (typeof document[f + 'Fun'] === 'function') document[f + 'Fun'](range);
|
||||||
else window[f + 'Fun'](range);
|
else window[f + 'Fun'](range);
|
||||||
inter();
|
inter();
|
||||||
@@ -1543,10 +1545,13 @@ specialFormats.forEach(f => {
|
|||||||
|
|
||||||
const events = ['pointerup','keyup','input','focus','blur','click'];
|
const events = ['pointerup','keyup','input','focus','blur','click'];
|
||||||
events.forEach(evt => {
|
events.forEach(evt => {
|
||||||
if (!content) return;
|
const contents = document.querySelectorAll('.content');
|
||||||
content.addEventListener(evt, () => {
|
if (!contents || contents.length === 0) return;
|
||||||
updateToolbarStyles();
|
contents.forEach(content => {
|
||||||
updateSingleSelectors();
|
content.addEventListener(evt, () => {
|
||||||
|
updateToolbarStyles();
|
||||||
|
updateSingleSelectors();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -1561,36 +1566,42 @@ let currentIndex = 0
|
|||||||
|
|
||||||
/** @brief Сохраняет текущее состояние контента, если оно изменилось */
|
/** @brief Сохраняет текущее состояние контента, если оно изменилось */
|
||||||
function inter() {
|
function inter() {
|
||||||
const editable = document.getElementById("content")
|
const editables = document.querySelectorAll(".content")
|
||||||
if (editable) {
|
editables.forEach(editable => {
|
||||||
let currentContent = editable.innerHTML
|
if (editable) {
|
||||||
if (currentContent !== arr[currentIndex]) {
|
let currentContent = editable.innerHTML
|
||||||
currentIndex++
|
if (currentContent !== arr[currentIndex]) {
|
||||||
arr = arr.slice(0, currentIndex)
|
currentIndex++
|
||||||
arr.push(currentContent)
|
arr = arr.slice(0, currentIndex)
|
||||||
|
arr.push(currentContent)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
if (document.getElementById("content")) {
|
document.querySelectorAll(".content").forEach((editable, i) => {
|
||||||
arr[0] = document.getElementById("content").innerHTML
|
if (i === 0) arr[0] = editable.innerHTML
|
||||||
}
|
})
|
||||||
|
|
||||||
document.getElementById("forw").addEventListener("click", function() {
|
document.getElementById("forw").addEventListener("click", function() {
|
||||||
if (currentIndex < arr.length - 1) {
|
if (currentIndex < arr.length - 1) {
|
||||||
currentIndex++
|
currentIndex++
|
||||||
const editable = document.getElementById("content")
|
const editables = document.querySelectorAll(".content")
|
||||||
editable.innerHTML = arr[currentIndex]
|
editables.forEach(editable => {
|
||||||
editable.setAttribute("contenteditable", "true")
|
editable.innerHTML = arr[currentIndex]
|
||||||
|
editable.setAttribute("contenteditable", "true")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
document.getElementById("bac").addEventListener("click", function() {
|
document.getElementById("bac").addEventListener("click", function() {
|
||||||
if (currentIndex > 0) {
|
if (currentIndex > 0) {
|
||||||
currentIndex--
|
currentIndex--
|
||||||
const editable = document.getElementById("content")
|
const editables = document.querySelectorAll(".content")
|
||||||
editable.innerHTML = arr[currentIndex]
|
editables.forEach(editable => {
|
||||||
editable.setAttribute("contenteditable", "true")
|
editable.innerHTML = arr[currentIndex]
|
||||||
|
editable.setAttribute("contenteditable", "true")
|
||||||
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -1785,8 +1796,10 @@ function divApplyformat(range, format) {
|
|||||||
range.compareBoundaryPoints(Range.START_TO_END, er) > 0;
|
range.compareBoundaryPoints(Range.START_TO_END, er) > 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
Array.from(content.children).forEach(child => {
|
Array.from(document.querySelectorAll('.content')).forEach(content => {
|
||||||
if (intersects(child)) externals.add(child);
|
Array.from(content.children).forEach(child => {
|
||||||
|
if (intersects(child)) externals.add(child);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
externals.forEach(div => {
|
externals.forEach(div => {
|
||||||
@@ -1811,8 +1824,10 @@ function listApplyformat(range, format) {
|
|||||||
|
|
||||||
if (type === 'listNone') {
|
if (type === 'listNone') {
|
||||||
const lists = new Set();
|
const lists = new Set();
|
||||||
Array.from(content.querySelectorAll('li')).forEach(li => {
|
Array.from(document.querySelectorAll('.content')).forEach(content => {
|
||||||
if (intersects(li)) lists.add(li.parentNode);
|
Array.from(content.querySelectorAll('li')).forEach(li => {
|
||||||
|
if (intersects(li)) lists.add(li.parentNode);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
lists.forEach(list => {
|
lists.forEach(list => {
|
||||||
@@ -1849,31 +1864,33 @@ function listApplyformat(range, format) {
|
|||||||
parent.removeChild(list);
|
parent.removeChild(list);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
const items = Array.from(content.children).filter(child => intersects(child));
|
Array.from(document.querySelectorAll('.content')).forEach(content => {
|
||||||
if (!items.length) return;
|
const items = Array.from(content.children).filter(child => intersects(child));
|
||||||
|
if (!items.length) return;
|
||||||
|
|
||||||
let listEl;
|
let listEl;
|
||||||
if (type === 'listNumbers' || type === 'listLetters') {
|
if (type === 'listNumbers' || type === 'listLetters') {
|
||||||
listEl = document.createElement('ol');
|
listEl = document.createElement('ol');
|
||||||
listEl.style.listStyleType = format.style.listStyleType;
|
listEl.style.listStyleType = format.style.listStyleType;
|
||||||
} else {
|
|
||||||
listEl = document.createElement('ul');
|
|
||||||
listEl.style.listStyleType = format.style.listStyleType;
|
|
||||||
}
|
|
||||||
content.insertBefore(listEl, items[0]);
|
|
||||||
|
|
||||||
items.forEach(node => {
|
|
||||||
if (node.tagName === 'UL' || node.tagName === 'OL') {
|
|
||||||
Array.from(node.children).forEach(li => {
|
|
||||||
listEl.appendChild(li);
|
|
||||||
});
|
|
||||||
content.removeChild(node);
|
|
||||||
} else {
|
} else {
|
||||||
const li = document.createElement('li');
|
listEl = document.createElement('ul');
|
||||||
content.removeChild(node);
|
listEl.style.listStyleType = format.style.listStyleType;
|
||||||
li.appendChild(node);
|
|
||||||
listEl.appendChild(li);
|
|
||||||
}
|
}
|
||||||
|
content.insertBefore(listEl, items[0]);
|
||||||
|
|
||||||
|
items.forEach(node => {
|
||||||
|
if (node.tagName === 'UL' || node.tagName === 'OL') {
|
||||||
|
Array.from(node.children).forEach(li => {
|
||||||
|
listEl.appendChild(li);
|
||||||
|
});
|
||||||
|
content.removeChild(node);
|
||||||
|
} else {
|
||||||
|
const li = document.createElement('li');
|
||||||
|
content.removeChild(node);
|
||||||
|
li.appendChild(node);
|
||||||
|
listEl.appendChild(li);
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1959,32 +1976,36 @@ function formaFun(range) {
|
|||||||
return range.compareBoundaryPoints(Range.END_TO_START, er) < 0
|
return range.compareBoundaryPoints(Range.END_TO_START, er) < 0
|
||||||
&& range.compareBoundaryPoints(Range.START_TO_END, er) > 0;
|
&& range.compareBoundaryPoints(Range.START_TO_END, er) > 0;
|
||||||
};
|
};
|
||||||
Array.from(content.children).forEach(child => {
|
Array.from(document.querySelectorAll('.content')).forEach(content => {
|
||||||
if (intersects(child)) externals.add(child);
|
Array.from(content.children).forEach(child => {
|
||||||
|
if (intersects(child)) externals.add(child);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
externals.forEach(el => {
|
externals.forEach(el => {
|
||||||
el.style.textAlign = '';
|
el.style.textAlign = '';
|
||||||
});
|
});
|
||||||
|
|
||||||
const itList = document.createNodeIterator(
|
Array.from(document.querySelectorAll('.content')).forEach(content => {
|
||||||
content,
|
const itList = document.createNodeIterator(
|
||||||
NodeFilter.SHOW_ELEMENT,
|
content,
|
||||||
{
|
NodeFilter.SHOW_ELEMENT,
|
||||||
acceptNode: n =>
|
{
|
||||||
(n.tagName === 'UL' || n.tagName === 'OL') &&
|
acceptNode: n =>
|
||||||
range.intersectsNode(n)
|
(n.tagName === 'UL' || n.tagName === 'OL') &&
|
||||||
? NodeFilter.FILTER_ACCEPT
|
range.intersectsNode(n)
|
||||||
: NodeFilter.FILTER_REJECT
|
? NodeFilter.FILTER_ACCEPT
|
||||||
|
: NodeFilter.FILTER_REJECT
|
||||||
|
}
|
||||||
|
);
|
||||||
|
let listEl;
|
||||||
|
while (listEl = itList.nextNode()) {
|
||||||
|
const parent = listEl.parentNode;
|
||||||
|
Array.from(listEl.children).forEach(li => {
|
||||||
|
while (li.firstChild) parent.insertBefore(li.firstChild, listEl);
|
||||||
|
});
|
||||||
|
parent.removeChild(listEl);
|
||||||
}
|
}
|
||||||
);
|
});
|
||||||
let listEl;
|
|
||||||
while (listEl = itList.nextNode()) {
|
|
||||||
const parent = listEl.parentNode;
|
|
||||||
Array.from(listEl.children).forEach(li => {
|
|
||||||
while (li.firstChild) parent.insertBefore(li.firstChild, listEl);
|
|
||||||
});
|
|
||||||
parent.removeChild(listEl);
|
|
||||||
}
|
|
||||||
|
|
||||||
function unwrapAllSpansAndLinks(node) {
|
function unwrapAllSpansAndLinks(node) {
|
||||||
const frag = document.createDocumentFragment();
|
const frag = document.createDocumentFragment();
|
||||||
@@ -2079,7 +2100,7 @@ function detectFormatState(format) {
|
|||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return 'none';
|
if (!sel.rangeCount) return 'none';
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return 'none';
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return 'none';
|
||||||
const it = document.createNodeIterator(
|
const it = document.createNodeIterator(
|
||||||
range.commonAncestorContainer,
|
range.commonAncestorContainer,
|
||||||
NodeFilter.SHOW_TEXT,
|
NodeFilter.SHOW_TEXT,
|
||||||
@@ -2091,7 +2112,7 @@ function detectFormatState(format) {
|
|||||||
if (!text) continue;
|
if (!text) continue;
|
||||||
total++;
|
total++;
|
||||||
let cur = node.parentElement, ok = false;
|
let cur = node.parentElement, ok = false;
|
||||||
while (cur && cur !== content) {
|
while (cur && ![...document.querySelectorAll('.content')].includes(cur)) {
|
||||||
const fmt = simpleFormats.find(f => f.id === format);
|
const fmt = simpleFormats.find(f => f.id === format);
|
||||||
const v = fmt ? getComputedStyle(cur)[fmt.prop] || '' : '';
|
const v = fmt ? getComputedStyle(cur)[fmt.prop] || '' : '';
|
||||||
if (fmt && fmt.test(v)) { ok = true; break; }
|
if (fmt && fmt.test(v)) { ok = true; break; }
|
||||||
@@ -2128,7 +2149,7 @@ function detectSingleState(format) {
|
|||||||
const sel = window.getSelection();
|
const sel = window.getSelection();
|
||||||
if (!sel.rangeCount) return '';
|
if (!sel.rangeCount) return '';
|
||||||
const range = sel.getRangeAt(0);
|
const range = sel.getRangeAt(0);
|
||||||
if (!content.contains(range.commonAncestorContainer)) return '';
|
if (![...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) return '';
|
||||||
const it = document.createNodeIterator(
|
const it = document.createNodeIterator(
|
||||||
range.commonAncestorContainer,
|
range.commonAncestorContainer,
|
||||||
NodeFilter.SHOW_TEXT,
|
NodeFilter.SHOW_TEXT,
|
||||||
@@ -2263,7 +2284,7 @@ document.querySelectorAll('.align-dropdown-text').forEach(dropdown => {
|
|||||||
const sel = window.getSelection()
|
const sel = window.getSelection()
|
||||||
if (sel.rangeCount) {
|
if (sel.rangeCount) {
|
||||||
const range = sel.getRangeAt(0)
|
const range = sel.getRangeAt(0)
|
||||||
if (content.contains(range.commonAncestorContainer)) {
|
if ([...document.querySelectorAll('.content')].some(c => c.contains(range.commonAncestorContainer))) {
|
||||||
singleApplyformat(range, f)
|
singleApplyformat(range, f)
|
||||||
inter()
|
inter()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,22 +15,19 @@ function savePageCenterBlock($params) {
|
|||||||
|
|
||||||
$saveContentIdXml = $path . $_SESSION['page_url'] . ".page.php";
|
$saveContentIdXml = $path . $_SESSION['page_url'] . ".page.php";
|
||||||
$saveContentIdData = $params['saveContentIdData'] ?? '';
|
$saveContentIdData = $params['saveContentIdData'] ?? '';
|
||||||
$file = @simplexml_load_file($saveContentIdXml);
|
|
||||||
$node = $file->content->{$_SESSION['lng']};
|
|
||||||
|
|
||||||
$file->content->{$_SESSION['lng']} = '';
|
$xml = file_get_contents($saveContentIdXml);
|
||||||
$node = dom_import_simplexml($node);
|
$xml = preg_replace('#<' . $_SESSION['lng'] . '>.*?</' . $_SESSION['lng'] . '>#s', '<' . $_SESSION['lng'] . '></' . $_SESSION['lng'] . '>', $xml);
|
||||||
$doc = $node->ownerDocument;
|
|
||||||
$appended = $node->appendChild($doc->createCDATASection("\n" . $saveContentIdData . "\n"));
|
|
||||||
$saved = $file->asXML($saveContentIdXml);
|
|
||||||
|
|
||||||
if ($appended && $saved) {
|
if (preg_match('#<' . $_SESSION['lng'] . '>#', $xml, $pos)) {
|
||||||
return 'true';
|
$xml = preg_replace('#(<' . $_SESSION['lng'] . '>)#', '$1' . "\n" . $saveContentIdData . "\n", $xml, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (file_put_contents($saveContentIdXml, $xml) !== false) return 'true';
|
||||||
throw new Exception("Problem saving content", -32003);
|
throw new Exception("Problem saving content", -32003);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Сохраняет левый и правый блоки страницы
|
* @brief Сохраняет левый и правый блоки страницы
|
||||||
* @param array $params Массив с данными блоков, ключ 'floatsBlock' содержит массив левых и правых блоков
|
* @param array $params Массив с данными блоков, ключ 'floatsBlock' содержит массив левых и правых блоков
|
||||||
@@ -130,39 +127,33 @@ function saveHowPageContent($params) {
|
|||||||
|
|
||||||
$_SESSION['page_url'] = $params['page_url'] . str_replace('.page.php', '', $params['nameFile']);
|
$_SESSION['page_url'] = $params['page_url'] . str_replace('.page.php', '', $params['nameFile']);
|
||||||
$filePath = $path . $params['page_url'] . $params['nameFile'];
|
$filePath = $path . $params['page_url'] . $params['nameFile'];
|
||||||
$contentData = $params['saveContentIdData'] ?? '';
|
$contentData = html_entity_decode($params['saveContentIdData'] ?? '', ENT_QUOTES, 'UTF-8');
|
||||||
$file = simplexml_load_file($filePath);
|
|
||||||
$langNode = $file->content->{$_SESSION['lng']};
|
$xml = file_get_contents($filePath);
|
||||||
$file->content->{$_SESSION['lng']} = '';
|
$xml = preg_replace('#<' . $_SESSION['lng'] . '>.*?</' . $_SESSION['lng'] . '>#s', '<' . $_SESSION['lng'] . '></' . $_SESSION['lng'] . '>', $xml);
|
||||||
$node = dom_import_simplexml($langNode);
|
$xml = preg_replace('#(<' . $_SESSION['lng'] . '>)#', "$1\n" . $contentData . "\n", $xml, 1);
|
||||||
$doc = $node->ownerDocument;
|
|
||||||
$node->appendChild($doc->createCDATASection("\n" . $contentData . "\n"));
|
$xml = preg_replace('#<rblock>.*?</rblock>#s', '<rblock></rblock>', $xml);
|
||||||
|
$xml = preg_replace('#<lblock>.*?</lblock>#s', '<lblock></lblock>', $xml);
|
||||||
|
|
||||||
$file->rblock = '';
|
|
||||||
$file->lblock = '';
|
|
||||||
$blocks = $params['floatsBlock'] ?? [];
|
$blocks = $params['floatsBlock'] ?? [];
|
||||||
$titles = $params['title'] ?? [];
|
$titles = $params['title'] ?? [];
|
||||||
$urls = $params['pluginUrl'] ?? [];
|
$urls = $params['pluginUrl'] ?? [];
|
||||||
$tclasses = $params['tclass'] ?? [];
|
$tclasses = $params['tclass'] ?? [];
|
||||||
$bclasses = $params['bclass'] ?? [];
|
$bclasses = $params['bclass'] ?? [];
|
||||||
|
|
||||||
foreach ($blocks as $i => $blockName) {
|
foreach ($blocks as $i => $blockName) {
|
||||||
$newBlock = $file->$blockName->addChild('block');
|
$url = htmlspecialchars($urls[$i] ?? '', ENT_QUOTES, 'UTF-8');
|
||||||
$newBlock->addAttribute('url', htmlspecialchars($urls[$i] ?? '', ENT_QUOTES,'UTF-8'));
|
$title = htmlspecialchars($titles[$i] ?? '', ENT_QUOTES, 'UTF-8');
|
||||||
$newBlock->addAttribute('title', htmlspecialchars($titles[$i] ?? '', ENT_QUOTES,'UTF-8'));
|
$tclass = htmlspecialchars($tclasses[$i] ?? '', ENT_QUOTES, 'UTF-8');
|
||||||
$newBlock->addAttribute('tclass',htmlspecialchars($tclasses[$i] ?? '',ENT_QUOTES,'UTF-8'));
|
$bclass = htmlspecialchars($bclasses[$i] ?? '', ENT_QUOTES, 'UTF-8');
|
||||||
$newBlock->addAttribute('bclass',htmlspecialchars($bclasses[$i] ?? '',ENT_QUOTES,'UTF-8'));
|
|
||||||
|
$blockXml = '<block url="' . $url . '" title="' . $title . '" tclass="' . $tclass . '" bclass="' . $bclass . '"/>';
|
||||||
|
$xml = preg_replace('#<' . $blockName . '>#', '<' . $blockName . '>' . "\n" . $blockXml, $xml, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
$dom = new DOMDocument('1.0','UTF-8');
|
if (file_put_contents($filePath, $xml) !== false) return 'true';
|
||||||
$dom->preserveWhiteSpace = false;
|
throw new Exception("Failed to save content", -32003);
|
||||||
$dom->formatOutput = true;
|
|
||||||
$dom->loadXML($file->asXML());
|
|
||||||
|
|
||||||
$saved = $dom->save($filePath);
|
|
||||||
if ($saved === false) {
|
|
||||||
throw new Exception("Failed to save content", -32003);
|
|
||||||
}
|
|
||||||
return 'true';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -184,11 +175,12 @@ function createNewPage($params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$file = simplexml_load_file($saveContentIdXml);
|
$file = simplexml_load_file($saveContentIdXml);
|
||||||
$node = $file->content->{$_SESSION['lng']};
|
foreach ($file->content->{$_SESSION['lng']} as $node) {
|
||||||
$file->content->{$_SESSION['lng']} = '';
|
$node = dom_import_simplexml($node);
|
||||||
$node = dom_import_simplexml($node);
|
$no = $node->ownerDocument;
|
||||||
$no = $node->ownerDocument;
|
while ($node->firstChild) $node->removeChild($node->firstChild);
|
||||||
$node->appendChild($no->createCDATASection("\n" . $saveContentIdData . "\n"));
|
$node->appendChild($no->createCDATASection("\n" . $saveContentIdData . "\n"));
|
||||||
|
}
|
||||||
|
|
||||||
$saved = $file->asXML($saveContentIdXml);
|
$saved = $file->asXML($saveContentIdXml);
|
||||||
if ($saved === false) {
|
if ($saved === false) {
|
||||||
|
|||||||
@@ -252,9 +252,17 @@ function getPage($params) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$page = [];
|
$page = [];
|
||||||
$page['right'] = GetBlock($pageXml->rblock->block, 'right');
|
$page['right'] = GetBlock($pageXml->rblock->block, 'right');
|
||||||
$page['left'] = GetBlock($pageXml->lblock->block, 'left');
|
$page['left'] = GetBlock($pageXml->lblock->block, 'left');
|
||||||
$page['content'] = (string)$pageXml->content->{$_SESSION['lng']};
|
|
||||||
|
$xmlContent = file_get_contents($file);
|
||||||
|
$lng = $_SESSION['lng'];
|
||||||
|
preg_match('#<' . $lng . '>(.*?)</' . $lng . '>#s', $xmlContent, $block);
|
||||||
|
$langBlock = $block[1] ?? '';
|
||||||
|
preg_match_all('#<!\[CDATA\[(.*?)\]\]>#s', $langBlock, $matches);
|
||||||
|
$contents = $matches[1] ?? [];
|
||||||
|
$page['content'] = $contents;
|
||||||
|
|
||||||
$_SESSION['page_url'] = $rel;
|
$_SESSION['page_url'] = $rel;
|
||||||
session_write_close();
|
session_write_close();
|
||||||
return $page;
|
return $page;
|
||||||
|
|||||||
@@ -993,7 +993,7 @@ function treePropertiesDiv() {
|
|||||||
inputHtml = `<input type="text" value="${value}" style="font-size: inherit;" readonly disabled>`;
|
inputHtml = `<input type="text" value="${value}" style="font-size: inherit;" readonly disabled>`;
|
||||||
} else if (key.toLowerCase() === "plugins") {
|
} else if (key.toLowerCase() === "plugins") {
|
||||||
let plugins = (value || '').split(',');
|
let plugins = (value || '').split(',');
|
||||||
let allPlugins = ['dgrm','SvgEditorM'];
|
let allPlugins = ['dgrm','SvgEditorM', 'form_editor'];
|
||||||
inputHtml = allPlugins.map(p =>
|
inputHtml = allPlugins.map(p =>
|
||||||
`<label><input type="checkbox" value="${p}"${plugins.includes(p)?' checked':''}>${p}</label>`
|
`<label><input type="checkbox" value="${p}"${plugins.includes(p)?' checked':''}>${p}</label>`
|
||||||
).join(' ');
|
).join(' ');
|
||||||
|
|||||||
@@ -187,12 +187,15 @@ ul, ol {
|
|||||||
.bfloat {
|
.bfloat {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
left: -1px;
|
left: -1px;
|
||||||
top: -1px;
|
|
||||||
position: relative;
|
position: relative;
|
||||||
border-radius: 0 0 10px 10px;
|
border-radius: 10px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
font-size: 1em;
|
font-size: 1em;
|
||||||
}
|
}
|
||||||
|
.content1 {
|
||||||
|
top: -1px;
|
||||||
|
border-radius: 0 0 10px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
.cfloat {
|
.cfloat {
|
||||||
left: -1px;
|
left: -1px;
|
||||||
@@ -228,11 +231,11 @@ ul, ol {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
#content {
|
#content, .content {
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
overflow-y: hidden;
|
overflow-y: hidden;
|
||||||
}
|
}
|
||||||
#content td {
|
#content td, .content td {
|
||||||
height: 19px;
|
height: 19px;
|
||||||
}
|
}
|
||||||
#editor a {
|
#editor a {
|
||||||
|
|||||||
@@ -14,9 +14,7 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
%left%
|
%left%
|
||||||
%right%
|
%right%
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -23,7 +23,5 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -49,9 +49,7 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -28,9 +28,7 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -49,9 +49,7 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -26,9 +26,7 @@
|
|||||||
<div class="%ctitle%" id="mainTitle">
|
<div class="%ctitle%" id="mainTitle">
|
||||||
%title%
|
%title%
|
||||||
</div>
|
</div>
|
||||||
<div class="%cfloat%">
|
%content%
|
||||||
<div id="content">%content%</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user