tmp: настройки типографа (15) борьба с CodeMirror 6
This commit is contained in:
@@ -144,19 +144,19 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{# ========== #}<hr class="my-2" />
|
{# ========== #}<hr class="my-2" />
|
||||||
{# Группа «Санитайзер» #}<div x-data="{ enabled: false }" class="mb-2">
|
{# Группа "Санитайзер" #}<div x-data="{ enabled: false }" class="mb-2">
|
||||||
<div class="form-check">
|
<div class="form-check">
|
||||||
<input class="form-check-input" type="checkbox" name="sanitizer_enabled" id="optSanitizer" x-model="enabled">
|
<input class="form-check-input" type="checkbox" name="sanitizer_enabled" id="optSanitizer" x-model="enabled">
|
||||||
<label class="form-check-label fw-bold" for="optSanitizer">Очистка от HTML (Sanitizer)</label>
|
<label class="form-check-label fw-bold" for="optSanitizer">Очистка от HTML (Sanitizer)</label>
|
||||||
</div>
|
</div>
|
||||||
{# Настройки группы «Санитайзер» (видны, когда включено) #}<div class="ms-3 mt-1" x-show="enabled" x-transition>
|
{# Настройки группы "Санитайзер" (видны, когда включено) #}<div class="ms-3 mt-1" x-show="enabled" x-transition>
|
||||||
<select class="form-select form-select-sm" name="sanitizer">
|
<select class="form-select form-select-sm" name="sanitizer">
|
||||||
<option value="etp" selected>Очистить разметку висячей пунктуации</option>
|
<option value="etp" selected>Очистить разметку висячей пунктуации</option>
|
||||||
<option value="html">Очистить все HTML-теги</option>
|
<option value="html">Очистить все HTML-теги</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
{# Описание группы «Санитайзер» (видно, когда выключено) #}<div class="ms-3 form-text text-muted small" x-show="!enabled" x-transition>
|
{# Описание группы "Санитайзер" (видно, когда выключено) #}<div class="ms-3 form-text text-muted small" x-show="!enabled" x-transition>
|
||||||
Текст будет обработан «как есть», без предва­рительной очистки от HTML-тегов или старой разметки.
|
Текст будет обработан «как есть», без предварительной очистки от HTML-тегов или старой разметки.
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{# ========== #}<hr class="my-2" />
|
{# ========== #}<hr class="my-2" />
|
||||||
@@ -197,8 +197,45 @@
|
|||||||
|
|
||||||
<div class="col-md-12 mt-4">
|
<div class="col-md-12 mt-4">
|
||||||
<h3>Результат</h3>
|
<h3>Результат</h3>
|
||||||
<pre id="result-area" class="result-box">Здесь появится результат...</pre>
|
<div id="cm-result-wrapper" class="result-box"></div>
|
||||||
|
<div id="result-area" style="display: none;"></div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
// Используем esm.sh с фиксированной версией для всех пакетов, чтобы избежать дублирования зависимостей
|
||||||
|
import {EditorView, minimalSetup} from "https://esm.sh/codemirror@6.0.1?deps=@codemirror/state@6.2.1";
|
||||||
|
import {lineNumbers, highlightActiveLineGutter} from "https://esm.sh/@codemirror/view@6.17.1?deps=@codemirror/state@6.2.1";
|
||||||
|
import {html} from "https://esm.sh/@codemirror/lang-html@6.4.5?deps=@codemirror/state@6.2.1";
|
||||||
|
import {oneDark} from "https://esm.sh/@codemirror/theme-one-dark@6.1.2?deps=@codemirror/state@6.2.1";
|
||||||
|
import {EditorState} from "https://esm.sh/@codemirror/state@6.2.1";
|
||||||
|
|
||||||
|
const resultWrapper = document.getElementById('cm-result-wrapper');
|
||||||
|
|
||||||
|
const resultState = EditorState.create({
|
||||||
|
doc: "Здесь появится результат...",
|
||||||
|
extensions: [
|
||||||
|
minimalSetup,
|
||||||
|
lineNumbers(),
|
||||||
|
highlightActiveLineGutter(),
|
||||||
|
html(),
|
||||||
|
oneDark,
|
||||||
|
EditorState.readOnly.of(true)
|
||||||
|
]
|
||||||
|
});
|
||||||
|
|
||||||
|
const resultView = new EditorView({
|
||||||
|
state: resultState,
|
||||||
|
parent: resultWrapper
|
||||||
|
});
|
||||||
|
|
||||||
|
document.body.addEventListener('htmx:afterSwap', function(evt) {
|
||||||
|
if (evt.detail.target.id === 'result-area') {
|
||||||
|
const newContent = evt.detail.target.innerHTML;
|
||||||
|
resultView.dispatch({
|
||||||
|
changes: { from: 0, to: resultView.state.doc.length, insert: newContent }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
</script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -46,10 +46,10 @@ def process_text(request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
# 4. Читаем Sanitizer
|
# 4. Читаем Sanitizer
|
||||||
sanitizer_enabled = request.POST.get(key='sanitizer_enabled', default='')
|
sanitizer_enabled = request.POST.get(key='sanitizer_enabled') == 'on'
|
||||||
sanitizer_option = request.POST.get(key='sanitizer', default='etp')
|
sanitizer_option = None
|
||||||
if sanitizer_enabled and sanitizer_option not in ['etp', 'html']:
|
if sanitizer_enabled:
|
||||||
sanitizer_option = 'etp'
|
sanitizer_option = request.POST.get(key='sanitizer', default='etp')
|
||||||
|
|
||||||
# 5. Читаем Hanging Punctuation
|
# 5. Читаем Hanging Punctuation
|
||||||
hanging_enabled = request.POST.get(key='hanging_enabled') == 'on'
|
hanging_enabled = request.POST.get(key='hanging_enabled') == 'on'
|
||||||
@@ -70,6 +70,10 @@ def process_text(request):
|
|||||||
'mode': request.POST.get(key='mode', default='mixed'),
|
'mode': request.POST.get(key='mode', default='mixed'),
|
||||||
'sanitizer': sanitizer_option
|
'sanitizer': sanitizer_option
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- ДИАГНОСТИКА ---
|
||||||
|
print("Typographer options:", options)
|
||||||
|
# -------------------
|
||||||
|
|
||||||
# Создаем экземпляр типографа
|
# Создаем экземпляр типографа
|
||||||
typo = Typographer(**options)
|
typo = Typographer(**options)
|
||||||
|
|||||||
Reference in New Issue
Block a user