Вставить JavaScript в уценке

Я использую процессор уценки Maruku. Я хотел бы это

*blah* blah "blah" in [markdown](blah)

<script src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
<script>
...do stuff...
</script>

но он жалуется, когда я рендую его с множеством ошибок. Первое существо

 ___________________________________________________________________________
| Maruku tells you:
+---------------------------------------------------------------------------
| Could you please format this better?
| I see that "<script type='text/javascript'>" is left after the raw HTML.
| At line 31
|   raw_html     |<script src='http://code.jquery.com/jquery-1.4.2.min.js' /><script type='text/javascript'>|
|       text --> |//<![CDATA[|

а потом все остальное кажется, что парсер сходит с ума. Затем он рендерит javascript в div на странице. Я попытался сделать его блоком CDATA и лишним интервалом между jquery и моим скриптом.

Помогите?

9 ответов

Решение

У меня была такая же проблема, но мне удалось заставить JavaScript появляться в моем коде, поместив новую строку после открывающего тега.

Другое решение, которое может работать в некоторых случаях: (выбранный ответ не работал для меня, когда я пытался встроить пример CodePen)

  • добавьте это в ваш макет по умолчанию:

    <!-- Custom JavaScript files set in YAML front matter -->
    {% for js in page.customjs %}
    <script async type="text/javascript" src="{{ js }}"></script>
    {% endfor %}
    
  • В сообщениях, где вам нужны файлы JavaScript, вы можете добавить их в раздел YAML следующим образом:

    ---
    layout: post
    title: Adding custom JavaScript for a specific post
    category: posts
    customjs:
     - http://code.jquery.com/jquery-1.4.2.min.js
     - http://yourdomain.com/yourscript.js
    ---
    

async может быть не нужно или не нужно, но вы можете добавить это в качестве параметра в customjs, (подробности см. в YAML для Jekyll и вложенных списков)

Я использую этот код для написания кода JavaScript в уценке.

просто добавь js после "```", и ваш код JavaScript будет выделен.


 ```js
   const myvar = "hello"
   module.exports.response = response = ()=>{mycode here}
    ```

Markdown поддерживает встроенный XHTML, но не Javascript.

Пример, который они приводят на своем сайте, показывает пустой <script> тег, содержащий новую строку. Может это все?

Я построил экспресс-сервер с библиотекой Showdown, которая преобразует уценку в HTML, а также позволит вам использовать HTML в вашем файле уценки, и именно так я могу использовать javascript, а также ссылаться на свой файл css.

TOC.md

<script src="/js/toc"></script>

server.js

app.get('/js/toc', (req, res) => {
    fs.readFile(path.join(__dirname, 'public', 'js', 'toc.js'), 'utf-8', (err, data) => {
        if(err) throw err;
        res.set({
            'Content-Type': 'text/javascript'
        })
        res.send(data)
    })
})

Или вы можете сделать это с помощью статического промежуточного программного обеспечения. Вам просто нужно поместить файл javascript в папку с именем public.

TOC.md

<script src="/static/js/toc.js"></script>

server.js

app.use('/static', express.static('public'))

Я обнаружил, что экранирование закрывающего символа ">" в ​​обоих, открывающий и закрывающий теги "script" будет отображать его правильно, например:

  • Если вы введете следующее:

    <script\>... javascript code...</script\>
    
  • Будет отображаться так:

    <script>... javascript code...</script>
    

Это только мои два цента.

Вы можете использовать pandoc, который прекрасно обрабатывает этот ввод (и вообще javascript).

По моему опыту, уценка превзойдет текст javascript в виде обычного текста, если вы удалите форматирование кода, которое может сбить с толку уценку.

  1. удалить комментарии из JavaScript, так как /* ... */ переводится в
  2. удалите отступ в начале каждой строки.

    может быть вставлен в соответствии с вашим отступом.

По сути, я проверяю сгенерированный html и выясняю, какие дополнительные теги вставляются между моим JavaScript-кодом при уценке. И удалите форматирование, которое генерирует дополнительный тег.

Хорошей идеей является разделение локальных и облачных js-источников:

В почтовом файле:

cloudjs:
 - //cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js
 - //cdnjs.cloudflare.com/ajax/libs/topojson/1.6.9/topojson.min.js
localjs:
 - datamaps.world.min.js
 - custom.js  

В файле по умолчанию после включения нижнего колонтитула:

   {% for js in page.cloudjs %}

        <script type="text/javascript" src="{{ js }}"></script>

    {% endfor %}


    {% for js in page.localjs %}

        <script type="text/javascript" src="{{ "/assets/scripts/" | prepend: site.baseurl | append: js }}"></script>

    {% endfor %}

Просто сделайте отступ в первой строке, содержащей тег