Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 68e516b45c |
113
content/markdownMarkedJS.page.php
Normal file
113
content/markdownMarkedJS.page.php
Normal file
@@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<page>
|
||||
<general>
|
||||
<!--Kлючевые слова-->
|
||||
<keywords>
|
||||
|
||||
</keywords>
|
||||
<!--Условия доступа-->
|
||||
<access>
|
||||
<read>
|
||||
<users>
|
||||
</users>
|
||||
<groups>
|
||||
</groups>
|
||||
</read>
|
||||
<edit>
|
||||
<users>
|
||||
</users>
|
||||
<groups>
|
||||
</groups>
|
||||
</edit>
|
||||
</access>
|
||||
</general>
|
||||
<!--Содержание страницы-->
|
||||
<!--Основное меню-->
|
||||
<mainmenu>
|
||||
<item name="имя" url="урл" title="описание">
|
||||
</item>
|
||||
</mainmenu>
|
||||
<!--Текст страницы-->
|
||||
<content tclass="btitle" bclass="bfloat">
|
||||
<ru>
|
||||
<
|
||||
Список:
|
||||
- пункт один
|
||||
- пункт два
|
||||
- пункт три
|
||||
</textarea>
|
||||
</div>
|
||||
]]>
|
||||
<![CDATA[<div>
|
||||
<h3>
|
||||
HTML
|
||||
</h3>
|
||||
<div id="html" style="width:100%; height:300px; border:1px solid #ccc; padding:5px; overflow:auto;">
|
||||
<h1>
|
||||
Заголовок
|
||||
</h1>
|
||||
<p>
|
||||
Тестовый абзац текста.
|
||||
Здесь есть
|
||||
<strong>
|
||||
жирный текст
|
||||
</strong>
|
||||
,
|
||||
<em>
|
||||
курсив
|
||||
</em>
|
||||
,
|
||||
<code>
|
||||
моноширинный текст
|
||||
</code>
|
||||
.
|
||||
</p>
|
||||
<p>
|
||||
Ссылка:
|
||||
<a href="https://example.com">
|
||||
Перейти
|
||||
</a>
|
||||
</p>
|
||||
<p>
|
||||
Список:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
пункт один
|
||||
</li>
|
||||
<li>
|
||||
пункт два
|
||||
</li>
|
||||
<li>
|
||||
пункт три
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
function updateHtml() {
|
||||
document.getElementById('html').innerHTML = marked.parse(document.getElementById('md').value);
|
||||
}
|
||||
document.getElementById('md').addEventListener('input', updateHtml);
|
||||
window.addEventListener('DOMContentLoaded', updateHtml);
|
||||
</script>
|
||||
]]>
|
||||
</ru>
|
||||
<lv><![CDATA[
|
||||
<p>Uz šo brīdi šeit ne kā nav</p>
|
||||
]]></lv>
|
||||
<en><![CDATA[
|
||||
<p>??????</p>
|
||||
]]></en>
|
||||
</content>
|
||||
<rblock/>
|
||||
<lblock/>
|
||||
</page>
|
||||
@@ -18,6 +18,8 @@
|
||||
test1цыуквацыфавп
|
||||
</div>]]><![CDATA[<div>
|
||||
test2
|
||||
</div>]]><![CDATA[<div>
|
||||
test2
|
||||
</div>]]>
|
||||
</ru>
|
||||
<lv><![CDATA[
|
||||
|
||||
@@ -32,6 +32,7 @@ window.touchY = 0;
|
||||
* @return Promise Разрешается после загрузки всех скриптов плагина
|
||||
*/
|
||||
function includePlugin(plugin) {
|
||||
console.log(plugin)
|
||||
return jsonrpcRequest("includePlugin", { plugin })
|
||||
.then(html => {
|
||||
const div = document.createElement('div');
|
||||
@@ -737,39 +738,82 @@ let cou=1;
|
||||
/**
|
||||
* @brief Показать/скрыть HTML-код страницы в textarea
|
||||
*/
|
||||
function showHtmlCode() {
|
||||
let contents = document.getElementsByClassName("content");
|
||||
if (cou==1) {
|
||||
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 = formatHTML(document.getElementById("tex").value);
|
||||
let sbe=document.getElementsByClassName("sb");
|
||||
for(let i=0; i<sbe.length; i++) {
|
||||
if (sbe[i] != document.getElementById("tex"))
|
||||
sbe[i].style.visibility="hidden";
|
||||
}
|
||||
if (document.getElementById("tex").style.visibility=="hidden") {
|
||||
document.getElementById("tex").style.visibility="visible";
|
||||
} else {
|
||||
document.getElementById("tex").style.visibility="hidden";
|
||||
}
|
||||
cou=2;
|
||||
} else {
|
||||
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";
|
||||
cou=1;
|
||||
}
|
||||
let lastType = 'html';
|
||||
function showCode(type) {
|
||||
let contents = document.getElementsByClassName("content");
|
||||
let tex = document.getElementById("tex");
|
||||
if (cou == 1) {
|
||||
let combined = "";
|
||||
for (let i = 0; i < contents.length; i++) {
|
||||
combined += "<![CDATA[" + contents[i].innerHTML + "]]>";
|
||||
}
|
||||
tex.value = combined;
|
||||
tex.value = decodeHtmlEntities(tex.value);
|
||||
if (type === 'html') {
|
||||
tex.value = formatHTML(tex.value);
|
||||
} else if (type === 'marked') {
|
||||
tex.value = marked.parse(tex.value);
|
||||
}
|
||||
let sbe = document.getElementsByClassName("sb");
|
||||
for (let i = 0; i < sbe.length; i++) {
|
||||
if (sbe[i] != tex) sbe[i].style.visibility = "hidden";
|
||||
}
|
||||
tex.style.visibility = tex.style.visibility == "hidden" ? "visible" : "hidden";
|
||||
lastType = type;
|
||||
cou = 2;
|
||||
} else {
|
||||
let text = tex.value;
|
||||
let split = text.match(/<!\[CDATA\[(.*?)\]\]>/gs);
|
||||
const centerFloat = document.querySelector('.center-float');
|
||||
if (!centerFloat) return;
|
||||
let need = split ? split.length : 1;
|
||||
let floats = centerFloat.getElementsByClassName('bfloat');
|
||||
while (floats.length < need) {
|
||||
let bf = document.createElement('div');
|
||||
bf.className = 'bfloat';
|
||||
if (floats.length > 0) bf.style.borderRadius = "10px";
|
||||
let c = document.createElement('div');
|
||||
c.className = 'content';
|
||||
c.contentEditable = 'true';
|
||||
centerFloat.appendChild(bf);
|
||||
bf.appendChild(c);
|
||||
centerFloat.appendChild(document.createElement('br'));
|
||||
floats = centerFloat.getElementsByClassName('bfloat');
|
||||
}
|
||||
while (floats.length > need) {
|
||||
let next = floats[floats.length - 1].nextSibling;
|
||||
if (next && next.tagName === 'BR') centerFloat.removeChild(next);
|
||||
centerFloat.removeChild(floats[floats.length - 1]);
|
||||
floats = centerFloat.getElementsByClassName('bfloat');
|
||||
}
|
||||
contents = centerFloat.getElementsByClassName("content");
|
||||
if (split) {
|
||||
for (let i = 0; i < need; i++) {
|
||||
let val = split[i] ? split[i].replace(/<!\[CDATA\[|\]\]>/g, '') : '';
|
||||
if (lastType === 'marked') val = '<div>' + marked.parse(val.replace(/^\s*<div[^>]*>|<\/div>\s*$/g, '')) + '</div>';
|
||||
contents[i].innerHTML = val;
|
||||
}
|
||||
} else {
|
||||
let val = text;
|
||||
if (lastType === 'marked') val = '<div>' + marked.parse(val.replace(/^\s*<div[^>]*>|<\/div>\s*$/g, '')) + '</div>';
|
||||
contents[0].innerHTML = val;
|
||||
}
|
||||
let children = Array.from(centerFloat.children);
|
||||
for (let i = 0; i < children.length - 1; i++) {
|
||||
let current = children[i];
|
||||
let next = children[i + 1];
|
||||
if (current.id !== 'mainTitle' && current.classList.contains('bfloat')) {
|
||||
if (!(next && next.tagName === 'BR')) {
|
||||
let br = document.createElement('br');
|
||||
centerFloat.insertBefore(br, next);
|
||||
}
|
||||
}
|
||||
}
|
||||
tex.style.visibility = "hidden";
|
||||
cou = 1;
|
||||
}
|
||||
}
|
||||
|
||||
window.showHtmlCode = showHtmlCode;
|
||||
window.showCode = showCode;
|
||||
|
||||
/** @brief Флаг нового состояния страницы при сохранении */
|
||||
window.newPageFunValue = "";
|
||||
@@ -1348,8 +1392,10 @@ function getPage(newPath) {
|
||||
centerFloat.insertBefore(br, placeholder);
|
||||
}
|
||||
const block = document.createElement('div');
|
||||
block.className = 'bfloat' + (i === 0 ? ' content1' : '');
|
||||
block.className = 'bfloat';
|
||||
block.style.fontSize = '1em';
|
||||
if (i !== 0) block.style.borderRadius = '10px';
|
||||
|
||||
const inner = document.createElement('div');
|
||||
inner.className = 'content';
|
||||
inner.innerHTML = c;
|
||||
|
||||
@@ -2,18 +2,20 @@
|
||||
<site>
|
||||
<sitename>site</sitename>
|
||||
<slogan>site</slogan>
|
||||
<index url="content/index" title="Новый ф6нрцуеыке" name="index" template="start" PageMenu="0,0" 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="">
|
||||
<index url="content/index" title="Новый ф6нрцуеыке" name="index" template="start" PageMenu="0,0" users="" group="" news="">
|
||||
<page1 url="content/rpi/index" title="Новый файл" name="page1" template="MedWait" PageMenu="0,1,2" users="" group="" news="">
|
||||
<underpage1 url="content/rpi/index" title="Загловок" name="underpage1" template="rpi" PageMenu="0,1,2" users="" group="" news="">
|
||||
</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="">
|
||||
</underpage2>
|
||||
<createSite url="data/createSite" title="Страница создание нового сайта" name="createSite" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm">
|
||||
<createSite url="data/createSite" title="Страница создание нового сайта" name="createSite" template="MedWait" PageMenu="0,1,2" users="" group="" news="">
|
||||
</createSite>
|
||||
</page1>
|
||||
<page2 url="content/index" title="Загловок" name="page2" template="rpi" PageMenu="0,1,2" users="" group="" news="" plugins="dgrm,SvgEditorM">
|
||||
<page2 url="content/index" title="Загловок" name="page2" template="rpi" PageMenu="0,1,2" users="" group="" news="">
|
||||
</page2>
|
||||
<uyr url="content/index" title="Новый syu6e5" name="uyr" template="MedWait" PageMenu="0,1,2" users="" group="" news="" plugins="">
|
||||
<uyr url="content/index" title="Новый syu6e5" name="uyr" template="MedWait" PageMenu="0,1,2" users="" group="" news="">
|
||||
</uyr>
|
||||
<markdownMarkedJS url="content/markdownMarkedJS" title="markdownMarkedJS" name="markdownMarkedJS" template="MedWait" PageMenu="0,1,2" users="" group="" news="">
|
||||
</markdownMarkedJS>
|
||||
</index>
|
||||
</site>
|
||||
|
||||
@@ -708,7 +708,6 @@ if (!isset($xmlstr->index)) {
|
||||
$index->addAttribute('users', '');
|
||||
$index->addAttribute('group', '');
|
||||
$index->addAttribute('news', '');
|
||||
$index->addAttribute('plugins', '');
|
||||
$xmlstr->asXML($FPfile);
|
||||
}
|
||||
$ansv['sitename'] =$xmlstr->sitename;
|
||||
@@ -735,7 +734,6 @@ if ($RURLstr!='error'){
|
||||
$ansv['template'] = $xmlstr->{$RURLstr[$i]}['template'];
|
||||
$ansv['title'] = $xmlstr->{$RURLstr[$i]}['title'];
|
||||
$ansv['page'] = $xmlstr->{$RURLstr[$i]};
|
||||
$ansv['page_plugins'] = (string)($xmlstr->{$RURLstr[$i]}['plugins'] ?? '');
|
||||
}
|
||||
$xmlstr = $xmlstr->{$RURLstr[$i]};
|
||||
}
|
||||
@@ -755,7 +753,7 @@ if ($RURLstr!='error'){
|
||||
* @param mixed $RURLstr Массив сегментов URL или строка 'error'
|
||||
* @return array Массив с информацией о странице, включая URL, шаблон, заголовок и плагины
|
||||
*/
|
||||
function loadPluginsInCenterBlock() {
|
||||
/* function loadPluginsInCenterBlock() {
|
||||
global $_SESSION, $path, $config;
|
||||
if ($_SESSION['Login'] == 'true') {
|
||||
$availablePlugins = ['dgrm', 'SvgEditorM', 'form_editor'];
|
||||
@@ -774,5 +772,5 @@ function loadPluginsInCenterBlock() {
|
||||
}
|
||||
}
|
||||
return $html;
|
||||
}
|
||||
} */
|
||||
?>
|
||||
36
error.txt
36
error.txt
@@ -1,29 +1,15 @@
|
||||
<![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цыкцып
|
||||
test1цыуквацыфавп
|
||||
</div>]]><![CDATA[<div>
|
||||
test2
|
||||
</div>]]>
|
||||
<![CDATA[<div>
|
||||
test1цыуквацыфавп
|
||||
</div>]]><![CDATA[<div>
|
||||
test2
|
||||
</div>]]>
|
||||
<![CDATA[<div>
|
||||
test1цыуквацыфавп
|
||||
</div>]]><![CDATA[<div>
|
||||
test2
|
||||
</div>]]>
|
||||
|
||||
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 738 KiB After Width: | Height: | Size: 739 KiB |
10
index.php
10
index.php
@@ -40,6 +40,12 @@ if (!isset($_SESSION['page_url'])) {
|
||||
$_SESSION['page_url'] = $config['page_url'];
|
||||
}
|
||||
|
||||
$pluginBlocks = ['dgrm', 'SvgEditorM', 'form_editor'];
|
||||
$pluginBlocksPath = $path . 'main_plugin/';
|
||||
$pluginBlocks = array_filter($pluginBlocks, function($block) use ($pluginBlocksPath) {
|
||||
return is_dir($pluginBlocksPath . $block);
|
||||
});
|
||||
|
||||
$methodRpc = null;
|
||||
|
||||
if ($_SERVER["REQUEST_METHOD"] === "POST" && strpos($_SERVER["CONTENT_TYPE"] ?? "", "application/json") !== false) {
|
||||
@@ -171,7 +177,7 @@ 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>';
|
||||
$config['content'] .= '<div class="%cfloat%" style="' . ($i == 0 ? '' : 'border-radius: 10px;') . '"><div class="content">' . $cdata . '</div></div>';
|
||||
}
|
||||
}
|
||||
foreach ($config as $key=>$value) if ($key!="request_url")
|
||||
@@ -200,7 +206,7 @@ foreach ($lang[$lng] as $key => $value) {
|
||||
}
|
||||
$html .= '<script>' . $Js . '</script>';
|
||||
|
||||
$html .= loadPluginsInCenterBlock();
|
||||
$html .= '<script src="/main_plugin/marked-master/marked.umd.js"></script>';
|
||||
$html .= includePlugin(['plugin' => 'siteSettings']);
|
||||
$html .= includePlugin(['plugin' => 'auth']);
|
||||
/* $html .= includePlugin(['plugin' => 'editor']); */
|
||||
|
||||
@@ -257,7 +257,7 @@ class Editor {
|
||||
Инициализация (выполняется после загрузки DOM)
|
||||
----------------------------- */
|
||||
|
||||
window.addEventListener('DOMContentLoaded', () => {
|
||||
window.addEventListener('LoadSvgEditorMJs', () => {
|
||||
let main = document.getElementById('main') || document.body;
|
||||
|
||||
let selection = document.getElementById('selector');
|
||||
|
||||
@@ -8,18 +8,6 @@ global $path, $_SESSION, $configAdmins;
|
||||
if (in_array($_SESSION['username'], $configAdmins, true)) {
|
||||
include $path . 'main_plugin/SvgEditorM/index.php';
|
||||
echo '<link rel="stylesheet" type="text/css" href="/main_plugin/SvgEditorM/SvgEditorM.css">';
|
||||
echo "<script type='module'>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const c = document.querySelector('.center-float');
|
||||
const d = document.getElementById('sidebar');
|
||||
if (c && d) {
|
||||
c.appendChild(document.createElement('br'));
|
||||
c.appendChild(d);
|
||||
import('/main_plugin/SvgEditorM/SvgEditorM.js');
|
||||
} else if (d) {
|
||||
d.remove();
|
||||
}
|
||||
});
|
||||
</script>";
|
||||
echo "<script type='module'>import('/main_plugin/SvgEditorM/SvgEditorM.js');</script>";
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -7,19 +7,7 @@
|
||||
global $path, $_SESSION, $configAdmins;
|
||||
if (in_array($_SESSION['username'], $configAdmins, true)) {
|
||||
echo file_get_contents($path . 'main_plugin/dgrm/index.php');
|
||||
echo "<script type='module'>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const c = document.querySelector('.center-float');
|
||||
const d = document.getElementById('dgrmDiv');
|
||||
if (c && d) {
|
||||
c.appendChild(document.createElement('br'));
|
||||
c.appendChild(d);
|
||||
import('/main_plugin/dgrm/index.js');
|
||||
} else if (d) {
|
||||
d.remove();
|
||||
}
|
||||
});
|
||||
</script>";
|
||||
echo '<link rel="stylesheet" type="text/css" href="/main_plugin/dgrm/dgrm.css">';
|
||||
echo "<script type='module'>import('/main_plugin/dgrm/index.js');</script>";
|
||||
echo '<link rel="stylesheet" type="text/css" href="/main_plugin/dgrm/dgrm.css">';
|
||||
}
|
||||
?>
|
||||
|
||||
@@ -246,6 +246,9 @@
|
||||
#toolbar-group-button-paste {
|
||||
background-position: 166px 517px;
|
||||
}
|
||||
#toolbar-group-button-structure {
|
||||
background-position: 166px 517px;
|
||||
}
|
||||
|
||||
.align-dropdown, .align-dropdown-oneImg {
|
||||
position: relative;
|
||||
@@ -376,6 +379,10 @@
|
||||
background-position: -318px 1824px;
|
||||
}
|
||||
|
||||
#markedBut {
|
||||
background-position: -318px 1824px;
|
||||
}
|
||||
|
||||
#bac {
|
||||
background-position: 645px 716px;
|
||||
}
|
||||
@@ -452,7 +459,7 @@
|
||||
background-position: 1045px 557px;
|
||||
}
|
||||
|
||||
/* #pluginSave {
|
||||
#pluginSave {
|
||||
background-position: -479px 1665px;
|
||||
}
|
||||
#pluginCreateLeft {
|
||||
@@ -467,12 +474,15 @@
|
||||
#pluginAddRight {
|
||||
background-position: -638px 1665px;
|
||||
}
|
||||
#pluginAddCenter {
|
||||
background-position: -838px 1665px;
|
||||
}
|
||||
#pluginDelete {
|
||||
background-position: -518px 1665px;
|
||||
}
|
||||
#pluginMove {
|
||||
background-position: -438px 1665px;
|
||||
} */
|
||||
}
|
||||
|
||||
#contentPageCreate {
|
||||
background-position: 926px 676px;
|
||||
|
||||
@@ -415,7 +415,7 @@ function clo(c) // Функция закры
|
||||
}
|
||||
|
||||
// действия блока плагинов
|
||||
let pluginDropdownContentId = document.getElementById("pluginDropdownContent");
|
||||
/* let pluginDropdownContentId = document.getElementById("pluginDropdownContent");
|
||||
pluginDropdownContentId.addEventListener('click', function () {
|
||||
let targetElement = document.getElementById(this.value);
|
||||
if (targetElement) {
|
||||
@@ -436,7 +436,7 @@ pluginDropdownContentId.addEventListener('click', function () {
|
||||
if (editMode == -1) {
|
||||
pluginDropdownContentId.style.backgroundColor = '';
|
||||
}
|
||||
});
|
||||
}); */
|
||||
|
||||
// действия блока элементов
|
||||
/* let elementDropdownContentId = document.getElementById("elementDropdownContent");
|
||||
@@ -455,7 +455,7 @@ mainActionsId.addEventListener('click', function () {
|
||||
switch (this.value) {
|
||||
case "save":
|
||||
saveChanges();
|
||||
break;
|
||||
break;fshowHtmlCode
|
||||
case "saveHow":
|
||||
saveChangesHow();
|
||||
break;
|
||||
@@ -564,13 +564,83 @@ function restoreSelection() {
|
||||
sel.addRange(range);
|
||||
}
|
||||
|
||||
/* плагины для центра */
|
||||
document.getElementById('pluginAddCenter').onclick = function pluginFunCenter() {
|
||||
jsonrpcRequest('getPluginBlocks', {})
|
||||
.then(folders => {
|
||||
const pluginAddSideName = document.getElementById('pluginAddCenterName');
|
||||
pluginAddSideName.innerHTML = '';
|
||||
folders.forEach(folder => {
|
||||
const option = document.createElement('option');
|
||||
option.value = folder;
|
||||
option.textContent = folder;
|
||||
pluginAddSideName.appendChild(option);
|
||||
});
|
||||
});
|
||||
};
|
||||
document.getElementById('pluginAddCenterFun_d').addEventListener('click', function() {
|
||||
const select = document.getElementById('pluginAddCenterName');
|
||||
const pluginName = select.value;
|
||||
if (!pluginName) return;
|
||||
if (document.querySelector('.' + pluginName)) return;
|
||||
|
||||
includePluginBlock(pluginName).then(fragment => {
|
||||
const centerFloat = document.querySelector('.center-float');
|
||||
if (!centerFloat) return;
|
||||
|
||||
const wrapper = document.createElement('div');
|
||||
wrapper.setAttribute('pluginblock', pluginName);
|
||||
wrapper.appendChild(document.createElement('br'));
|
||||
|
||||
const scripts = [];
|
||||
Array.from(fragment.childNodes).forEach(node => {
|
||||
if (node.tagName === 'SCRIPT') {
|
||||
const s = document.createElement('script');
|
||||
if (node.src) {
|
||||
s.src = node.src;
|
||||
s.async = false;
|
||||
scripts.push(new Promise(res => s.onload = res));
|
||||
} else {
|
||||
s.textContent = node.textContent;
|
||||
}
|
||||
document.body.appendChild(s);
|
||||
} else {
|
||||
wrapper.appendChild(node);
|
||||
}
|
||||
});
|
||||
|
||||
centerFloat.appendChild(wrapper);
|
||||
|
||||
Promise.all(scripts).then(() => {
|
||||
const event = new Event("Load" + pluginName + "Js");
|
||||
document.dispatchEvent(event);
|
||||
window.dispatchEvent(event);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
// Пример изменения includePlugin
|
||||
function includePluginBlock(plugin) {
|
||||
return jsonrpcRequest("includePlugin", { plugin })
|
||||
.then(html => {
|
||||
const frag = document.createDocumentFragment();
|
||||
const temp = document.createElement('div');
|
||||
temp.innerHTML = html;
|
||||
|
||||
Array.from(temp.childNodes).forEach(node => {
|
||||
if (node.nodeType === 1) node.setAttribute('plugin', plugin);
|
||||
frag.appendChild(node);
|
||||
});
|
||||
|
||||
return frag;
|
||||
});
|
||||
}
|
||||
|
||||
// Взаимодействие с плагинами
|
||||
/* document.getElementById('pluginCreateLeft').onclick = function() { pluginFun('create', 'left'); };
|
||||
document.getElementById('pluginCreateRight').onclick = function() { pluginFun('create', 'right'); }; */
|
||||
document.getElementById('pluginAddLeft').onclick = function() { pluginFun('add', 'left'); };
|
||||
document.getElementById('pluginAddRight').onclick = function() { pluginFun('add', 'right'); };
|
||||
|
||||
|
||||
/* document.getElementById('pluginRulesButton1').onclick = function() { pluginRulesFun('pluginRulesBlock1'); };
|
||||
document.getElementById('pluginRulesButton2').onclick = function() { pluginRulesFun('pluginRulesBlock2'); }; */
|
||||
|
||||
@@ -740,7 +810,7 @@ function editFun3(i) {
|
||||
function editFun4(i) {
|
||||
}
|
||||
function editFun5(i) {
|
||||
pluginDropdownContentId.style.backgroundColor = '';
|
||||
/* pluginDropdownContentId.style.backgroundColor = ''; */
|
||||
}
|
||||
|
||||
let pluginTakeCheck = 0;
|
||||
@@ -2211,19 +2281,22 @@ addEventListener("LoadeditorJs", function()
|
||||
document.querySelectorAll("#panel .toolbar-group").forEach(g => {
|
||||
const btn = g.querySelector(".toolbar-group-button");
|
||||
const content = g.querySelector(".toolbar-group-content");
|
||||
|
||||
const toggle = () => {
|
||||
const isHidden = content.style.display === "none";
|
||||
content.style.display = isHidden ? "" : "none";
|
||||
const hidden = content.style.display === "none";
|
||||
g.classList.toggle("open", !hidden);
|
||||
};
|
||||
if (btn && content) {
|
||||
btn.addEventListener("click", () => {
|
||||
const isHidden = content.style.display === "none";
|
||||
content.style.display = isHidden ? "" : "none";
|
||||
if (btn && content) {
|
||||
const isHidden = content.style.display === "none";
|
||||
g.classList.toggle("open", !isHidden);
|
||||
}
|
||||
btn.addEventListener("click", e => {
|
||||
toggle();
|
||||
});
|
||||
if (btn && content) {
|
||||
const isHidden = content.style.display === "none";
|
||||
g.classList.toggle("open", !isHidden);
|
||||
}
|
||||
g.addEventListener("click", e => {
|
||||
if (e.target === g) toggle();
|
||||
});
|
||||
const isHidden = content.style.display === "none";
|
||||
g.classList.toggle("open", !isHidden);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -156,6 +156,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php /** @brief Список выбора плагина в ентре */ $pluginAddCenter_d; ?>
|
||||
<div id="pluginAddCenter_d" class="cust sb borderStyle">
|
||||
<div class="deploy">
|
||||
{{add_plugin_center}}:<br>
|
||||
<label for="pluginAddCenterName">{{select_plugin}}</label>
|
||||
<select id="pluginAddCenterName" class="sele"></select>
|
||||
<button id="pluginAddCenterFun_d" class="butin">{{select}}</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php /** @brief Редактирование меню страницы */ $contentPageCreate_d; ?>
|
||||
<div id="contentPageCreate_d" class="cust sb borderStyle">
|
||||
<div class="deploy">
|
||||
@@ -201,7 +211,8 @@
|
||||
<span class="toolbar-group-content">
|
||||
|
||||
<div id="settingsMain" class="editi editib swit"></div>
|
||||
<div id="htm" onclick="showHtmlCode()" class="editi editib pers" alt="{{html_code_main_block_alt}}" title="{{html_code_main_block_title}}"></div>
|
||||
<div id="htm" onclick="showCode('html')" class="editi editib pers" alt="{{html_code_main_block_alt}}" title="{{html_code_main_block_title}}"></div>
|
||||
<!-- <div id="markedBut" onclick="showCode('marked')" class="editi editib pers" alt="{{marked_code_main_block_alt}}" title="{{marked_code_main_block_title}}"></div> -->
|
||||
<div id="bac" class="editi editib pers" alt="{{undo_action_alt}}" title="{{undo_action_title}}"></div>
|
||||
<div id="forw" class="editi editib pers" alt="{{redo_action_alt}}" title="{{redo_action_title}}"></div>
|
||||
|
||||
@@ -283,16 +294,21 @@
|
||||
<div id="hr" class="editi editib pers editf"></div>
|
||||
<div id="tabl" class="editi editib pers editf"></div>
|
||||
<div id="copyr" class="editi editib swit"></div>
|
||||
|
||||
<select id="pluginDropdownContent" class="edits pers3">
|
||||
<option id="pluginAddLeft" value="pluginAddLeft" class="swit">{{add_plugin_left}}</option>
|
||||
<option id="pluginAddRight" value="pluginAddRight" class="swit">{{add_plugin_right}}</option>
|
||||
<option id="pluginDelete" value="pluginDelete" class="editfText">{{delete_plugin}}</option>
|
||||
<option id="pluginMove" value="pluginMove" class="editfText">{{move_plugin}}</option>
|
||||
</select>
|
||||
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="toolbar-group">
|
||||
<span id="toolbar-group-button-structure" class="editi editib pers toolbar-group-button"></span>
|
||||
<span class="toolbar-group-content">
|
||||
|
||||
<div id="pluginAddLeft" class="editi editib swit editf"></div>
|
||||
<div id="pluginAddRight" class="editi editib swit editf"></div>
|
||||
<div id="pluginAddCenter" class="editi editib swit editf"></div>
|
||||
<div id="pluginDelete" class="editi editib pers editf"></div>
|
||||
<div id="pluginMove" class="editi editib pers editf"></div>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
</div><div id="arrow-right" class="arrow borderStyle">⊳</div></div>
|
||||
|
||||
<!-- текстовый редактор -->
|
||||
|
||||
@@ -11,23 +11,20 @@
|
||||
* @throws Exception В случае проблем с сохранением контента
|
||||
*/
|
||||
function savePageCenterBlock($params) {
|
||||
global $config, $path, $_SESSION;
|
||||
global $config, $path, $_SESSION;
|
||||
|
||||
$saveContentIdXml = $path . $_SESSION['page_url'] . ".page.php";
|
||||
$saveContentIdData = $params['saveContentIdData'] ?? '';
|
||||
$saveContentIdData = html_entity_decode($params['saveContentIdData'] ?? '', ENT_QUOTES, 'UTF-8');
|
||||
|
||||
$xml = file_get_contents($saveContentIdXml);
|
||||
|
||||
$xml = file_get_contents($saveContentIdXml);
|
||||
$xml = preg_replace('#<' . $_SESSION['lng'] . '>.*?</' . $_SESSION['lng'] . '>#s', '<' . $_SESSION['lng'] . '></' . $_SESSION['lng'] . '>', $xml);
|
||||
$xml = preg_replace('#(<' . $_SESSION['lng'] . '>)#', "$1\n" . $saveContentIdData . "\n", $xml, 1);
|
||||
|
||||
if (preg_match('#<' . $_SESSION['lng'] . '>#', $xml, $pos)) {
|
||||
$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);
|
||||
if (file_put_contents($saveContentIdXml, $xml) !== false) return 'true';
|
||||
throw new Exception("Problem saving content", -32003);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Сохраняет левый и правый блоки страницы
|
||||
* @param array $params Массив с данными блоков, ключ 'floatsBlock' содержит массив левых и правых блоков
|
||||
@@ -255,6 +252,20 @@ function getPlugin($params) {
|
||||
return ob_get_clean();
|
||||
}
|
||||
|
||||
/**
|
||||
* Возвращает список доступных плагинов в виде JSON
|
||||
* @param array $params Входные параметры запроса (не используются)
|
||||
* @return string JSON-массив с названиями плагинов
|
||||
* @throws Exception Если глобальная переменная $pluginBlocks не определена или пуста
|
||||
*/
|
||||
function getPluginBlocks($params) {
|
||||
global $pluginBlocks;
|
||||
if (!isset($pluginBlocks) || !is_array($pluginBlocks) || empty($pluginBlocks)) {
|
||||
throw new Exception("Нет доступных плагинов", -1);
|
||||
}
|
||||
return $pluginBlocks;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Загружает изображение пользователя из Base64 и сохраняет на сервер
|
||||
* @param array $params Массив с данными изображения, включая 'userImgBase64' и 'userImgName'
|
||||
|
||||
@@ -17,5 +17,5 @@ foreach ($lang[$lng] as $key => $value) {
|
||||
$placeholders['{{' . $key . '}}'] = $value;
|
||||
}
|
||||
|
||||
echo 'window.addEventListener("load", function() {' . strtr(file_get_contents($path . 'form_editor.js'), $placeholders) . '});';
|
||||
echo 'window.addEventListener("Loadform_editorJs", function() {' . strtr(file_get_contents($path . 'form_editor.js'), $placeholders) . '});';
|
||||
?>
|
||||
|
||||
@@ -13,27 +13,11 @@ $lang = include $path . 'main_plugin/form_editor/lang.php';
|
||||
$lng = $_SESSION['lng'] ?? 'en';
|
||||
|
||||
if (in_array($_SESSION['username'], $configAdmins, true)) {
|
||||
|
||||
$Html = file_get_contents($path . 'main_plugin/form_editor/form_editor.php');
|
||||
foreach ($lang[$lng] as $key => $value) {
|
||||
$Html = str_replace('{{' . $key . '}}', $value, $Html);
|
||||
}
|
||||
|
||||
echo $Html;
|
||||
|
||||
echo "<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const c = document.querySelector('.center-float');
|
||||
const d = document.getElementById('formEditor');
|
||||
if (c && d) {
|
||||
c.appendChild(document.createElement('br'));
|
||||
c.appendChild(d);
|
||||
} else if (d) {
|
||||
d.remove();
|
||||
}
|
||||
});
|
||||
</script>";
|
||||
|
||||
echo '<link rel="stylesheet" type="text/css" href="/main_plugin/form_editor/form_editor.css">';
|
||||
echo '<script type="text/javascript" src="/main_plugin/form_editor/lang.js.php?lng=' . $lng . '"></script>';
|
||||
}
|
||||
|
||||
753
main_plugin/marked-master/marked.d.ts
vendored
Normal file
753
main_plugin/marked-master/marked.d.ts
vendored
Normal file
@@ -0,0 +1,753 @@
|
||||
// Generated by dts-bundle-generator v9.5.1
|
||||
|
||||
export type MarkedToken = (Tokens.Blockquote | Tokens.Br | Tokens.Checkbox | Tokens.Code | Tokens.Codespan | Tokens.Def | Tokens.Del | Tokens.Em | Tokens.Escape | Tokens.Heading | Tokens.Hr | Tokens.HTML | Tokens.Image | Tokens.Link | Tokens.List | Tokens.ListItem | Tokens.Paragraph | Tokens.Space | Tokens.Strong | Tokens.Table | Tokens.Tag | Tokens.Text);
|
||||
export type Token = (MarkedToken | Tokens.Generic);
|
||||
export declare namespace Tokens {
|
||||
interface Blockquote {
|
||||
type: "blockquote";
|
||||
raw: string;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Br {
|
||||
type: "br";
|
||||
raw: string;
|
||||
}
|
||||
interface Checkbox {
|
||||
type: "checkbox";
|
||||
raw: string;
|
||||
checked: boolean;
|
||||
}
|
||||
interface Code {
|
||||
type: "code";
|
||||
raw: string;
|
||||
codeBlockStyle?: "indented";
|
||||
lang?: string;
|
||||
text: string;
|
||||
escaped?: boolean;
|
||||
}
|
||||
interface Codespan {
|
||||
type: "codespan";
|
||||
raw: string;
|
||||
text: string;
|
||||
}
|
||||
interface Def {
|
||||
type: "def";
|
||||
raw: string;
|
||||
tag: string;
|
||||
href: string;
|
||||
title: string;
|
||||
}
|
||||
interface Del {
|
||||
type: "del";
|
||||
raw: string;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Em {
|
||||
type: "em";
|
||||
raw: string;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Escape {
|
||||
type: "escape";
|
||||
raw: string;
|
||||
text: string;
|
||||
}
|
||||
interface Generic {
|
||||
[index: string]: any;
|
||||
type: string;
|
||||
raw: string;
|
||||
tokens?: Token[];
|
||||
}
|
||||
interface Heading {
|
||||
type: "heading";
|
||||
raw: string;
|
||||
depth: number;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Hr {
|
||||
type: "hr";
|
||||
raw: string;
|
||||
}
|
||||
interface HTML {
|
||||
type: "html";
|
||||
raw: string;
|
||||
pre: boolean;
|
||||
text: string;
|
||||
block: boolean;
|
||||
}
|
||||
interface Image {
|
||||
type: "image";
|
||||
raw: string;
|
||||
href: string;
|
||||
title: string | null;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Link {
|
||||
type: "link";
|
||||
raw: string;
|
||||
href: string;
|
||||
title?: string | null;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface List {
|
||||
type: "list";
|
||||
raw: string;
|
||||
ordered: boolean;
|
||||
start: number | "";
|
||||
loose: boolean;
|
||||
items: ListItem[];
|
||||
}
|
||||
interface ListItem {
|
||||
type: "list_item";
|
||||
raw: string;
|
||||
task: boolean;
|
||||
checked?: boolean;
|
||||
loose: boolean;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Paragraph {
|
||||
type: "paragraph";
|
||||
raw: string;
|
||||
pre?: boolean;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Space {
|
||||
type: "space";
|
||||
raw: string;
|
||||
}
|
||||
interface Strong {
|
||||
type: "strong";
|
||||
raw: string;
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
}
|
||||
interface Table {
|
||||
type: "table";
|
||||
raw: string;
|
||||
align: Array<"center" | "left" | "right" | null>;
|
||||
header: TableCell[];
|
||||
rows: TableCell[][];
|
||||
}
|
||||
interface TableCell {
|
||||
text: string;
|
||||
tokens: Token[];
|
||||
header: boolean;
|
||||
align: "center" | "left" | "right" | null;
|
||||
}
|
||||
interface TableRow<P = string> {
|
||||
text: P;
|
||||
}
|
||||
interface Tag {
|
||||
type: "html";
|
||||
raw: string;
|
||||
inLink: boolean;
|
||||
inRawBlock: boolean;
|
||||
text: string;
|
||||
block: boolean;
|
||||
}
|
||||
interface Text {
|
||||
type: "text";
|
||||
raw: string;
|
||||
text: string;
|
||||
tokens?: Token[];
|
||||
escaped?: boolean;
|
||||
}
|
||||
}
|
||||
export type Links = Record<string, Pick<Tokens.Link | Tokens.Image, "href" | "title">>;
|
||||
export type TokensList = Token[] & {
|
||||
links: Links;
|
||||
};
|
||||
/**
|
||||
* Renderer
|
||||
*/
|
||||
declare class _Renderer<ParserOutput = string, RendererOutput = string> {
|
||||
options: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
parser: _Parser<ParserOutput, RendererOutput>;
|
||||
constructor(options?: MarkedOptions<ParserOutput, RendererOutput>);
|
||||
space(token: Tokens.Space): RendererOutput;
|
||||
code({ text, lang, escaped }: Tokens.Code): RendererOutput;
|
||||
blockquote({ tokens }: Tokens.Blockquote): RendererOutput;
|
||||
html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput;
|
||||
def(token: Tokens.Def): RendererOutput;
|
||||
heading({ tokens, depth }: Tokens.Heading): RendererOutput;
|
||||
hr(token: Tokens.Hr): RendererOutput;
|
||||
list(token: Tokens.List): RendererOutput;
|
||||
listitem(item: Tokens.ListItem): RendererOutput;
|
||||
checkbox({ checked }: Tokens.Checkbox): RendererOutput;
|
||||
paragraph({ tokens }: Tokens.Paragraph): RendererOutput;
|
||||
table(token: Tokens.Table): RendererOutput;
|
||||
tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput;
|
||||
tablecell(token: Tokens.TableCell): RendererOutput;
|
||||
/**
|
||||
* span level renderer
|
||||
*/
|
||||
strong({ tokens }: Tokens.Strong): RendererOutput;
|
||||
em({ tokens }: Tokens.Em): RendererOutput;
|
||||
codespan({ text }: Tokens.Codespan): RendererOutput;
|
||||
br(token: Tokens.Br): RendererOutput;
|
||||
del({ tokens }: Tokens.Del): RendererOutput;
|
||||
link({ href, title, tokens }: Tokens.Link): RendererOutput;
|
||||
image({ href, title, text, tokens }: Tokens.Image): RendererOutput;
|
||||
text(token: Tokens.Text | Tokens.Escape): RendererOutput;
|
||||
}
|
||||
/**
|
||||
* TextRenderer
|
||||
* returns only the textual part of the token
|
||||
*/
|
||||
declare class _TextRenderer<RendererOutput = string> {
|
||||
strong({ text }: Tokens.Strong): RendererOutput;
|
||||
em({ text }: Tokens.Em): RendererOutput;
|
||||
codespan({ text }: Tokens.Codespan): RendererOutput;
|
||||
del({ text }: Tokens.Del): RendererOutput;
|
||||
html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput;
|
||||
text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput;
|
||||
link({ text }: Tokens.Link): RendererOutput;
|
||||
image({ text }: Tokens.Image): RendererOutput;
|
||||
br(): RendererOutput;
|
||||
checkbox({ raw }: Tokens.Checkbox): RendererOutput;
|
||||
}
|
||||
/**
|
||||
* Parsing & Compiling
|
||||
*/
|
||||
declare class _Parser<ParserOutput = string, RendererOutput = string> {
|
||||
options: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
renderer: _Renderer<ParserOutput, RendererOutput>;
|
||||
textRenderer: _TextRenderer<RendererOutput>;
|
||||
constructor(options?: MarkedOptions<ParserOutput, RendererOutput>);
|
||||
/**
|
||||
* Static Parse Method
|
||||
*/
|
||||
static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>): ParserOutput;
|
||||
/**
|
||||
* Static Parse Inline Method
|
||||
*/
|
||||
static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>): ParserOutput;
|
||||
/**
|
||||
* Parse Loop
|
||||
*/
|
||||
parse(tokens: Token[]): ParserOutput;
|
||||
/**
|
||||
* Parse Inline Tokens
|
||||
*/
|
||||
parseInline(tokens: Token[], renderer?: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput>): ParserOutput;
|
||||
}
|
||||
declare const other: {
|
||||
codeRemoveIndent: RegExp;
|
||||
outputLinkReplace: RegExp;
|
||||
indentCodeCompensation: RegExp;
|
||||
beginningSpace: RegExp;
|
||||
endingHash: RegExp;
|
||||
startingSpaceChar: RegExp;
|
||||
endingSpaceChar: RegExp;
|
||||
nonSpaceChar: RegExp;
|
||||
newLineCharGlobal: RegExp;
|
||||
tabCharGlobal: RegExp;
|
||||
multipleSpaceGlobal: RegExp;
|
||||
blankLine: RegExp;
|
||||
doubleBlankLine: RegExp;
|
||||
blockquoteStart: RegExp;
|
||||
blockquoteSetextReplace: RegExp;
|
||||
blockquoteSetextReplace2: RegExp;
|
||||
listReplaceTabs: RegExp;
|
||||
listReplaceNesting: RegExp;
|
||||
listIsTask: RegExp;
|
||||
listReplaceTask: RegExp;
|
||||
listTaskCheckbox: RegExp;
|
||||
anyLine: RegExp;
|
||||
hrefBrackets: RegExp;
|
||||
tableDelimiter: RegExp;
|
||||
tableAlignChars: RegExp;
|
||||
tableRowBlankLine: RegExp;
|
||||
tableAlignRight: RegExp;
|
||||
tableAlignCenter: RegExp;
|
||||
tableAlignLeft: RegExp;
|
||||
startATag: RegExp;
|
||||
endATag: RegExp;
|
||||
startPreScriptTag: RegExp;
|
||||
endPreScriptTag: RegExp;
|
||||
startAngleBracket: RegExp;
|
||||
endAngleBracket: RegExp;
|
||||
pedanticHrefTitle: RegExp;
|
||||
unicodeAlphaNumeric: RegExp;
|
||||
escapeTest: RegExp;
|
||||
escapeReplace: RegExp;
|
||||
escapeTestNoEncode: RegExp;
|
||||
escapeReplaceNoEncode: RegExp;
|
||||
unescapeTest: RegExp;
|
||||
caret: RegExp;
|
||||
percentDecode: RegExp;
|
||||
findPipe: RegExp;
|
||||
splitPipe: RegExp;
|
||||
slashPipe: RegExp;
|
||||
carriageReturn: RegExp;
|
||||
spaceLine: RegExp;
|
||||
notSpaceStart: RegExp;
|
||||
endingNewline: RegExp;
|
||||
listItemRegex: (bull: string) => RegExp;
|
||||
nextBulletRegex: (indent: number) => RegExp;
|
||||
hrRegex: (indent: number) => RegExp;
|
||||
fencesBeginRegex: (indent: number) => RegExp;
|
||||
headingBeginRegex: (indent: number) => RegExp;
|
||||
htmlBeginRegex: (indent: number) => RegExp;
|
||||
};
|
||||
declare const blockNormal: {
|
||||
blockquote: RegExp;
|
||||
code: RegExp;
|
||||
def: RegExp;
|
||||
fences: RegExp;
|
||||
heading: RegExp;
|
||||
hr: RegExp;
|
||||
html: RegExp;
|
||||
lheading: RegExp;
|
||||
list: RegExp;
|
||||
newline: RegExp;
|
||||
paragraph: RegExp;
|
||||
table: RegExp;
|
||||
text: RegExp;
|
||||
};
|
||||
export type BlockKeys = keyof typeof blockNormal;
|
||||
declare const inlineNormal: {
|
||||
_backpedal: RegExp;
|
||||
anyPunctuation: RegExp;
|
||||
autolink: RegExp;
|
||||
blockSkip: RegExp;
|
||||
br: RegExp;
|
||||
code: RegExp;
|
||||
del: RegExp;
|
||||
emStrongLDelim: RegExp;
|
||||
emStrongRDelimAst: RegExp;
|
||||
emStrongRDelimUnd: RegExp;
|
||||
escape: RegExp;
|
||||
link: RegExp;
|
||||
nolink: RegExp;
|
||||
punctuation: RegExp;
|
||||
reflink: RegExp;
|
||||
reflinkSearch: RegExp;
|
||||
tag: RegExp;
|
||||
text: RegExp;
|
||||
url: RegExp;
|
||||
};
|
||||
export type InlineKeys = keyof typeof inlineNormal;
|
||||
export interface Rules {
|
||||
other: typeof other;
|
||||
block: Record<BlockKeys, RegExp>;
|
||||
inline: Record<InlineKeys, RegExp>;
|
||||
}
|
||||
/**
|
||||
* Tokenizer
|
||||
*/
|
||||
declare class _Tokenizer<ParserOutput = string, RendererOutput = string> {
|
||||
options: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
rules: Rules;
|
||||
lexer: _Lexer<ParserOutput, RendererOutput>;
|
||||
constructor(options?: MarkedOptions<ParserOutput, RendererOutput>);
|
||||
space(src: string): Tokens.Space | undefined;
|
||||
code(src: string): Tokens.Code | undefined;
|
||||
fences(src: string): Tokens.Code | undefined;
|
||||
heading(src: string): Tokens.Heading | undefined;
|
||||
hr(src: string): Tokens.Hr | undefined;
|
||||
blockquote(src: string): Tokens.Blockquote | undefined;
|
||||
list(src: string): Tokens.List | undefined;
|
||||
html(src: string): Tokens.HTML | undefined;
|
||||
def(src: string): Tokens.Def | undefined;
|
||||
table(src: string): Tokens.Table | undefined;
|
||||
lheading(src: string): Tokens.Heading | undefined;
|
||||
paragraph(src: string): Tokens.Paragraph | undefined;
|
||||
text(src: string): Tokens.Text | undefined;
|
||||
escape(src: string): Tokens.Escape | undefined;
|
||||
tag(src: string): Tokens.Tag | undefined;
|
||||
link(src: string): Tokens.Link | Tokens.Image | undefined;
|
||||
reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined;
|
||||
emStrong(src: string, maskedSrc: string, prevChar?: string): Tokens.Em | Tokens.Strong | undefined;
|
||||
codespan(src: string): Tokens.Codespan | undefined;
|
||||
br(src: string): Tokens.Br | undefined;
|
||||
del(src: string): Tokens.Del | undefined;
|
||||
autolink(src: string): Tokens.Link | undefined;
|
||||
url(src: string): Tokens.Link | undefined;
|
||||
inlineText(src: string): Tokens.Text | undefined;
|
||||
}
|
||||
declare class _Hooks<ParserOutput = string, RendererOutput = string> {
|
||||
options: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
block?: boolean;
|
||||
constructor(options?: MarkedOptions<ParserOutput, RendererOutput>);
|
||||
static passThroughHooks: Set<string>;
|
||||
static passThroughHooksRespectAsync: Set<string>;
|
||||
/**
|
||||
* Process markdown before marked
|
||||
*/
|
||||
preprocess(markdown: string): string;
|
||||
/**
|
||||
* Process HTML after marked is finished
|
||||
*/
|
||||
postprocess(html: ParserOutput): ParserOutput;
|
||||
/**
|
||||
* Process all tokens before walk tokens
|
||||
*/
|
||||
processAllTokens(tokens: Token[] | TokensList): Token[] | TokensList;
|
||||
/**
|
||||
* Mask contents that should not be interpreted as em/strong delimiters
|
||||
*/
|
||||
emStrongMask(src: string): string;
|
||||
/**
|
||||
* Provide function to tokenize markdown
|
||||
*/
|
||||
provideLexer(): typeof _Lexer.lexInline;
|
||||
/**
|
||||
* Provide function to parse tokens
|
||||
*/
|
||||
provideParser(): (tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput> | undefined) => ParserOutput;
|
||||
}
|
||||
export interface TokenizerThis {
|
||||
lexer: _Lexer;
|
||||
}
|
||||
export type TokenizerExtensionFunction = (this: TokenizerThis, src: string, tokens: Token[] | TokensList) => Tokens.Generic | undefined;
|
||||
export type TokenizerStartFunction = (this: TokenizerThis, src: string) => number | void;
|
||||
export interface TokenizerExtension {
|
||||
name: string;
|
||||
level: "block" | "inline";
|
||||
start?: TokenizerStartFunction;
|
||||
tokenizer: TokenizerExtensionFunction;
|
||||
childTokens?: string[];
|
||||
}
|
||||
export interface RendererThis<ParserOutput = string, RendererOutput = string> {
|
||||
parser: _Parser<ParserOutput, RendererOutput>;
|
||||
}
|
||||
export type RendererExtensionFunction<ParserOutput = string, RendererOutput = string> = (this: RendererThis<ParserOutput, RendererOutput>, token: Tokens.Generic) => RendererOutput | false | undefined;
|
||||
export interface RendererExtension<ParserOutput = string, RendererOutput = string> {
|
||||
name: string;
|
||||
renderer: RendererExtensionFunction<ParserOutput, RendererOutput>;
|
||||
}
|
||||
export type TokenizerAndRendererExtension<ParserOutput = string, RendererOutput = string> = TokenizerExtension | RendererExtension<ParserOutput, RendererOutput> | (TokenizerExtension & RendererExtension<ParserOutput, RendererOutput>);
|
||||
export type HooksApi<ParserOutput = string, RendererOutput = string> = Omit<_Hooks<ParserOutput, RendererOutput>, "constructor" | "options" | "block">;
|
||||
export type HooksObject<ParserOutput = string, RendererOutput = string> = {
|
||||
[K in keyof HooksApi<ParserOutput, RendererOutput>]?: (this: _Hooks<ParserOutput, RendererOutput>, ...args: Parameters<HooksApi<ParserOutput, RendererOutput>[K]>) => ReturnType<HooksApi<ParserOutput, RendererOutput>[K]> | Promise<ReturnType<HooksApi<ParserOutput, RendererOutput>[K]>>;
|
||||
};
|
||||
export type RendererApi<ParserOutput = string, RendererOutput = string> = Omit<_Renderer<ParserOutput, RendererOutput>, "constructor" | "options" | "parser">;
|
||||
export type RendererObject<ParserOutput = string, RendererOutput = string> = {
|
||||
[K in keyof RendererApi<ParserOutput, RendererOutput>]?: (this: _Renderer<ParserOutput, RendererOutput>, ...args: Parameters<RendererApi<ParserOutput, RendererOutput>[K]>) => ReturnType<RendererApi<ParserOutput, RendererOutput>[K]> | false;
|
||||
};
|
||||
export type TokenizerApi<ParserOutput = string, RendererOutput = string> = Omit<_Tokenizer<ParserOutput, RendererOutput>, "constructor" | "options" | "rules" | "lexer">;
|
||||
export type TokenizerObject<ParserOutput = string, RendererOutput = string> = {
|
||||
[K in keyof TokenizerApi<ParserOutput, RendererOutput>]?: (this: _Tokenizer<ParserOutput, RendererOutput>, ...args: Parameters<TokenizerApi<ParserOutput, RendererOutput>[K]>) => ReturnType<TokenizerApi<ParserOutput, RendererOutput>[K]> | false;
|
||||
};
|
||||
export interface MarkedExtension<ParserOutput = string, RendererOutput = string> {
|
||||
/**
|
||||
* True will tell marked to await any walkTokens functions before parsing the tokens and returning an HTML string.
|
||||
*/
|
||||
async?: boolean;
|
||||
/**
|
||||
* Enable GFM line breaks. This option requires the gfm option to be true.
|
||||
*/
|
||||
breaks?: boolean;
|
||||
/**
|
||||
* Add tokenizers and renderers to marked
|
||||
*/
|
||||
extensions?: TokenizerAndRendererExtension<ParserOutput, RendererOutput>[] | null;
|
||||
/**
|
||||
* Enable GitHub flavored markdown.
|
||||
*/
|
||||
gfm?: boolean;
|
||||
/**
|
||||
* Hooks are methods that hook into some part of marked.
|
||||
* preprocess is called to process markdown before sending it to marked.
|
||||
* processAllTokens is called with the TokensList before walkTokens.
|
||||
* postprocess is called to process html after marked has finished parsing.
|
||||
* emStrongMask is called to mask contents that should not be interpreted as em/strong delimiters.
|
||||
* provideLexer is called to provide a function to tokenize markdown.
|
||||
* provideParser is called to provide a function to parse tokens.
|
||||
*/
|
||||
hooks?: HooksObject<ParserOutput, RendererOutput> | null;
|
||||
/**
|
||||
* Conform to obscure parts of markdown.pl as much as possible. Don't fix any of the original markdown bugs or poor behavior.
|
||||
*/
|
||||
pedantic?: boolean;
|
||||
/**
|
||||
* Type: object Default: new Renderer()
|
||||
*
|
||||
* An object containing functions to render tokens to HTML.
|
||||
*/
|
||||
renderer?: RendererObject<ParserOutput, RendererOutput> | null;
|
||||
/**
|
||||
* Shows an HTML error message when rendering fails.
|
||||
*/
|
||||
silent?: boolean;
|
||||
/**
|
||||
* The tokenizer defines how to turn markdown text into tokens.
|
||||
*/
|
||||
tokenizer?: TokenizerObject | null;
|
||||
/**
|
||||
* The walkTokens function gets called with every token.
|
||||
* Child tokens are called before moving on to sibling tokens.
|
||||
* Each token is passed by reference so updates are persisted when passed to the parser.
|
||||
* The return value of the function is ignored.
|
||||
*/
|
||||
walkTokens?: ((token: Token) => void | Promise<void>) | null;
|
||||
}
|
||||
export interface MarkedOptions<ParserOutput = string, RendererOutput = string> extends Omit<MarkedExtension<ParserOutput, RendererOutput>, "hooks" | "renderer" | "tokenizer" | "extensions" | "walkTokens"> {
|
||||
/**
|
||||
* Hooks are methods that hook into some part of marked.
|
||||
*/
|
||||
hooks?: _Hooks<ParserOutput, RendererOutput> | null;
|
||||
/**
|
||||
* Type: object Default: new Renderer()
|
||||
*
|
||||
* An object containing functions to render tokens to HTML.
|
||||
*/
|
||||
renderer?: _Renderer<ParserOutput, RendererOutput> | null;
|
||||
/**
|
||||
* The tokenizer defines how to turn markdown text into tokens.
|
||||
*/
|
||||
tokenizer?: _Tokenizer<ParserOutput, RendererOutput> | null;
|
||||
/**
|
||||
* Custom extensions
|
||||
*/
|
||||
extensions?: null | {
|
||||
renderers: {
|
||||
[name: string]: RendererExtensionFunction<ParserOutput, RendererOutput>;
|
||||
};
|
||||
childTokens: {
|
||||
[name: string]: string[];
|
||||
};
|
||||
inline?: TokenizerExtensionFunction[];
|
||||
block?: TokenizerExtensionFunction[];
|
||||
startInline?: TokenizerStartFunction[];
|
||||
startBlock?: TokenizerStartFunction[];
|
||||
};
|
||||
/**
|
||||
* walkTokens function returns array of values for Promise.all
|
||||
*/
|
||||
walkTokens?: null | ((token: Token) => void | Promise<void> | (void | Promise<void>)[]);
|
||||
}
|
||||
/**
|
||||
* Block Lexer
|
||||
*/
|
||||
declare class _Lexer<ParserOutput = string, RendererOutput = string> {
|
||||
tokens: TokensList;
|
||||
options: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
state: {
|
||||
inLink: boolean;
|
||||
inRawBlock: boolean;
|
||||
top: boolean;
|
||||
};
|
||||
private tokenizer;
|
||||
private inlineQueue;
|
||||
constructor(options?: MarkedOptions<ParserOutput, RendererOutput>);
|
||||
/**
|
||||
* Expose Rules
|
||||
*/
|
||||
static get rules(): {
|
||||
block: {
|
||||
normal: {
|
||||
blockquote: RegExp;
|
||||
code: RegExp;
|
||||
def: RegExp;
|
||||
fences: RegExp;
|
||||
heading: RegExp;
|
||||
hr: RegExp;
|
||||
html: RegExp;
|
||||
lheading: RegExp;
|
||||
list: RegExp;
|
||||
newline: RegExp;
|
||||
paragraph: RegExp;
|
||||
table: RegExp;
|
||||
text: RegExp;
|
||||
};
|
||||
gfm: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "def" | "heading" | "list" | "paragraph" | "fences" | "lheading" | "newline", RegExp>;
|
||||
pedantic: Record<"code" | "blockquote" | "hr" | "html" | "table" | "text" | "def" | "heading" | "list" | "paragraph" | "fences" | "lheading" | "newline", RegExp>;
|
||||
};
|
||||
inline: {
|
||||
normal: {
|
||||
_backpedal: RegExp;
|
||||
anyPunctuation: RegExp;
|
||||
autolink: RegExp;
|
||||
blockSkip: RegExp;
|
||||
br: RegExp;
|
||||
code: RegExp;
|
||||
del: RegExp;
|
||||
emStrongLDelim: RegExp;
|
||||
emStrongRDelimAst: RegExp;
|
||||
emStrongRDelimUnd: RegExp;
|
||||
escape: RegExp;
|
||||
link: RegExp;
|
||||
nolink: RegExp;
|
||||
punctuation: RegExp;
|
||||
reflink: RegExp;
|
||||
reflinkSearch: RegExp;
|
||||
tag: RegExp;
|
||||
text: RegExp;
|
||||
url: RegExp;
|
||||
};
|
||||
gfm: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "nolink" | "_backpedal" | "anyPunctuation" | "autolink" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>;
|
||||
breaks: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "nolink" | "_backpedal" | "anyPunctuation" | "autolink" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>;
|
||||
pedantic: Record<"link" | "code" | "url" | "br" | "del" | "text" | "escape" | "tag" | "reflink" | "nolink" | "_backpedal" | "anyPunctuation" | "autolink" | "blockSkip" | "emStrongLDelim" | "emStrongRDelimAst" | "emStrongRDelimUnd" | "punctuation" | "reflinkSearch", RegExp>;
|
||||
};
|
||||
};
|
||||
/**
|
||||
* Static Lex Method
|
||||
*/
|
||||
static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>): TokensList;
|
||||
/**
|
||||
* Static Lex Inline Method
|
||||
*/
|
||||
static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>): Token[];
|
||||
/**
|
||||
* Preprocessing
|
||||
*/
|
||||
lex(src: string): TokensList;
|
||||
/**
|
||||
* Lexing
|
||||
*/
|
||||
blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];
|
||||
blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;
|
||||
inline(src: string, tokens?: Token[]): Token[];
|
||||
/**
|
||||
* Lexing/Compiling
|
||||
*/
|
||||
inlineTokens(src: string, tokens?: Token[]): Token[];
|
||||
}
|
||||
/**
|
||||
* Gets the original marked default options.
|
||||
*/
|
||||
declare function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput>;
|
||||
declare let _defaults: MarkedOptions<any, any>;
|
||||
export type MaybePromise = void | Promise<void>;
|
||||
export declare class Marked<ParserOutput = string, RendererOutput = string> {
|
||||
defaults: MarkedOptions<ParserOutput, RendererOutput>;
|
||||
options: (opt: MarkedOptions<ParserOutput, RendererOutput>) => this;
|
||||
parse: {
|
||||
(src: string, options: MarkedOptions<ParserOutput, RendererOutput> & {
|
||||
async: true;
|
||||
}): Promise<ParserOutput>;
|
||||
(src: string, options: MarkedOptions<ParserOutput, RendererOutput> & {
|
||||
async: false;
|
||||
}): ParserOutput;
|
||||
(src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;
|
||||
};
|
||||
parseInline: {
|
||||
(src: string, options: MarkedOptions<ParserOutput, RendererOutput> & {
|
||||
async: true;
|
||||
}): Promise<ParserOutput>;
|
||||
(src: string, options: MarkedOptions<ParserOutput, RendererOutput> & {
|
||||
async: false;
|
||||
}): ParserOutput;
|
||||
(src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;
|
||||
};
|
||||
Parser: {
|
||||
new (options?: MarkedOptions<ParserOutput, RendererOutput> | undefined): _Parser<ParserOutput, RendererOutput>;
|
||||
parse<ParserOutput_1 = string, RendererOutput_1 = string>(tokens: Token[], options?: MarkedOptions<ParserOutput_1, RendererOutput_1>): ParserOutput_1;
|
||||
parseInline<ParserOutput_1 = string, RendererOutput_1 = string>(tokens: Token[], options?: MarkedOptions<ParserOutput_1, RendererOutput_1>): ParserOutput_1;
|
||||
};
|
||||
Renderer: {
|
||||
new (options?: MarkedOptions<ParserOutput, RendererOutput> | undefined): _Renderer<ParserOutput, RendererOutput>;
|
||||
};
|
||||
TextRenderer: {
|
||||
new (): _TextRenderer<RendererOutput>;
|
||||
};
|
||||
Lexer: typeof _Lexer;
|
||||
Tokenizer: {
|
||||
new (options?: MarkedOptions<ParserOutput, RendererOutput> | undefined): _Tokenizer<ParserOutput, RendererOutput>;
|
||||
};
|
||||
Hooks: {
|
||||
new (options?: MarkedOptions<ParserOutput, RendererOutput> | undefined): _Hooks<ParserOutput, RendererOutput>;
|
||||
passThroughHooks: Set<string>;
|
||||
passThroughHooksRespectAsync: Set<string>;
|
||||
};
|
||||
constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]);
|
||||
/**
|
||||
* Run callback for every token
|
||||
*/
|
||||
walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]): MaybePromise[];
|
||||
use(...args: MarkedExtension<ParserOutput, RendererOutput>[]): this;
|
||||
setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>): this;
|
||||
lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>): TokensList;
|
||||
parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>): ParserOutput;
|
||||
private parseMarkdown;
|
||||
private onError;
|
||||
}
|
||||
/**
|
||||
* Compiles markdown to HTML asynchronously.
|
||||
*
|
||||
* @param src String of markdown source to be compiled
|
||||
* @param options Hash of options, having async: true
|
||||
* @return Promise of string of compiled HTML
|
||||
*/
|
||||
export declare function marked(src: string, options: MarkedOptions & {
|
||||
async: true;
|
||||
}): Promise<string>;
|
||||
/**
|
||||
* Compiles markdown to HTML.
|
||||
*
|
||||
* @param src String of markdown source to be compiled
|
||||
* @param options Optional hash of options
|
||||
* @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.
|
||||
*/
|
||||
export declare function marked(src: string, options: MarkedOptions & {
|
||||
async: false;
|
||||
}): string;
|
||||
export declare function marked(src: string, options: MarkedOptions & {
|
||||
async: true;
|
||||
}): Promise<string>;
|
||||
export declare function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;
|
||||
export declare namespace marked {
|
||||
var options: (options: MarkedOptions) => typeof marked;
|
||||
var setOptions: (options: MarkedOptions) => typeof marked;
|
||||
var getDefaults: typeof _getDefaults;
|
||||
var defaults: MarkedOptions<any, any>;
|
||||
var use: (...args: MarkedExtension[]) => typeof marked;
|
||||
var walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[];
|
||||
var parseInline: {
|
||||
(src: string, options: MarkedOptions<string, string> & {
|
||||
async: true;
|
||||
}): Promise<string>;
|
||||
(src: string, options: MarkedOptions<string, string> & {
|
||||
async: false;
|
||||
}): string;
|
||||
(src: string, options?: MarkedOptions<string, string> | null | undefined): string | Promise<string>;
|
||||
};
|
||||
var Parser: typeof _Parser;
|
||||
var parser: typeof _Parser.parse;
|
||||
var Renderer: typeof _Renderer;
|
||||
var TextRenderer: typeof _TextRenderer;
|
||||
var Lexer: typeof _Lexer;
|
||||
var lexer: typeof _Lexer.lex;
|
||||
var Tokenizer: typeof _Tokenizer;
|
||||
var Hooks: typeof _Hooks;
|
||||
var parse: typeof marked;
|
||||
}
|
||||
export declare const options: (options: MarkedOptions) => typeof marked;
|
||||
export declare const setOptions: (options: MarkedOptions) => typeof marked;
|
||||
export declare const use: (...args: MarkedExtension[]) => typeof marked;
|
||||
export declare const walkTokens: (tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) => MaybePromise[];
|
||||
export declare const parseInline: {
|
||||
(src: string, options: MarkedOptions<string, string> & {
|
||||
async: true;
|
||||
}): Promise<string>;
|
||||
(src: string, options: MarkedOptions<string, string> & {
|
||||
async: false;
|
||||
}): string;
|
||||
(src: string, options?: MarkedOptions<string, string> | null | undefined): string | Promise<string>;
|
||||
};
|
||||
export declare const parse: typeof marked;
|
||||
export declare const parser: typeof _Parser.parse;
|
||||
export declare const lexer: typeof _Lexer.lex;
|
||||
|
||||
export {
|
||||
_Hooks as Hooks,
|
||||
_Lexer as Lexer,
|
||||
_Parser as Parser,
|
||||
_Renderer as Renderer,
|
||||
_TextRenderer as TextRenderer,
|
||||
_Tokenizer as Tokenizer,
|
||||
_defaults as defaults,
|
||||
_getDefaults as getDefaults,
|
||||
};
|
||||
|
||||
export {};
|
||||
72
main_plugin/marked-master/marked.esm.js
Normal file
72
main_plugin/marked-master/marked.esm.js
Normal file
File diff suppressed because one or more lines are too long
7
main_plugin/marked-master/marked.esm.js.map
Normal file
7
main_plugin/marked-master/marked.esm.js.map
Normal file
File diff suppressed because one or more lines are too long
74
main_plugin/marked-master/marked.umd.js
Normal file
74
main_plugin/marked-master/marked.umd.js
Normal file
File diff suppressed because one or more lines are too long
7
main_plugin/marked-master/marked.umd.js.map
Normal file
7
main_plugin/marked-master/marked.umd.js.map
Normal file
File diff suppressed because one or more lines are too long
@@ -38,7 +38,6 @@ function getSiteTree($params) {
|
||||
'users' => (string) $child->attributes()->users,
|
||||
'group' => (string) $child->attributes()->group,
|
||||
'news' => (string) $child->attributes()->news,
|
||||
'plugins' => (string) $child->attributes()->plugins,
|
||||
|
||||
'content' => (string)$child
|
||||
];
|
||||
@@ -150,7 +149,6 @@ function buildSiteTreeXml($data, $level = 1) {
|
||||
'users' => isset($item['users']) ? htmlspecialchars($item['users'], ENT_XML1 | ENT_QUOTES, 'UTF-8') : '',
|
||||
'group' => isset($item['group']) ? htmlspecialchars($item['group'], ENT_XML1 | ENT_QUOTES, 'UTF-8') : '',
|
||||
'news' => isset($item['news']) ? htmlspecialchars($item['news'], ENT_XML1 | ENT_QUOTES, 'UTF-8') : '',
|
||||
'plugins' => isset($item['plugins']) ? htmlspecialchars($item['plugins'], ENT_XML1 | ENT_QUOTES, 'UTF-8') : ''
|
||||
];
|
||||
|
||||
$attrString = "";
|
||||
|
||||
@@ -67,7 +67,6 @@ function generateTreeHtml(items, checkChildren) {
|
||||
html += `PageMenu: ${item.PageMenu}<br>`;
|
||||
html += `users: ${item.users}<br>`;
|
||||
html += `group: ${item.group}<br>`;
|
||||
html += `plugins: ${item.plugins}<br>`;
|
||||
|
||||
let now = new Date();
|
||||
let pad = n => n < 10 ? '0' + n : n;
|
||||
@@ -100,7 +99,7 @@ function generateTreeHtml(items, checkChildren) {
|
||||
html += `</li>`;
|
||||
|
||||
if (style) {
|
||||
selectedTreeItemAdd = `url: ${item.url}<br>title: ${item.title}<br>name: ${item.name}<br>template: ${item.template}<br>PageMenu: ${item.PageMenu}<br>users: ${item.users}<br>group: ${item.group}<br>plugins: ${item.plugins}`;
|
||||
selectedTreeItemAdd = `url: ${item.url}<br>title: ${item.title}<br>name: ${item.name}<br>template: ${item.template}<br>PageMenu: ${item.PageMenu}<br>users: ${item.users}<br>group: ${item.group}`;
|
||||
}
|
||||
|
||||
});
|
||||
@@ -888,13 +887,6 @@ function saveTreePropertiesDiv() {
|
||||
.map(x => `<label><input type="checkbox" value="${x.value}"${x.checked?' checked':''}>${x.value}</label>`);
|
||||
parts.push(`<div>${blocks.join(' ')}</div>`);
|
||||
value = parts.join('');
|
||||
}
|
||||
else if (key.toLowerCase() === 'plugins') {
|
||||
let cbs = valueCell.querySelectorAll('input[type="checkbox"][value]');
|
||||
let active = Array.from(cbs)
|
||||
.filter(cb => cb.checked)
|
||||
.map(cb => cb.value);
|
||||
value = active.join(',');
|
||||
} else {
|
||||
let input = valueCell.querySelector('input');
|
||||
value = input ? input.value : valueCell.textContent.trim();
|
||||
@@ -991,12 +983,6 @@ function treePropertiesDiv() {
|
||||
inputHtml = `<input type="text" value="${value}" style="font-size: inherit;" readonly disabled>`;
|
||||
} else if (key.toLowerCase() === "group") {
|
||||
inputHtml = `<input type="text" value="${value}" style="font-size: inherit;" readonly disabled>`;
|
||||
} else if (key.toLowerCase() === "plugins") {
|
||||
let plugins = (value || '').split(',');
|
||||
let allPlugins = ['dgrm','SvgEditorM', 'form_editor'];
|
||||
inputHtml = allPlugins.map(p =>
|
||||
`<label><input type="checkbox" value="${p}"${plugins.includes(p)?' checked':''}>${p}</label>`
|
||||
).join(' ');
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -191,8 +191,6 @@ ul, ol {
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
font-size: 1em;
|
||||
}
|
||||
.content1 {
|
||||
top: -1px;
|
||||
border-radius: 0 0 10px 10px;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user