Вики html: интерактивные онлайн-курсы по HTML, CSS и JavaScript

Содержание

Справка:Форматирование — MediaWiki

Внимание: Когда вы редактируете эту страницу, вы соглашаетесь на передачу своего вклада по лицензии CC0. Узнать об этом подробнее можно на странице справки.


Вы можете форматировать текст с помощью вики-разметки. Она состоит из обычных символов, таких как звездочки, апострофы или знак «равно», иногда, в зависимости от их позиции в тексте, имеющих в вики специальные функции. Например, для форматирования слова курсивом вам надо заключить его в две пары одиночных апострофов — вот ''так''.

Разметка для форматирования текста

ОписаниеВы вводитеВы получаете
Форматирование символов (в строке) — действует везде
Курсивный текст
''Курсив''

Курсив

Полужирный текст
'''Полужирный'''

Полужирный

Полужирный курсив
'''''Полужирный курсив'''''

Полужирный курсив

Отключение вики-разметки
<nowiki>без [[wiki|вики]] ''разметки''</nowiki>

без [[wiki|вики]] »разметки»

Форматирование заголовка раздела — только в начале строки
Заголовки разных уровней
== Уровень 2 ==

=== Уровень 3 ===

==== Уровень 4 ====

===== Уровень 5 =====

====== Уровень 6 ======

Уровень 2

Уровень 3

Уровень 4
Уровень 5
Уровень 6
Горизонтальная черта
Текст до
----
Текст после

Текст до


Текст после

Маркированный список
* Начало каждой строки
* со звезды [[Wikipedia:asterisk|asterisk]] (*).
** Следующая звезда создаст следующий уровень вложенности
*** и еще более глубокий.
* Перенос строки <br /> не прерывает уровни вложенности.
*** Однако, если пропустить уровень - создастся пустое пространство.
Любое другое начало строки, кроме *, закончит создание списка

* сочетание маркированного списка
** с определением
::- определение
** создаёт пустое пространство

* сочетание маркированного списка
** с определением
*:- определение
** без пустого пространства

*маркированный список
:- определение
:* подстановка, которая не создаёт пустые
:* пространства после определения
  • Начало каждой строки
  • со звезды asterisk (*).
    • Следующая звезда создаст следующий уровень вложенности
      • и еще более глубокий.
  • Перенос строки
    не прерывает уровни вложенности.
      • Однако, если пропустить уровень — создастся пустое пространство.

Любое другое начало строки, кроме *, закончит создание списка

  • сочетайте маркированный список
    • с определением
— определение
    • создаёт пустое пространство
  • сочетайте немаркированный список
    • с определением
    — определение
    • без пустых пространств
  • маркированный список
— определение

  • подпункты, которые не содержат пустых
  • пространств после определения
Нумерованный список
# Начинайте каждую строку
# со [[Wikipedia:Number_sign|знака решётки]] (#)
##  Чем больше знаков решётки,
### Тем большим будет
### отступ.
# Перевод строки <br/> не нарушает отступов.
### Но переход через несколько отсупов создаёт пустое пространство.
# Пустые строки.

# заканчивайте список и начиайте новый.
Любое другое начало также заканчивает список.

<nowiki>#</nowiki> use "nowiki" tags to display a literal (#) at the beginning of a line without interpreting it as a numbered list.
  1. Начинайте каждую строку
  2. со знака решётки (#)
    1. Чем больше знаков решётки,
      1. Тем большим будет
      2. отступ.
  3. Перевод строки
    не нарушает отступов.
      1. Но переход через несколько отступов создаёт пустое пространство.
  4. Пустые строки.
  1. заканчивайте список и начинайте новый.

Любое другое начало также
заканчивает список.

# use «nowiki» tags to display a literal (#) at the beginning of a line without interpreting it as a numbered list.

Список определений
;пункт 1
: определение 1
;пункт 2
: определение 2-1
: определение 2-2

Если строка начинается с точки с запятой (;), любое двоеточие (:) в конце строки не будет отображаться. If you want for the colon to be displayed, escape it by writing &#58;.

пункт 1
определение 1
пункт 2
определение 2-1
определение 2-2
Отступ текста
: Один отступ
:: Двойной отступ
::: Много отступов

При использовании этого форматирования может нарушаться доступность.

Один отступ

Двойной отступ

Много отступов
Смесь различных типов списков
# один
# два
#* два точка один
#* два точка два
# three
#; three item один
#: three def один
# four
#: four def один
#: this looks like a continuation
#: and is often used
#: instead <br /> of <nowiki><br /></nowiki>
# five
## five sub 1
### five sub 1 sub 1
## five sub 2

The usage of #: and *: for breaking a line within an item may also harm accessibility.

  1. one
  2. two
    • two point one
    • two point two
  3. three
    three item one
    three def one
  4. four
    four def one
    this looks like a continuation
    and is often used
    instead
    of <br />
  5. five
    1. five sub 1
      1. five sub 1 sub 1
    2. five sub 2
Преформатированный текст
 Каждая строка начинается с пробела.
 Текст '''преформатирован''' и при этом
 '''может ''включать'' '''''разметку''.

This way of preformatting only applies to section formatting. Character formatting markups are still effective.

Каждая строка начинается с пробела.
Text is preformatted and
markups can be done.
Блоки преформатированного текста
 <nowiki>Start with a space in the first column,
(before the <nowiki>).

Then your block format will be
    maintained.

This is good for copying in code blocks:

def function():
    """documentation string"""

    if True:
        print True
    else:
        print False</nowiki>
Start with a space in the first column,
(before the <nowiki>).

Then your block format will be
    maintained.

This is good for copying in code blocks:

def function():
    """documentation string"""

    if True:
        print True
    else:
        print False

Абзацы

MediaWiki игнорирует одиночные переносы строки. Чтобы начать новый абзац оставьте пустую строку. Вы можете принудительно вставить разрыв строки HTML тегом ‎<br />.

Теги HTML

Some HTML tags are allowed in MediaWiki, for example ‎<code>, ‎<div>, and ‎<span>. These apply anywhere you insert them.

ОписаниеВы вводитеВы получаете
Inserted
(Displays as underline in most browsers)
<ins>Inserted</ins>

или

<u>Underline</u>

Inserted

или

Underline

Deleted
(Displays as strike-through in most browsers)
<s>Зачёркнутый</s>

или

<del>Удалённый</del>

Зачёркнутый

или

Удалённый

Моноширинный текст
<code>Исходный код</code>
Исходный код
Цитаты
Текст до
<blockquote>Цитата</blockquote>
Текст после

Текст до

Цитата

Текст после

Quotes
<q>This is a quotation</q>

The q element must not be used in place of quotation marks that do not represent quotes; for example, it is inappropriate to use the q element for marking up sarcastic statements.[1]

This is a quotation
Комментарий
<!-- Это комментарий -->
Комментарии видны только при редактировании.

Комментарии видны только в режиме редактирования.

Полностью преформатированный текст
<pre>
Текст '''преформатирован''' и
''разметка'' '''''не применяется'''''
</pre>

Для преформатированного текста с разметкой смотрите строку Преформатированный текст в конце предыдущей таблицы.

Текст '''преформатирован''' и ''разметка'' '''''не применяется'''''
Customized preformatted text
<pre>
Text is '''preformatted''' 
with a style and 
''markups'' '''''cannot''''' be done
</pre>

A CSS style can be named within the style attribute.

Text is '''preformatted''' 
with a style and 
''markups'' '''''cannot''''' be done
ОписаниеВы вводитеВы получаете
Default preformatted text has a CSS attribute (white-space: pre-wrap;) to wrap the text according to available width
<pre>
This long sentence is used to demonstrate text wrapping. This additional sentence makes the text even longer. This additional sentence makes the text even longer.
</pre>
This long sentence is used to demonstrate text wrapping. This additional sentence makes the text even longer. This additional sentence makes the text even longer.
Customized preformatted text with disabled text wrapping
<pre>
This long sentence is used to demonstrate text wrapping. This additional sentence makes the text even longer. This additional sentence makes the text even longer.
</pre>
This long sentence is used to demonstrate text wrapping. This additional sentence makes the text even longer. This additional sentence makes the text even longer.

Вставка символов

Symbols and other special characters not available on your keyboard can be inserted in a multitude of ways. Many Operating Systems and browsers allow you to insert special characters through a menu option or Operating System panel. Additionally, you can use the WikiEditor or VisualEditor to insert them into the edit screen.

As a last resort, you can use a special sequence of characters. Those sequences are called HTML entities. For example, the following sequence (entity) &rarr; when inserted will be shown as right arrow HTML symbol → and &mdash; when inserted will be shown as an em dash HTML symbol —.


Hover over any character to find out the symbol that it produces. Some symbols not available in the current font will appear as empty squares.

HTML symbol entities
ÁáÂâ´ÆæÀàΑα&ÅåÃãÄäΒβ¦Ç縢
Χχˆ©¤°Δδ÷ÉéÊêÈèΕεΗη
ÐðË냽¼¾Γγ>ÍíÎî¡ÌìΙι
¿ÏïΚκΛλ«<¯µ·Μμ 
¬ÑñΝνÓóÔôŒœÒòΩωΟοªºØøÕõÖ
öΦφΠπϖ±£Ψψ»»®Ρρ
Šš§­Σσς¹²³ßΤτΘθϑÞþ˜
×ÚúÛûÙù¨ϒΥυÜüΞξÝý¥ÿŸΖζ
ОписаниеВы вводитеВы получаете
Copyright symbol&copy;
©
Greek delta letter symbol&delta;
δ
Символ евро&euro;

See the list of all HTML entities on the Wikipedia article List of HTML entities. Additionally, MediaWiki supports two non-standard entity reference sequences: &רלמ; and &رلم; which are both considered equivalent to &rlm; which is a right-to-left mark. (Used when combining right to left languages with left to right languages in the same page.)

HTML tags and symbol entities displayed themselves (with and without interpreting them)

&amp;euro;  → &euro;
<span>Typo to be corrected</span>  → Typo to be corrected
&lt;span><span lang="en" dir="ltr">Typo to be corrected</span></span>  → <span>Typo to be corrected</span>

Nowiki для HTML

‎<nowiki /> can prohibit (HTML) tags:

  • <<nowiki />pre>  → <pre>

But not & symbol escapes:

To print & symbol escapes as text, use «&amp;» to replace the «&» character (eg. type «&amp;nbsp;«, which results in «&nbsp;«).

Другие вопросы форматирования

Beyond the text formatting markup shown hereinbefore, here are some other formatting references:

You can find more references at Справка:Содержание .

References

Вики-разметка в профессиональном вики-редакторе | Центр Интернет

Профессиональный вики-редактор использует движок MediaWiki (используется Википедией) для обработки вики-разметки. Поэтому, все стандартные правила MediaWiki поддерживаются и в Кампусе. Дополнительно движок MediaWiki расширен нестандартным форматированием, не совместимым с Википедией.

Стандартное форматирование[править]

Разметка форматирования текста[править]

ОписаниеФорматРезультат
форматирование символов — работает везде
Наклонный текст»Курсив»курсив
Полужирный текст»’Полужирный»’полужирный
Полужирный и наклонный текст»»’Полужирный и курсив»»’Полужирный и курсив
Отмена форматирования wiki<nowiki>нет »курсива»</nowiki>нет »курсива»
оформление заголовков — работает только с новой строки
Текст с отступом

:Текст с отступом
::Двойной отступ
:::::Многократный отступ

Текст с отступом

Двойной отступ

Многократный отступ
Заголовки

разных уровней

==Уровень 1==
===Уровень 2===
====Уровень 3====
=====Уровень 4=====
=======Уровень 5=======

В статьях с четырьмя и более заголовками автоматически создаётся таблица содержания.

Уровень 1

Уровень 2

Уровень 3

Уровень 4

Уровень 5

Горизонтальная линия

—-


Список с маркерами
* первый
* второй
* третий
** первый в третьем
** второй в третьем

Оставляйте пустую строку между окончанием первого списка и началом следующего.

  • первый
  • второй
  • третий
    • первый в третьем
    • второй в третьем
Список с числами
# первый
# второй<br />несколько строк<br />не нарушая нумерацию
# третий
## первый в третьем
## второй в третьем
  1. первый
  2. второй
    несколько строк
    не нарушая нумерацию
  3. третий
    1. первый в третьем
    2. второй в третьем
Список определений
;элемент 1
:определение 1
;элемент  2
:определение 2-1
:определение 2-2
элемент 1
определение 1
элемент 2
определение 2-1
определение 2-2
Применение возможностей оформления списка определений для отступов текста
:Первый отступ
::Второй отступ
:::::Ещё несколько отступов

Это применение может быть спорным с точки зрения удобства.

Первый отступ

Второй отступ

Ещё несколько отступов</pre>
Смесь списка с маркерами
и списка с числами
# первый 
# второй
#* первый во втором
#* второй во втором
# третий
#; элемент определения в третьем
#: определение элемента в третьем
# четвёртый
#: four item one
#: это скорее похоже на продолжение # четыре
#: и таким образом часто используемый вместо <br />
;элемент 1
:* определение 1-1
:* определение 1-2
:
;элемент  2
:# определение 2-1
:# определение 2-2

Использование тегов #: и *: для разрыва строк в определениях может оказаться спорным.

  1. первый
  2. второй
    • первый во втором
    • второй во втором
  3. третий
    элемент определения в третьем
    определение элемента в третьем
  4. четвёртый
    four item one
    это скорее похоже на продолжение # четыре
    и таким образом часто используемый вместо
элемент 1
  • определение 1-1
  • определение 1-2
элемент 2
  1. определение 2-1
  2. определение 2-2
Предварительно отформатированный текст
 частично неформатированный текст
 оформляется с помощью '''пробела'''
 в ''начале'' строки 

Этот способ частичной отмены форматирования действует только в отношении абзацного оформления; символьное форматирование продолжает применяться.

частично неформатированный тест
оформляется с помощью пробела
в начале строки 

Вики игнорирует обычные переносы строк. Для начала нового абзаца оставьте пустую строку. Новую строку также можно начать с HTML-тега <br />.

В вики по умолчанию включена поддержка только некоторых HTML-тэгов, как например <code>, <div>, <span> и <font>.

ОписаниеФорматРезультат
Фиксированная ширина символов

<tt>Фиксированная ширина символов</tt>

Фиксированная ширина символов

Цитаты
текст текст текст текст текст текст текст текст текст текст 
текст текст текст текст текст текст текст текст текст текст 
<blockquote>  цитата цитата цитата цитата цитата цитата </blockquote>
текст текст текст текст текст текст текст текст текст текст 

текст текст текст текст текст текст текст текст текст текст
текст текст текст текст текст текст текст текст текст текст

цитата цитата цитата цитата цитата цитата

текст текст текст текст текст текст текст текст текст текст

Комментарии
<!--Это комментарий-->
Полностью неформатированный текст
<pre>с помощью этого тега вся разметка '''игнорируется'''</pre>
с помощью этого тега вся разметка '''игнорируется'''

HTML символы это набор символов, который обозначает один конкретный символ. Например, &rarr; обозначает стрелку вправо → и &mdash; обозначает тире —. HTML символы используются в основном в двух случаях: для добавления символов не доступных на клавиатуре:

&copy; → ©
&delta; → δ

и обхода работы парсера при отображение HTML тегов и символов:

&amp;euro; → &euro;
&euro; →
&lt;span>Green&lt;/span> → <span>Green</span>
<span>Green</span> → Green

Ниже приведен список символов, которые могут быть получены с использованием HTML символов. Символы не доступные в текущем шрифте будут отображаться пустыми квадратиками.

Таблица HTML Символов
Á á Â â ´ Æ æ À à Α α & Å å Ã ã Ä ä Β β ¦ Ç ç ¸ ¢
Χ χ ˆ © ¤ ° Δ δ ÷ É é Ê ê È è Ε ε Η η
Ð ð Ë ë ƒ ½ ¼ ¾ Γ γ > Í í Î î ¡ Ì ì Ι ι
¿ Ï ï Κ κ Λ λ « < ¯ µ · Μ μ  
¬ Ñ ñ Ν ν Ó ó Ô ô Œ œ Ò ò Ω ω Ο ο ª º Ø ø Õ õ Ö
ö Φ φ Π π ϖ ± £ Ψ ψ » » ® Ρ ρ
Š š § ­ Σ σ ς ¹ ² ³ ß Τ τ Θ θ ϑ Þ þ ˜
× Ú ú Û û Ù ù ¨ ϒ Υ υ Ü ü Ξ ξ Ý ý ¥ ÿ Ÿ Ζ ζ
ОписаниеФорматРезультат
Внешняя ссылкаhttp://mediawiki.2</math>

Вы можете заключать цитаты в тег <ref> по ходу статьи и вставить список цитат (обычно, в конце статьи) при помощи тега <references />

Example[править]

According to scientists, the Sun is pretty big.<ref>E. Miller, The Sun, (New York: Academic Press, 2005), 23-5.</ref>
The Moon, however, is not so big.<ref>R. Smith, «Size of the Moon», Scientific American, 46 (April 1978): 44-6.</ref>

==Notes==

<references />

Многократное использование цитаты[править]

Если на одну цитату надо сослаться несколько раз, то цитату надо проименовать при помощи атрибута name <ref name=»name»> и, при повторном цитировании, вставлять именованную цитату по имени: <ref name=»name» />.

Пример многократного использования цитаты:

This is an example of multiple references to the same footnote.<ref name=»multiple»>Remember that when you refer to the same footnote multiple times, the text from the first reference is used.</ref>

Such references are particularly useful when citing sources, if different statements come from
the same source.<ref name=»multiple»>This text is superfluous, and won’t show up anywhere. We may as well just use an empty tag.</ref>

A concise way to make multiple references is to use empty ref tags, which have a slash at the
end. Although this may reduce redundant work, please be aware that if a future editor removes the first reference, this will result in the loss of all references using the empty ref tags.<ref name=»multiple» />

==Notes==

<references />

Нестандартное форматирование[править]

Стандартная поставка MediaWiki не включает некоторого необходимого функционала или включает в неудобном для использования виде. Описанный ниже функционал является нестандартным и непереносимым из Кампуса на другие инсталляции MediaWiki.

Вставка рисунка осуществляется простой ссылкой на него:

https://user.files.psu.ru//ars/img/node/wifi-k2.png

Ширина рисунка не будет превышать заданных в системе размеров и будет уменьшаться при уменьшении окна браузера.

При необходимости задать точные размеры рисунка, следует использовать синтаксис вставки файла:

{{файл:https://user.files.psu.ru//ars/img/node/wifi-k2.png | ширина=300 | описание=Покрытие Wi-Fi в ПГНИУ }}

Вставка исходного кода осуществляется нестандартным для MediaWiki способом путем заключения исходного кода в теги <code></code>. Язык кода определится автоматически. Если язык определился неправильно, его можно указать в виде дополнительного атрибута без значения. Список языков можно найти здесь.

<code php>echo "hello world";</code>
 echo "hello world";

Вставка файлов[править]

Для вставки некоторых типов файлов можно использовать разметку

{{файл:URL | тип=Тип файла | ширина=640 | выравнивание=справа | описание=Описание файла | высота=480 }}

Результат работы зависит от расширения в URL. Таким образом можно вставлять файлы по протоколу http и https с расширениями mp4, webm, ogv, ogg, mp3, wav, jpeg, jpg, png, svg, bmp. Возможно, в дальнейшем, будут добавлены другие расширения. Обязательным является указание URL, все остальные параметры являются не обязательными.

Пример вставки видео[править]

{{файл:http://212.192.64.195/sintel.2010.1080p-j98w1280h720.mp4| | ширина=640 | | описание=Sintel }}

Пример вставки рисунка с заданными размерами[править]

{{файл:https://user.files.psu.ru//ars/img/node/wifi-k2.png | ширина=300 | описание=Покрытие Wi-Fi в ПГНИУ }}

Вставка контента с веб-сервисов[править]

Поддерживается вставка контента с большого числа веб-сервисов путем простой публикации ссылки на материал. Из ссылки автоматически достается идентификатор ресурса и вставляется его Embed-код.

Поддерживаются следующие веб-сервисы[править]

Сервис Пример ссылки на сервис
Кампус: авторское видео
http://k.psu.ru/myvideo/node/54
Кампуc: презентации
http://k.psu.ru/docs/node/10
Кампус: опросы
http://k.psu.ru/poll/node/3
Кампус: ELiS
http://k.psu.ru/library/node/19446
YouTube
http://www.youtube.com/watch?v=m5ebtBfK4cI
Google презентации
https://docs.google.com/presentation/d/1MWxoNVQxMyYSJhcHcDLY_ysHNqQWdvkjYXGGbDj1Lv0/pub?start=false&loop=false&delayms=3000
Goole документ
https://docs.google.com/document/d/1wM5eokSfup_UXAjvLxM7rRiaOdX33Z3BMhhLau8TDZw/edit
Видео Vimeo
http://vimeo.com/27779342
Видео вКонтакте
http://vk.com/video25427005_165598829
Видео ruTube
http://rutube.ru/video/f79fac229a0fa77a3aa50b4003933147/?bmstart=7
Записи Ustream.Tv
http://www.ustream.tv/recorded/36071787
Презентации SlideShare
http://www.slideshare.net/borovinskiy/ss-9951031

Примеры можно посмотреть на странице демонстрации

Вики-сайт — обновление 152 | Microsoft Docs



  • Чтение занимает 2 мин

В этой статье

Компоненты

Новые возможности современных пользователей

На вики-сайте улучшен новый вид и производительность. Например, дерево навигации по страницам переместилось влево, чтобы обеспечить естественный поток данных слева направо. Кроме того, до настоящего момента объем вертикального пространства ограничен заголовком. В этом обновлении мы сделали полную прокрутку страницы, чтобы получить гораздо больше пространства по вертикали для содержимого.

Совет

Вы можете быстро переходить на страницу редактирования, нажав клавишу e на клавиатуре.

В пункты меню также внесены следующие изменения:

  1. Действия меню были объединены в следующие три категории:

    • Действия уровня wiki рядом с пунктом выбора вики-сайта

    • Действия уровня дерева

    • Действия на уровне страницы

  2. Кнопка » создать страницу » была перемещена в дерево. Можно также нажать клавишу n на клавиатуре, чтобы создать новую страницу.

  3. Кроме того, мы добавили в подмножество функций функцию Count , чтобы узнать, сколько людей следует за страницей. Это может дать представление о том, насколько важна страница.

Поддержка HTML-тегов

Теперь на вики-сайте можно создать более насыщенное содержимое с помощью тегов HTML. Узнайте, что можно делать с HTML-тегами ниже.

  1. Теперь можно создавать сворачиваемые разделы на вики-страницах с помощью тегов Details и Summary . Можно добавить атрибут Open , чтобы данные были развернуты по умолчанию.

    Дополнительные сведения о теге Details см. в этой документации.

    Это было назначено по приоритету на основе этого запроса предложения.

Примечание

Этот тег не поддерживается в обозревателях пограничных и Internet Explorer.

  1. Кроме того, можно добавить заголовок к изображениям с помощью тегов Figure и figcaption . Эти теги позволяют добавлять дополнительный текст для изображений и создавать связанные блоки изображений. Тег figcaption можно добавить выше или ниже изображения.

    Дополнительные сведения о теге figcaption см. в документации здесь.

  2. Наконец, можно выделить части текста на вики-страницах с помощью тега Mark . Это позволяет выделить важный текст на вики-страницах, чтобы привлечь внимание читателей.

    Дополнительные сведения о теге Mark см. в документации здесь.

Улучшено создание и редактирование таблиц

До настоящего момента создание и редактирование таблиц на вики-сайте было затруднительным. Мы внесли изменения, чтобы упростить добавление и управление таблицами на вики-сайте.

  1. Создание таблицы из таблицы

    Вам больше не нужно запоминать синтаксис таблицы Markdown. Теперь можно легко создать таблицу Markdown, выбрав из таблицы 15 X 15. Просто выберите необходимое число столбцов и строк, чтобы вставить таблицу одним щелчком мыши.

    Приоритет этой функции зависит от следующих билетов:

  1. Улучшенная удобочитаемость таблиц

    Теперь можно переключать Перенос по словам для редактора, чтобы обеспечить лучшую удобочитаемость таблиц. Отключение переноса по словам добавляет полосу прокрутки, которая позволяет легко просматривать содержимое больших таблиц.

  1. Автоформатировать таблицы Markdown

    Вам больше не нужно добавлять пробелы для согласования столбцов Markdown. При нажатии кнопки Format Tables (форматы таблиц ) таблицы Markdown автоматически форматируются путем добавления пробелов в ячейки для согласования столбцов. Если у вас есть большие таблицы, используйте ее с отключенным переносом по словам , чтобы облегчить чтение таблиц.




Работа с вики-разметкой и HTML | JIRA

При ссылке на поле для отправки электронного письма или уведомления оно может создавать нежелательный контент, а именно разметку вики. Например, {{issue.description}} может давать что-то вроде:


This text is {color:red}RED{color}

Это трудно читать и определенно некрасиво. Automation for Jira Server предлагает способы визуализации в виде HTML или обычного текста.

Рендеринг HTML

Чтобы отобразить HTML, вы можете просто добавить «.html» в конец поля. {{issue.description.html}} производит:


<p>This text is <font color="red">RED</font></p>

Это отобразит описание в формате HTML.

 

Это все еще может выглядеть не так, как ожидалось

Когда Jira отправляет электронные письма в формате HTML, он также включает в себя все стили письма, поэтому HTML будет выглядеть так же, как в Jira. К сожалению, у нас нет доступа к этим стилям, поэтому мы просто создаем необработанный HTML без стилей.

Отображение обычного текста

Вы также можете извлечь весь текст из разметки HTML / вики. Обычно это лучший способ отправить чистое электронное письмо / уведомление.

Это можно сделать, добавив в поле «.text». {{issue.description.text}} производит:


This text is RED

Поддерживаемые поля

В настоящее время мы поддерживаем:

  • Описание
  • Окружающая среда
  • Пользовательские поля текстовой области
  • Комментарии
  • Журналы

Удаление нежелательной разметки вики из задач, созданных по электронной почте

Непредвиденным преимуществом этой функции является возможность очищать описание задач, созданных с помощью электронных писем в формате HTML. Эти описания могут содержать множество шрифтовых и цветовых тегов. Чтобы удалить их, просто отредактируйте проблему и задайте описание:


{{issue.description.text}}}

По материалам Automation for Jira — Server: Dealing with wiki markup and HTML

Книга набора «Йодо» и исходный код проектов [Амперка / Вики]

Электронная версия инструкции из набора Йодо. Самая актуальная информация по примерам, помощь и подсказки именно здесь!

Электронная версия

Эксперименты

1. Лампа

Светодиод сделаем, который всегда горит. Микроконтроллер использовать, чтобы просто свет включить — это перебор. Но ведь учишься ты!

Light.js
var myCoolLamp = require('@amperka/led').connect(P1);
myCoolLamp.turnOn();

2. Маячок

Мигающий светодиод сделаем. Можешь показывать им, что живо устройство или действия ждёт.

Beacon.js
var led = require('@amperka/led').connect(P1);
led.blink(0.1, 0.9);

3. Кнопочный выключатель

Свтеа переключатель давай сделаем. Клик — свет включится, клик — выключится.

Switch.js
var led = require('@amperka/led')
  .connect(P1);
 
var button = require('@amperka/button')
  .connect(P3);
 
function myCoolButtonHandler() {
  led.toggle();
}
 
button.on('press', myCoolButtonHandler);

4. Телеграф

Звуковых сообщений простых передатчик сделаем мы. Телеграмму поможет передать он.

Telegraph.js
var buzzer = require('@amperka/buzzer')
  .connect(P5);
 
var button = require('@amperka/button')
  .connect(P3);
 
button.on('press', function() {
  buzzer.turnOn();
});
 
button.on('release', function() {
  buzzer.turnOff();
});

5. Диммер

Силы света регулятор сделаем мы. Ручку крути, чтобы сторону выбирать свою: тёмную или светлую.

Dimmer.js
var pot = require('@amperka/pot')
  .connect(A0);
var led = require('@amperka/led')
  .connect(P1)
  .turnOn();
 
function updateBrightness() { 
  var val = pot.read();
  led.brightness(val);
}
 
setInterval(updateBrightness, 10);

6. Автоматический диммер

Разум диммеру дадим. Пусть тем ярче свет горит, чем окружающий мир темнее.

AutoDimmer.js
var led = require('@amperka/led') 
  .connect(P1)
  .turnOn();
 
var sensor = require('@amperka/light-sensor') 
  .connect(A2);
 
setInterval(function() {
  var luxes = sensor.read('lx'); 
  var level = 1 - luxes / 50; led.brightness(level);
}, 10);

7. Умное освещение

Энергию сбережём давай. Свет во тьме включаться и на рассвете гаснуть заставим. Границу света и тьмы потенциометр задаст.

SmartLight.js
var led = require('@amperka/led') 
  .connect(P1);
 
var pot = require('@amperka/pot') 
  .connect(A0);
 
var sensor = require('@amperka/light-sensor') 
  .connect(A2);
 
setInterval(function() {
  var threshold = pot.read() * 100; var luxes = sensor.read('lx');
  if (luxes < threshold) {
    led.turnOn(); 
  } else {
    led.turnOff(); 
  }
}, 10);

8. Элементарный синтезатор

Музыкой заняться пора. С космическим звучанием и одной ручкой синтезатор построим.

BasicSynth.js
var buzzer = require('@amperka/buzzer')
  .connect(P5) 
  .turnOn();
 
var pot = require('@amperka/pot') 
  .connect(A0);
 
setInterval(function() {
  var freq = 20 + 4000 * pot.read(); 
  buzzer.frequency(freq);
}, 10);

9. Терменвокс

В игру изящества добавим. К датчику ладонь приближай и отдаляй, чтобы ноту задать.

Thereminvox.js
var buzzer = require('@amperka/buzzer') 
  .connect(P5)
  .turnOn();
 
var sensor = require('@amperka/light-sensor') 
  .connect(A2);
 
var button = require('@amperka/button') 
  .connect(P3);
 
button.on('press', function() { 
  buzzer.toggle();
});
 
setInterval(function() { 
  buzzer.frequency(20 * sensor.read('lx'));
}, 10);

10. Пантограф

Механикой самое время заняться. Манипулятор соберём, что ручки потенциометра движение повторяет.

Pantograph.js
var servo = require('@amperka/servo') 
  .connect(P13);
 
var pot = require('@amperka/pot') 
  .connect(A0);
 
setInterval(function() {
  var angle = 180 * pot.read(); 
  servo.write(angle);
}, 20);

11. Переезд

Кораблей движением управлять нужно нам. Палку-управлялку сделаем, что шлагбаумом дикари зовут, со звуком и светом для надёжности пущей.
Кнопку нажми, чтобы проезд закрыть. Снова нажми, чтобы открыть.

Crossing.js
var trigger = require('@amperka/button') 
  .connect(P2);
 
var buzzer = require('@amperka/buzzer') 
  .connect(P5)
  .frequency(50);
 
var light = require('@amperka/led') 
  .connect(P1);
 
var barrier = require('@amperka/servo') 
  .connect(P13)
  .write(90);
 
var closed = false;
 
trigger.on('press', function() { 
  closed = !closed;
  if (closed) {
    buzzer.beep(1, 0.5); 
    light.blink(1, 0.5); 
    barrier.write(0);
  } else { 
    buzzer.turnOff(); 
    light.turnOff(); 
    barrier.write(90);
  } 
});

12. Консольный люксометр

Устройство соберём, что на компьютер силу света посылает. За её величиной в виде числа сможем следить мы.

ConsoleLightmeter.js
var sensor = require('@amperka/light-sensor') 
  .connect(A2);
 
setInterval(function() {
  var lx = sensor.read('lx').toFixed(0);
  var time = getTime().toFixed(0); 
  console.log(time, 'sec', '->', lx, 'luxes');
}, 1000);

13. Экранный люксометр

Предыдущее устройство улучшим. Доступным родной язык станет нам. Издалека за показаниями следить возможно будет.

ScreenLightmeter.js
var sensor = require('@amperka/light-sensor')
  .connect(A2);
 
setInterval(function() {
  var lx = sensor.read('lx').toFixed(0); 
  USB.write(lx+' lx'+'\r\n');
}, 200);

14. HTML-термометр

Великий термометр сделаем, что символами крупными температуру выводит. Serial Projector знакомый используй, чтобы результат наблюдать.

HTML-Thermometer.js
var thermometer = require('@amperka/thermometer')
  .connect(A4);
 
setInterval(function() {
  var celsius = thermometer.read('C'); 
  USB.write('<div>'+'temperature'+'</div>'+celsius.toFixed(1)+'\r\n');
}, 1000);

15. Ультразвуковая линейка

Расстояние измеряющий прибор сделаем мы. В Serial Projector смотри, чтобы точную дистанцию знать.

UltrasonicRuler.js
var sonic = require('@amperka/ultrasonic') 
  .connect({trigPin: P10, echoPin: P11});
 
setInterval(function() { 
  sonic.ping(function(err, val) {
    if (err) { 
      USB.write(err.msg+'\r\n');
    } else {
      USB.write(val.toFixed(0)+' mm'+'\r\n'); 
    }
  }, 'mm');
}, 100);

16. Парктроник

Для манёвров точных парктроник сделай. Непрерывный звук будет, когда препятствие близко. Прерывистый сигнал издаст он, если ещё до столкновения время есть.

Parktronic.js
var sonic = require('@amperka/ultrasonic') 
  .connect({trigPin: P10, echoPin: P11});
 
var buzzer = require('@amperka/buzzer') 
  .connect(P5)
  .frequency(440);
 
setInterval(function() { 
  sonic.ping(function(err, val) {
    if (val < 5) { 
      buzzer.turnOn();
    } else if (val < 20) { 
      buzzer.beep(0.1, 0.1);
    } else if (val < 50) { 
      buzzer.beep(0.2, 0.2);
    } else {
      buzzer.turnOff(); 
    }
  }, 'cm');
}, 100);

17. Сканер ИК-пультов

Пульта инфракрасный свет научу видеть. Код кнопки нажатой в консоль устройство выведет. Любой пульт подойдет ему. Приём сигнала светодиод покажет.

IR-Scanner.js
var ir = require('@amperka/ir-receiver')
  .connect(P7);
 
var light = require('@amperka/led') 
  .connect(P1);
 
ir.on('receive', function(code, repeat) { 
  if (!repeat) {
    console.log('*******'); 
  }
 
  console.log('0x' + code.toString(16));
  light.toggle();
});

18. ИК-выключатель света

Светом с пульта управлять будем. Кнопкой, которая свет переключает, та станет, что первой после включения платы нажмёшь.

IR-LigthSwitch.js
var ir = require('@amperka/ir-receiver')
  .connect(P7);
 
var light = require('@amperka/led')
  .connect(P1);
 
var powerCode = null;
 
ir.on('receive', function(code, repeat) { 
  if (repeat) {
    return; 
  }
 
  if (powerCode === null) {
    powerCode = code; 
  }
 
  if (code === powerCode) {
    light.toggle(); 
  }
});

19. Пульт киномана

USB-устройство построим, которое клавиатурой притворяется. Видеоплеером VLC с инфракрасного пульта сможешь управлять ты.

CinephilesMate.js
var ir = require('@amperka/ir-receiver') 
  .connect(P7);
 
var kb = require('@amperka/usb-keyboard');
 
var rewindCode = 0xfd20df; 
var forwardCode = 0xfd609f; 
var playCode = 0xfda05f;
 
ir.on('receive', function(code, repeat) { 
  if (code === playCode) {
    if (!repeat) {
      kb.tap(kb.KEY.SPACE); 
    }
  } else if (code === rewindCode) { 
    kb.tap([kb.MODIFY.CTRL, kb.KEY.LEFT]);
  } else if (code === forwardCode) {
    kb.tap([kb.MODIFY.CTRL, kb.KEY.RIGHT]); 
  }
});

20. Генератор паролей

Устройство сделаем, что из 16 символов пароли совершенно случайные придумывает. Кнопку надолго зажми, чтобы новый пароль задумать. Кратко кнопку нажми, чтобы у курсора пароль текущий ввести.

PasscodeGen.js
var button = require('@amperka/button') 
  .connect(P3, {holdTime: 0.5});
 
var buzzer = require('@amperka/buzzer') 
  .connect(P5);
 
var kb = require('@amperka/usb-keyboard'); 
var random = require('@amperka/hw-random'); 
var password = '';
 
function generatePassword() { 
  password = '';
  while (password.length < 16) {
    var code = random.int(33, 126);
    password += String.fromCharCode(code); 
  }
}
 
button.on('hold', function() { 
  generatePassword(); 
  console.log(password); 
  buzzer.beep(0.1);
});
 
button.on('click', function () { 
  kb.type(password);
}); 
 
generatePassword();

21. Excel-робот

Клавиатурного робота напишем, который каждые 5 секунд в новую строку Excel освещённость и температуру вбивает. Запись чтобы начать, Excel запусти и в ячейку А2 курсор поставь. Чтобы запись прекратить, ещё раз кнопку нажми. На ночь робота оставь. По записанным данным график построй. Изменение данных в динамике увидишь ты.

ExcelRobot.js
var lightSensor = require('@amperka/light-sensor') 
  .connect(A2);
 
var thermometer = require('@amperka/thermometer') 
  .connect(A4);
 
var button = require('@amperka/button') 
  .connect(P3);
 
var kb = require('@amperka/usb-keyboard'); 
 
var timer = require('@amperka/timer')
  .create(5);
 
button.on('press', function() { 
  if (timer.isRunning()) {
    timer.stop(); 
  } else {
    timer.tick().run(); }
});
 
timer.on('tick', function() {
  var time = getTime();
  var lx = lightSensor.read('lx'); 
  var c = thermometer.read('C');
 
  kb.type(time.toFixed(0) + '\t' + 
          lx.toFixed(0) + '\t' +
          c.toFixed(0) + '\n');
});

22. Умный шлагбаум

Из проекта 11 переезд улучшим, самостоятельным сделаем его. Сам проезд закроется, если препятствие увидит. Обратно откроется он, как только на 4 секунды пустоту увидит.

SmartBarrier.js
var sonic = require('@amperka/ultrasonic') 
  .connect({trigPin: P10, echoPin: P11});
 
var buzzer = require('@amperka/buzzer') 
  .connect(P5)
  .frequency(50);
 
var light = require('@amperka/led') 
  .connect(P1);
 
var barrier = require('@amperka/servo') 
  .connect(P13)
  .write(90);
 
var hysteresis = require('@amperka/hysteresis') 
  .create({high: 0.5, highLag: 4, low: 0.5, lowLag: 0});
 
setInterval(function() { 
  sonic.ping(function(err, val) {
    if (err) return;
    hysteresis.push(val); 
  }, 'm');
}, 100);
 
hysteresis.on('low', function(val) { 
  buzzer.beep(1, 0.5); 
  light.blink(1, 0.5); 
  barrier.write(0);
});
 
hysteresis.on('high', function(val) { 
  buzzer.turnOff();
  light.turnOff();
  barrier.write(90);
});

23. Тревожная кнопка

Тёмные силы отпугнуть чтобы, звонкую сирену собери. Кнопку нажми, чтобы тревогу включить. Ещё раз нажми, чтобы прекратить.

AlarmButton.js
var button = require('@amperka/button') 
  .connect(P2);
 
var buzzer = require('@amperka/buzzer') 
  .connect(P5);
 
var light = require('@amperka/led') 
  .connect(P1);
 
var animation = require('@amperka/animation') 
  .create({
    from: 0,
    to: 1,
    loop: true, 
    updateInterval: 0.01
});
 
var armed = false;
 
animation.on('update', function(val) { 
  light.brightness(val); 
  buzzer.frequency(1000 + 4000 * val);
});
 
button.on('press', function() { 
  armed = !armed; 
  buzzer.toggle(armed); 
  light.toggle(armed);
  if (armed) { 
    animation.play();
  } else {
    animation.stop(); 
  }
});

24. Театральный свет

Для представлений свет сделай, который плавно гаснет и мягко нарастает.

TheatreLight.js
var light = require('@amperka/led') 
  .connect(P1)
  .turnOn()
  .brightness(0);
 
var button = require('@amperka/button') 
  .connect(P3);
 
var anim = require('@amperka/animation') 
  .create()
  .reverse();
 
anim.on('update', function(val) { 
  light.brightness(val);
});
 
button.on('press', function() { 
  anim.reverse().play();
});

25. Настольный радар

Роботу голову соберём. Дальномер крутиться будет, чтоб перед собой пространство понять. В виде круговой диаграммы через Serial Projector работу наблюдай.

TableRadar.js
var ultrasonic = require('@amperka/ultrasonic') 
  .connect({trigPin: P10, echoPin: P11});
 
var servo = require('@amperka/servo') 
  .connect(P13);
 
var canvas = { 
  width: 800, 
  height: 500, 
  radius: 300, 
  margin: 150
};
 
var sectors = { 
  count: 18, 
  current: 0, 
  direction: 1
};
 
sectors.values = new Array(sectors.count);
 
function dumpSvg() {
  var svg = [];
  svg.push('<svg + canvas.width + 'px' +
  '" + canvas.height + 'px'); 
  svg.push('" xmlns="http://www.w3.org/2000/svg">');
 
  var cx = canvas.width / 2;
  var cy = canvas.height - canvas.margin; 
  var astep = Math.PI / sectors.count;
 
  for (var i = 0; i < sectors.count; ++i) { 
    var fill = 'black';
    var stroke = 'green';
    var r = sectors.values[i];
    if (!r || r > canvas.radius) {  
      fill = 'none';
      stroke = 'white';
      r = canvas.radius;
    }
 
    if (i === sectors.current) {
      stroke = 'yellow'; 
    }
 
    var a1 = astep * i - Math.PI / 2; 
    var a2 = a1 + astep;
 
    var x1 = cx + r * Math.sin(a1); 
    var y1 = cy - r * Math.cos(a1); 
    var x2 = cx + r * Math.sin(a2); 
    var y2 = cy - r * Math.cos(a2);
 
    x1 = x1.toFixed(0); 
    y1 = y1.toFixed(0); 
    x2 = x2.toFixed(0); 
    y2 = y2.toFixed(0);
 
    svg.push('<path d="');
    svg.push('M' + cx + ' ' + cy + ' '); 
    svg.push('L' + x1 + ' ' + y1 + ' '); 
    svg.push('A'+r +' '+r +' 0,0,1, '+
             x2 + ' ' + y2 + ' '); 
    svg.push('Z');
    svg.push('" stroke="' + stroke +
             '"  fill="' +  fill + '" />');
  }
 
  svg.push('</svg>');
  svg.push('\r\n');
  USB.write(svg.join('')); 
}
 
setInterval(function() { 
  ultrasonic.ping(function(err, val) {
    sectors.values[sectors.current] = val; 
    sectors.current += sectors.direction;
    if (sectors.current === sectors.count - 1 ||
        sectors.current === 0) { 
      sectors.direction = -sectors.direction;
    }
 
    servo.write(sectors.current *180 / sectors.count);
    dumpSvg(); 
  }, 'mm');
}, 300);

А что же дальше?

Прошел все задания? Молодец! Теперь ты смело можешь испытать свои силы и фантазию в реализации собственных проектов. А если ты уже слышал об «Интернете вещей» и хочешь узнать, что это такое, попробуй наше дополнение к набору «Йодо». Ещё одно продолжение — «Автополив» — познакомит тебя с системой автополива растений, а расширение «Робоняша» поможет собрать няшного мобильного робота. Всё только начинается!

Вики, которая позволяет редактировать (изнутри!) Полный веб-интерфейс HTML / CSS

Я ищу вики (или вики-подобную CMS) с некоторыми специальными (вероятно, редкими) функциями.

Основы вики

  • создать новую страницу, связавшись с несуществующей страницей и отредактировав ее
  • история страницы (diff)
  • список последних изменений
  • текстовый редактор (некоторый синтаксис вики, но без WYSIWYG; должен поддерживать полный HTML)
  • разрешить редактирование только зарегистрированным пользователям (и разрешить отключение регистрации)

Рабочий процесс редактирования должен быть беспроблемным (как это имеет место, вероятно, с любой обычной вики): посетите страницу, перейдите к форме редактирования, сохраните ее. Нет внутренних меню, нет обязательного предварительного просмотра, нет обязательных полей и т. Д.

Особые возможности

  • Весь код внешнего интерфейса (HTML и CSS, возможно JavaScript) должен быть редактируемым внутри вики, как и другие страницы вики (т. Е. С тем же редактором; предлагая также историю страниц и т. Д.).
    • Фактическое содержимое вики-страницы должно быть вставлено в заданную позицию (например, путем добавления тега шаблона).
  • Функциональность вики (ссылки «Редактировать» и «История», глобальная навигация по последним изменениям и т. Д.) Должна быть видна только зарегистрированным пользователям.
    • Доступ к этим страницам (например, путем угадывания URL) также должен быть невозможен для посетителей (показать 404 или 403).
  • Открытый HTML-код должен содержать только определенную / редактируемую разметку внешнего интерфейса и содержимое страницы вики. Таким образом, редактор должен иметь 100% контроль над выводимой разметкой (из вики).

Не

требуется , но было бы здорово

  • Поддержка более одного «поля» (кроме основного содержимого вики-страницы): добавьте текстовую область для каждого тега шаблона, добавленного в шаблон HTML, на каждую страницу редактирования.
  • Из вики можно указать код состояния HTTP (например, для отправки 410), который будет использоваться на странице. В случае 3xx, разрешите указывать целевые URL.
  • Разрешить определять, какой HTML-код создается вики-синтаксисом из вики.

Формальные требования

  • Это должно быть FLOSS .
  • Он должен работать на сервере GNU / Linux .

hunterhogan

Все чаще ответом на запросы, начинающиеся с «Мне нужно программное обеспечение для создания веба», является WordPress.

Я предлагаю WordPress с Wiki Pro от WPMU DEV и любые другие плагины, которые вам нужны, чтобы соответствовать вашим конкретным потребностям и функциям.

Горючее танкера «Вики» обнаружено в бельгийских водах

БРЮССЕЛЬ, 3 января. /Корр. РИА «Новости» Виктор Онучко/.
Турецкий танкер «Вики», врезавшийся вечером 1 января в затонувший в Ла-Манше
близ французского порта Дюнкерк норвежский паром «Триколор», разлил дизельное
горючее в бельгийских территориальных водах.

> Пятно горючего, как передает корреспондент РИА «Новости», было обнаружено в четверг вечером после сообщений бельгийских портовых служб, что угрозы загрязнения от танкера «Вики» нет. По последним сведениям, танкер получил повреждения, и его сопровождает пятно дизельного топлива, которое, как полагают в бельгийской береговой охране, вытекает из его двигателя.

По мнению бельгийских специалистов, танкер не затонет, его положение стабильно, а перевозимый им груз — 70 тыс тонн очень огнеопасного керосина — защищен хорошо усиленной обшивкой. Однако «Вики» не допустят в бельгийские порты, поскольку после столкновения с «Триколором» осадка судна стала более низкой, чем допускают правила навигации в портах Бельгии. Кроме того, бельгийские власти утвердили план чрезвычайной ситуации, предусматривающий ликвидацию последствий возможного разлива керосина.

«Вики» врезался в верхнюю часть почти полностью скрытого под водой парома, после чего переместился в бельгийские территориальные воды на расстояние менее 2 км от берега. «Триколор», перевозивший 2 тыс 800 высококлассных легковых автомобилей, затонул 14 декабря минувшего года в результате столкновения с контейнеровозом под багамским флагом «Кариба». С 26 декабря «Триколор» окружен специальной сигнализацией. Кроме того, французское патрульное судно «Фламан» подавало предупредительные сигналы турецкому танкеру о затопленном судне, но по неизвестным причинам «Вики» не сумел избежать столкновения.

Это второе подобное происшествие с затонувшим «Триколором». 17 декабря в него врезалось судно «Николя» под антильским флагом. Бельгийские морские власти объясняют эти инциденты «человеческим фактором».

«Триколор» затонул в оживленном судоходном коридоре
Ла-Манша, по которому ежедневно перемещается до 500 судов.

Синтаксис

Markdown для вики-сайтов в Azure DevOps — Azure DevOps

  • 4 минуты на чтение

В этой статье

Службы Azure DevOps | Azure DevOps Server 2020 | Сервер Azure DevOps 2019 | ТФС 2018

Важно

Чтобы просмотреть содержимое, доступное для вашей платформы, убедитесь, что вы выбрали правильную версию этой статьи в средстве выбора версии, расположенном над оглавлением.Поддержка функций различается в зависимости от того, работаете ли вы в Azure DevOps Services или в локальной версии Azure DevOps Server, переименованной в Team Foundation Server (TFS).
Чтобы узнать, какую локальную версию вы используете, см. Какую платформу / версию я использую?

В этой статье вы найдете руководство по синтаксису Markdown, специфичное для Wiki, для использования в Azure DevOps.

Оглавление для вики-страниц

Чтобы создать оглавление, добавьте [[_TOC_]]. Оглавление создается при добавлении тега и наличии хотя бы одного заголовка на странице.

[[_TOC_]] можно разместить в любом месте страницы, чтобы отобразить оглавление.
Для TOC учитываются только заголовки Markdown (теги заголовков HTML не рассматриваются).

Все теги HTML и Markdown удаляются из заголовков при добавлении их в блок TOC.
Например, добавление полужирного шрифта и курсива к тексту заголовка отображает оглавление следующим образом.

Согласованность сохраняется в форматировании в оглавлении.

Примечание

Тег [[_TOC_]] чувствителен к регистру.Например, [[_toc_]] может не отображать оглавление. Кроме того, отображается только первый экземпляр [[_TOC_]], а остальные игнорируются.

Добавить диаграммы русалок на вики-страницу

Wiki поддерживает следующие типы диаграмм русалки:

Чтобы добавить диаграммы русалок на вики-страницу, используйте следующий синтаксис:

  ::: русалка
<синтаксис диаграммы русалки>
:::
  

Также есть кнопка на панели инструментов для добавления диаграммы Русалочки по умолчанию на вики-страницу.

Примечание

Большинство HTML-тегов и fontawesome не поддерживаются синтаксисом диаграммы «Русалка».Русалка не поддерживается в браузере Internet Explorer.

Вставить видео на страницу Wiki

Чтобы встраивать видео с YouTube и Microsoft Streams на вики-страницу, используйте следующий синтаксис:

  ::: видео

:::
  

iframe — это встроенный блок iframe видео YouTube или Microsoft Streams.

Результат:

(окончание «:::» необходимо для предотвращения разрыва страницы)

Любой файл, содержащий блок YAML в Wiki, обрабатывается таблицей с одним заголовком и одной строкой.Блок YAML должен быть первым в файле и иметь форму действительного YAML, установленного между строками, пунктирными тройками. Он поддерживает все основные типы данных, списки и объекты как значения. Синтаксис поддерживается в вики, предварительный просмотр файла кода.

Базовый пример:

  ---
тег: сообщение
название: Привет, мир
---
  

Теги со списком:

  ---
теги:
- Почта
- код
- сеть
название: Привет, мир
---
  

Вставить результаты запроса Azure Boards в Wiki

Чтобы встроить результаты запроса Azure Boards на вики-страницу в виде таблицы, используйте следующий синтаксис:

  ::: query-table <идентификатор запроса>
:::
  

Вы также можете использовать панель инструментов и селектор запросов для встраивания результатов запроса на вики-страницу.

@ упоминаний пользователей и групп

Для @ упоминания пользователей или групп в вики введите «@» в редакторе вики. Это @mention открывает автозаполнение, из которого вы можете упоминать пользователей или группы, чтобы получать уведомления по электронной почте.

Вы также можете выбрать «@mention» на панели инструментов редактирования.

посещений страниц для вики-страниц

Автоматически вы видите общее количество посещений страницы за последние 30 дней на каждой странице.

Используйте пакетный API pagesBatch , чтобы увидеть ежедневное количество посещений всех страниц в разбивке по страницам. Однако они не сортируются по количеству посещений. Для данных старше 30 дней вы можете получить все посещения страниц с помощью остального API. Отсортируйте эти страницы по количеству посещений, чтобы попасть в первую сотню. Вы можете сохранить эти посещения на панели управления или в базе данных.

Примечание

Посещение страницы определяется как просмотр страницы данным пользователем за 15-минутный интервал.

Ссылка на задания со страницы Wiki

Введите знак фунта ( # ), а затем введите идентификатор рабочего элемента.

Примечание

Эта функция доступна в TFS 2018.2 и более поздних версиях.

Поддержка тегов HTML

на вики-страницах

На вики-страницах вы также можете создавать богатый контент с помощью HTML-тегов.

Подсказка

Вы можете вложить уценку в свой HTML, но вы должны включить пустую строку между HTML-элементом и уценкой.

  

[Ссылка для уценки] (https://microsoft.com)

Примечание

Вставка расширенного содержимого в виде HTML поддерживается в Azure DevOps Server 2019.1 и более поздних версиях.

Пример — встроенное видео

  
  
  
  

Результат:

Пример — форматированный текст

  

Этот текст необходимо зачеркнуть , поскольку он избыточен !

Это текст телетайпа.

Цветной текст
Этот текст выровнен по центру.

Этот текст содержит текст надстрочный .

Этот текст содержит нижний индекс текст.

Статус проекта ЗЕЛЕНЫЙ , хотя количество ошибок / разработчик может быть красным. - Возможность диапазона

Отказ от ответственности: Wiki также поддерживает отображение небольшого текста

Текст большего размера

Результат:

Статьи по теме

Написание веб-приложений — язык программирования Go

Введение

В этом руководстве рассматриваются:

  • Создание структуры данных методами загрузки и сохранения
  • Использование пакета net / http для создания веб-приложений
  • Использование пакета html / template для обработки HTML-шаблонов
  • Использование пакета regexp для проверки пользовательского ввода
  • Использование крышек

Предполагаемые знания:

  • Опыт программирования
  • Понимание основных веб-технологий (HTTP, HTML)
  • Некоторые знания командной строки UNIX / DOS

Начало работы

В настоящее время для запуска Go требуется компьютер с FreeBSD, Linux, macOS или Windows.Мы будем использовать $ для представления командной строки.

Установите Go (см. Инструкцию по установке).

Создайте новый каталог для этого руководства внутри вашего GOPATH и перейдите к нему:

$ mkdir gowiki
$ cd gowiki
 

Создайте файл с именем wiki.go , откройте его в своем любимом редакторе и
добавьте следующие строки:

основной пакет

Импортировать (
"fmt"
"io / ioutil"
)
 

Мы импортируем пакеты fmt и ioutil из Go
стандартная библиотека.Позже, по мере реализации дополнительных функций, мы будем
добавьте больше пакетов в эту декларацию import .

Структуры данных

Начнем с определения структур данных. Вики-сайт состоит из серии
взаимосвязанные страницы, каждая из которых имеет заголовок и тело (содержимое страницы).
Здесь мы определяем Page как структуру с двумя полями, представляющими
заголовок и тело.

 type Page struct {
    Строка заголовка
    Тело [] байт
}
 

Тип [] байт означает «сегмент байта ».(См. Разделы: использование и
внутренние детали для получения дополнительной информации о срезах.)
Элемент Body представляет собой байт [] , а не
строка , потому что это тип, ожидаемый io
библиотеки, которые мы будем использовать, как вы увидите ниже.

Структура Page описывает, как данные страницы будут храниться в памяти.
Но как насчет постоянного хранилища? Мы можем решить эту проблему, создав
сохранить метод на странице :

 func (p * Page) save () error {
    имя файла: = p.Заголовок + ".txt"
    return ioutil.WriteFile (имя файла, p.Body, 0600)
}
 

Сигнатура этого метода гласит: «Это метод с именем save , который
принимает в качестве получателя p , указатель на Page . Занимает
без параметров и возвращает значение типа error . »

Этот метод сохранит Page Body в текст
файл. Для простоты мы будем использовать Title в качестве имени файла.

Метод save возвращает значение error , потому что
это тип возврата WriteFile (стандартная библиотечная функция
который записывает байтовый фрагмент в файл).Метод save возвращает
значение ошибки, чтобы позволить приложению обрабатывать его, если что-то пойдет не так, пока
запись файла. Если все пойдет хорошо, Page.save () вернет
nil (нулевое значение для указателей, интерфейсов и некоторых других
типы).

Восьмеричный целочисленный литерал 0600 , переданный в качестве третьего параметра в
WriteFile , указывает, что файл должен быть создан с помощью
права на чтение и запись только для текущего пользователя. (См. Справочную страницу Unix
открыть (2) для подробностей.)

Помимо сохранения страниц, мы также захотим загрузить страницы:

 func loadPage (строка заголовка) * Page {
    имя файла: = заголовок + ".txt"
    body, _: = ioutil.ReadFile (имя файла)
    return & Page {Title: title, Body: body}
}
 

Функция loadPage создает имя файла из заголовка.
параметр, считывает содержимое файла в новую переменную body и
возвращает указатель на литерал Page , построенный с правильным
значения заголовка и тела.

Функции могут возвращать несколько значений. Стандартная библиотечная функция
io.ReadFile возвращает [] байт и ошибку .
В loadPage ошибка еще не обрабатывается; «пустой идентификатор»
символ подчеркивания ( _ ) используется для удаления символа
возвращаемое значение ошибки (по сути, присвоение значения ничего).

Но что произойдет, если ReadFile обнаружит ошибку? Например,
файл может не существовать.Мы не должны игнорировать такие ошибки. Давайте изменим
функция для возврата * Страница и ошибка .

 func loadPage (строка заголовка) (* Страница, ошибка) {
    имя файла: = заголовок + ".txt"
    body, err: = ioutil.ReadFile (имя файла)
    if err! = nil {
        return nil, err
    }
    return & Page {Title: title, Body: body}, nil
}
 

Теперь вызывающие эту функцию могут проверить второй параметр; если это
nil , то страница успешно загружена.В противном случае это будет
ошибка , которую может обработать вызывающий абонент (см.
спецификацию языка для деталей).

На данный момент у нас есть простая структура данных и возможность сохранять в
загрузить из файла. Давайте напишем функцию main , чтобы проверить, что мы
написано:

 func main () {
    p1: = & Page {Заголовок: "TestPage", Body: [] byte ("Это образец страницы.")}
    p1.save ()
    p2, _: = loadPage ("TestPage")
    fmt.Println (строка (p2.Body))
}
 

После компиляции и выполнения этого кода файл с именем TestPage.txt
будет создан, содержащий содержимое p1 . Файл будет
затем быть прочитанным в структуре p2 и ее элементе Body
выводится на экран.

Вы можете скомпилировать и запустить программу так:

$ go build wiki.go
$ ./wiki
Это образец страницы.
 

(Если вы используете Windows, вы должны ввести « wiki » без
« ./ » для запуска программы.)

Щелкните здесь, чтобы просмотреть код, который мы уже написали.

Представляем пакет

net / http (интерлюдия)

Вот полный рабочий пример простого веб-сервера:


основной пакет

Импортировать (
    "fmt"
    "бревно"
    "net / http"
)

обработчик func (w http.ResponseWriter, r * http.Request) {
    fmt.Fprintf (w, «Привет, я люблю% s!», r.URL.Path [1:])
}

func main () {
    http.HandleFunc ("/", обработчик)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
}
 

Основная функция начинается с вызова
http.HandleFunc , который сообщает пакету http ,
обрабатывать все запросы к корневому веб-каталогу ( "/" ) с помощью
погрузчик .

Затем он вызывает http.ListenAndServe , указывая, что он должен
прослушивать порт 8080 на любом интерфейсе ( ": 8080" ). (Не
пока позаботьтесь о его втором параметре, nil .)
Эта функция будет заблокирована до завершения программы.

ListenAndServe всегда возвращает ошибку, так как она возвращается только тогда, когда
возникает непредвиденная ошибка.Чтобы зарегистрировать эту ошибку, мы заключаем вызов функции в log.Fatal .

Обработчик функции имеет тип http.HandlerFunc .
Требуется http.ResponseWriter и http.Request как
свои аргументы.

Значение http.ResponseWriter собирает ответ HTTP-сервера; письменно
к нему мы отправляем данные HTTP-клиенту.

http.Request — это структура данных, представляющая клиента.
HTTP-запрос. r.URL.Path — компонент пути
URL-адреса запроса. Завершающий [1:] означает
«создать суб-фрагмент Path от 1-го символа до конца».
Это удаляет начальный «/» из имени пути.

Если вы запустите эту программу и получите доступ к URL-адресу:

 http: // localhost: 8080 / обезьяны 

программа представит страницу, содержащую:

 Привет, я люблю обезьян! 

Использование

net / http для обслуживания вики-страниц

Чтобы использовать пакет net / http , его необходимо импортировать:

Импортировать (
"fmt"
"io / ioutil"
"бревно"
 "net / http" 
)
 

Давайте создадим обработчик viewHandler , который позволит пользователям
просмотреть вики-страницу.Он будет обрабатывать URL-адреса с префиксом «/ view /».

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    fmt.Fprintf (w, "

% s

% s
", p.Title, p.Body) }

Опять же, обратите внимание на использование _ для игнорирования ошибки
возвращаемое значение из loadPage . Это сделано здесь для простоты
и вообще считается плохой практикой. Мы займемся этим позже.

Во-первых, эта функция извлекает заголовок страницы из r.URL.Path ,
компонент пути URL-адреса запроса.
Путь повторно нарезается на [len ("/ view /"):] для удаления
ведущий компонент "/ view /" пути запроса.
Это потому, что путь всегда начинается с "/ view /" ,
который не является частью заголовка страницы.

Затем функция загружает данные страницы, форматирует страницу строкой простых
HTML и записывает его в w , http.ResponseWriter .

Чтобы использовать этот обработчик, мы переписываем нашу основную функцию на
инициализировать http , используя viewHandler для обработки
любые запросы по пути / view / .

 func main () {
    http.HandleFunc ("/ просмотр /", viewHandler)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
}
 

Щелкните здесь, чтобы просмотреть код, который мы уже написали.

Давайте создадим некоторые данные страницы (как test.txt ), скомпилируем наш код и
попробуйте обслуживать вики-страницу.

Откройте файл test.txt в редакторе и сохраните строку «Hello world» (без кавычек).
в этом.

$ go build wiki.go
$ ./wiki
 

(Если вы используете Windows, вы должны ввести « wiki » без
« ./ » для запуска программы.)

Когда этот веб-сервер запущен, посещение http: // localhost: 8080 / view / test
должна отобразить страницу с названием «test», содержащую слова «Hello world».

Редактирование страниц

Вики — это не вики без возможности редактировать страницы.Создадим два новых
обработчики: один с именем editHandler для отображения формы редактирования страницы,
а другой с именем saveHandler для сохранения данных, введенных через
форма.

Сначала мы добавляем их в main () :

 func main () {
    http.HandleFunc ("/ просмотр /", viewHandler)
    http.HandleFunc ("/ редактировать /", editHandler)
    http.HandleFunc ("/ сохранить /", saveHandler)
    log.Fatal (http.ListenAndServe (": 8080", ноль))
}
 

Функция editHandler загружает страницу
(или, если он не существует, создайте пустую структуру Page ),
и отображает HTML-форму.

 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    fmt.Fprintf (w, "

Редактирование% s

" + "
" + "
" + "" + "
", p.Title, p.Title, p.Тело) }

Эта функция будет работать нормально, но весь этот жестко запрограммированный HTML уродлив.
Конечно, есть способ получше.

HTML / шаблон пакет

Пакет html / template является частью стандартной библиотеки Go.
Мы можем использовать html / template , чтобы сохранить HTML в отдельном файле,
позволяя нам изменять макет нашей страницы редактирования, не изменяя
базовый код Go.

Сначала мы должны добавить html / template в список импорта.Мы
также больше не будет использовать fmt , поэтому мы должны удалить это.

Импортировать (
 "HTML / шаблон" 
"io / ioutil"
"net / http"
)
 

Создадим файл шаблона, содержащий HTML-форму.
Откройте новый файл с именем edit.html и добавьте следующие строки:

 

Редактирование {{.Title}}

Измените editHandler , чтобы использовать шаблон вместо жестко запрограммированного
HTML:

 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    t, _: = template.ParseFiles ("edit.html")
    t.Execute (ш, р)
}
 

Функция template.ParseFiles будет читать содержимое
edit.html и вернуть шаблон *. Шаблон .

Метод t.Execute выполняет шаблон, записывая
сгенерированный HTML для http.ResponseWriter .
Идентификаторы .Title и .Body , разделенные точками, относятся к
п. Название и п. Тела .

Директивы шаблона заключены в двойные фигурные скобки.
Инструкция printf "% s". Body — это вызов функции
который выводит .Body в виде строки вместо потока байтов,
то же, что и звонок на fmt.Printf .
Пакет html / template помогает гарантировать, что только безопасные и
правильно выглядящий HTML создается с помощью шаблонных действий.Например, это
автоматически экранирует любой знак больше (> ), заменяя его
с & gt; , чтобы убедиться, что данные пользователя не повреждают форму
HTML.

Поскольку сейчас мы работаем с шаблонами, давайте создадим шаблон для нашего
viewHandler называется view.html :

 

{{.Title}}

[ редактировать ]

{{printf "% s" .Body}}

Измените viewHandler соответственно:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    t, _: = template.ParseFiles ("view.html")
    t.Execute (ш, р)
}
 

Обратите внимание, что мы использовали почти один и тот же код шаблона в обоих
обработчики. Давайте удалим это дублирование, переместив код шаблона
к своей собственной функции:

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    t, _: = template.ParseFiles (tmpl + ".html")
    t.Execute (ш, р)
}
 

И измените обработчики, чтобы использовать эту функцию:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, _: = loadPage (заголовок)
    renderTemplate (w, "вид", p)
}
 
 func editHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ edit /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
}
 

Если мы закомментируем регистрацию нашего нереализованного обработчика сохранения в
main , мы можем снова собрать и протестировать нашу программу.Щелкните здесь, чтобы просмотреть код, который мы уже написали.

Обработка несуществующих страниц

Что, если вы посетите
/ просмотреть / APageThatDoesntExist ? Вы увидите страницу, содержащую
HTML. Это потому, что он игнорирует возвращаемое значение ошибки из
loadPage и продолжает попытки заполнить шаблон
без данных. Вместо этого, если запрошенная страница не существует, она должна
перенаправить клиента на страницу редактирования, чтобы можно было создать контент:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ view /"):]
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращение
    }
    renderTemplate (w, "вид", p)
}
 

Функция http.Redirect добавляет код состояния HTTP
http.StatusFound (302) и Местоположение
заголовок HTTP-ответа.

Сохранение страниц

Функция saveHandler будет обрабатывать отправку форм.
находится на страницах редактирования.После раскомментирования соответствующей строки в
main , реализуем обработчик:

 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ save /"):]
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    p.save ()
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
}
 

Заголовок страницы (указанный в URL-адресе) и единственное поле формы,
Кузов , хранятся в новом Page .Затем вызывается метод save () для записи данных в файл,
и клиент перенаправляется на страницу / view / .

Значение, возвращаемое FormValue , относится к типу string .
Мы должны преобразовать это значение в [] байт , прежде чем оно поместится в
структура Page . Мы используем [] байт (тело) для выполнения
преобразование.

Обработка ошибок

В нашей программе есть несколько мест, где ошибки игнорируются.Этот
это плохая практика, не в последнюю очередь потому, что, когда все же возникает ошибка, программа
иметь непреднамеренное поведение. Лучшее решение — обработать ошибки и вернуть
сообщение об ошибке пользователю. Таким образом, если что-то пойдет не так, сервер
будет работать именно так, как мы хотим, и пользователь может быть уведомлен.

Во-первых, давайте обработаем ошибки в renderTemplate :

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    t, err: = template.ParseFiles (tmpl + ".html ")
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращение
    }
    err = t.Execute (ш, р)
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
    }
}
 

Функция http.Error отправляет указанный код ответа HTTP.
(в данном случае «Внутренняя ошибка сервера») и сообщение об ошибке.
Решение поместить это в отдельную функцию уже окупается.

Теперь исправим saveHandler :

 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title: = r.URL.Path [len ("/ save /"):]
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    ошибка: = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращение
    }
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
}
 

Будут сообщены любые ошибки, возникающие во время p.save () .
пользователю.

Кэширование шаблонов

В этом коде есть неэффективность: вызовов renderTemplate
ParseFiles каждый раз при отображении страницы.Лучшим подходом было бы вызвать ParseFiles один раз в программе
инициализация, разбор всех шаблонов в один * шаблон .
Тогда мы можем использовать
ExecuteTemplate
для визуализации определенного шаблона.

Сначала мы создаем глобальную переменную с именем templates и инициализируем
это с ParseFiles .

 var templates = template.Must (template.ParseFiles ("edit.html", "view.html"))
 

Функция template.Must — удобная оболочка, вызывающая панику
при передаче значения ошибки , отличного от нуля, и в противном случае возвращает
* Шаблон без изменений. Здесь уместна паника; если шаблоны
не загружается, единственное, что нужно сделать, это выйти из программы.

Функция ParseFiles принимает любое количество строковых аргументов, которые
идентифицируем наши файлы шаблонов и анализируем эти файлы в шаблоны, которые
назван по имени базового файла. Если бы мы добавили больше шаблонов в наш
программы, мы добавили бы их имена к вызову ParseFiles
аргументы.

Затем мы модифицируем функцию renderTemplate , чтобы вызвать
templates.ExecuteTemplate с именем соответствующего
шаблон:

 func renderTemplate (w http.ResponseWriter, строка tmpl, p * Page) {
    err: = templates.ExecuteTemplate (w, tmpl + ". html", p)
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
    }
}
 

Обратите внимание, что имя шаблона - это имя файла шаблона, поэтому мы должны
добавить ".html " в аргумент tmpl .

Проверка

Как вы могли заметить, у этой программы есть серьезный недостаток безопасности: пользователь
может предоставить произвольный путь для чтения / записи на сервере. Чтобы смягчить
это мы можем написать функцию для проверки заголовка с помощью регулярного выражения.

Сначала добавьте "regexp" в список import .
Затем мы можем создать глобальную переменную для хранения нашей проверки
выражение:

 var validPath = regexp./ (редактировать | сохранить | просмотреть) / ([a-zA-Z0-9] +) $ ")
 

Функция regexp.MustCompile проанализирует и скомпилирует
регулярное выражение и вернуть регулярное выражение .Regexp .
MustCompile отличается от Compile тем, что он
паника, если компиляция выражения завершается неудачно, а Compile возвращает
ошибка в качестве второго параметра.

Теперь давайте напишем функцию, которая использует validPath
выражение для проверки пути и извлечения заголовка страницы:

 func getTitle (w http.ResponseWriter, r * http.Request) (строка, ошибка) {
    m: = validPath.FindStringSubmatch (r.URL.Path)
    if m == nil {
        http.NotFound (ш, г)
        return "", errors.New ("неверный заголовок страницы")
    }
    вернуть m [2], ноль
}
 

Если заголовок действителен, он будет возвращен вместе с nil
значение ошибки. Если заголовок недействителен, функция напишет
Ошибка «404 Not Found» для HTTP-соединения и возврат ошибки в
обработчик. Чтобы создать новую ошибку, мы должны импортировать ошибки
упаковка.

Давайте вызовем getTitle в каждый из обработчиков:

 func viewHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращение
    }
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращение
    }
    renderTemplate (w, "вид", p)
}
 
 func editHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращение
    }
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
}
 
 func saveHandler (w http.ResponseWriter, r * http.Request) {
    title, err: = getTitle (w, r)
    if err! = nil {
        возвращение
    }
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    err = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращение
    }
    http.Redirect (w, r, "/ view /" + title, http.StatusFound)
}
 

Введение в функциональные литералы и замыкания

Выявление состояния ошибки в каждом обработчике приводит к появлению большого количества повторяющегося кода.Что, если бы мы могли обернуть каждый из обработчиков функцией, которая делает это
проверка и проверка ошибок? Go's
функция
литералы предоставляют мощные средства абстрагирования функциональности
это может нам помочь.

Сначала мы переписываем определение функции каждого из обработчиков, чтобы принять
строка заголовка:

func viewHandler (w http.ResponseWriter, r * http.Request, строка заголовка)
func editHandler (w http.ResponseWriter, r * http.Request, строка заголовка)
func saveHandler (w http.ResponseWriter, r * http.Запрос, строка заголовка)
 

Теперь давайте определим функцию-оболочку, которая принимает функцию вышеупомянутой
тип
и возвращает функцию типа http.HandlerFunc
(подходит для передачи в функцию http.HandleFunc ):

func makeHandler (fn func (http.ResponseWriter, * http.Request, string)) http.HandlerFunc {
return func (w http.ResponseWriter, r * http.Request) {
// Здесь мы извлечем заголовок страницы из запроса,
// и вызываем предоставленный обработчик 'fn'
}
}
 

Возвращенная функция называется закрытием, потому что она включает в себя определенные значения.
вне его.В этом случае переменная fn (единственный аргумент
to makeHandler ) заключен в крышку. Переменная
fn будет одним из наших обработчиков сохранения, редактирования или просмотра.

Теперь мы можем взять код из getTitle и использовать его здесь
(с небольшими изменениями):

 func makeHandler (fn func (http.ResponseWriter, * http.Request, string)) http.HandlerFunc {
    return func (w http.ResponseWriter, r * http.Request) {
        м: = действительный путь.FindStringSubmatch (r.URL.Path)
        if m == nil {
            http.NotFound (ш, г)
            возвращение
        }
        fn (ш, г, м [2])
    }
}
 

Замыкание, возвращаемое функцией makeHandler , является функцией, которая принимает
http.ResponseWriter и http.Request (в других
слова, http.HandlerFunc ).
Замыкание извлекает заголовок из пути запроса и
проверяет его с помощью регулярного выражения validPath
. Если
заголовок недействителен, ошибка будет записана в
ResponseWriter , используя http.Функция NotFound .
Если заголовок действителен, вложенная функция обработчика
fn будет вызываться с ResponseWriter ,
Запрос и заголовок в качестве аргументов.

Теперь мы можем обернуть функции-обработчики с помощью makeHandler в
основной , прежде чем они будут зарегистрированы с http
упаковка:

 func main () {
    http.HandleFunc ("/ просмотр /", makeHandler (viewHandler))
    http.HandleFunc ("/ редактировать /", makeHandler (editHandler))
    http.HandleFunc ("/ save /", makeHandler (saveHandler))

    log.Fatal (http.ListenAndServe (": 8080", ноль))
}
 

Наконец, мы удаляем вызовы getTitle из функций-обработчиков,
делая их намного проще:

 func viewHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    p, err: = loadPage (заголовок)
    if err! = nil {
        http.Redirect (w, r, "/ edit /" + title, http.StatusFound)
        возвращение
    }
    renderTemplate (w, "вид", p)
}
 
 func editHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    p, err: = loadPage (заголовок)
    if err! = nil {
        p = & Страница {Заголовок: заголовок}
    }
    renderTemplate (w, "редактировать", p)
}
 
 func saveHandler (w http.ResponseWriter, r * http.Request, строка заголовка) {
    body: = r.FormValue ("тело")
    p: = & Страница {Заголовок: заголовок, Тело: [] байт (тело)}
    ошибка: = p.save ()
    if err! = nil {
        http.Error (w, err.Error (), http.StatusInternalServerError)
        возвращение
    }
    http.Redirect (w, r, "/ view /" + title, http.СтатусНайдено)
}
 

Попробуйте!

Щелкните здесь, чтобы просмотреть окончательный листинг кода.

Перекомпилируйте код и запустите приложение:

$ go build wiki.go
$ ./wiki
 

Посещение http: // localhost: 8080 / view / ANewPage
должен представить вам форму редактирования страницы. Тогда вы сможете
введите текст, нажмите «Сохранить», и вы будете перенаправлены на только что созданную страницу.

Прочие задачи

Вот несколько простых задач, которые вы можете решить самостоятельно:

  • Сохраняйте шаблоны в tmpl / и данные страницы в data / .
  • Добавьте обработчик для перенаправления корневого веб-сервера на
    / просмотреть / FrontPage .
  • Украсить шаблоны страниц, сделав их действительным HTML и добавив
    Правила CSS.
  • Реализуйте межстраничные ссылки путем преобразования экземпляров
    [PageName]
    PageName .
    (подсказка: для этого можно использовать регулярное выражение .ReplaceAllFunc )

11,5. Использование вики курса - создание и запуск курса edX документация

Вики-сайты предоставляют команде курса и учащимся возможность получить доступ, поделиться и
совместно редактировать информацию о вашем курсе и для него.

У каждого курса есть вики, которую вы можете настроить в соответствии с вашими потребностями.
курс. Если у вас есть определенные ожидания относительно того, какой должна быть вики
передайте эти ожидания своим учащимся и персоналу. Вы можете
наполните вики конкретным содержанием и предоставьте
структура скелета и некоторые образцы. В начале курса объясните
как вы хотите использовать вики-курс, и предоставить четкие инструкции и
руководство по его использованию.

Обычное использование вики-курса может включать следующие действия.

  • Обмен ответами на часто задаваемые вопросы курса и сбор новых часто задаваемых вопросов.

  • Совместное использование редактируемой информации о курсе, такой как загрузка и установка
    инструкция к ПО, необходимому для курса

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

  • Публикация исправлений в курсе.

  • Сбор предложений для будущих прогонов курса.

Когда учащиеся и члены команды курса создают и редактируют вики-статьи, они
внести свой вклад в хранилище информации о вашем курсе, которую можно
незамедлительно полезно для других учащихся или полезно для вас и вашей команды курса в качестве
вы разрабатываете другие курсы или будущие запуски того же курса.

Вики для каждого курса является «дочерней» вики для всей вики edX. Изнутри
любой курс вики, выберите ссылку верхнего уровня Wiki в навигационной цепочке
вверху страницы, чтобы посетить вики-сайт edX.

Помните об этих моментах при разработке вики для своего курса.

  • Четко обозначьте цель вики или различных частей вики.
    Например, некоторые части вики предназначены только для распространения информации?
    Если это так, убедитесь, что только ваша команда курса написала
    доступ к этим статьям.

  • Решите, предназначены ли некоторые части вики для совместной работы учащихся.
    или ввод ученика. Убедитесь, что учащиеся могут создавать и редактировать вики
    статьи в этих разделах и используйте текст, чтобы четко указать учащимся, что
    эти страницы можно редактировать.

  • Подумайте о разных задачах, которые будут выполнять люди в разных
    роли. Обычно вы хотите, чтобы ваша команда курса имела некоторые привилегии, которые
    учащихся нет. Например, участники команды курса могут удалить вики
    статьи, но учащиеся не могут.

Члены группы курса могут выполнять эти задачи для управления вики.

Все пользователи, включая учащихся, могут выполнять следующие задачи, в зависимости от
разрешения, которые вы установили для статьи.

Когда вы создаете курс, по умолчанию включается вики, а страница Wiki
отображается вверху страницы курса. Если вы не хотите использовать курс
wiki, вы можете скрыть страницу Wiki в верхней части курса.

Чтобы показать или скрыть вики на вкладках курса, выполните следующие действия.

  1. Откройте свой курс в Studio.

  2. Выберите Content , затем Pages .

  3. Выберите значок глаза в строке Wiki .Страница Wiki скрыта, когда
    значок глаза проходит через косую черту. Вы можете снова показать страницу Wiki ,
    выбрав значок глаза.

Когда вы скрываете вики в своем курсе, все существующие статьи остаются в edX-
широкая вики, но страница Wiki удаляется со страниц вашего курса.

Вы можете контролировать доступ к вики различными способами: изменяя доступ к
wiki в целом, изменив настройки прав чтения / записи статей
внутри вики или путем блокировки статей.

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

  1. Откройте свой курс в Studio.

  2. Выберите Настройки , затем Расширенные настройки .

  3. Прокрутите вниз до поля Разрешить общий доступ к Wiki . Это логическое
    по умолчанию установлено значение False, что означает, что только члены команды курса
    а зачисленные учащиеся могут видеть вики-страницу курса. Если вы измените значение
    в этом поле значение True, тогда любой зарегистрированный пользователь edX может получить доступ к вики курса,
    даже если они не записаны на ваш курс.Однако публичные пользователи
    должны явно переходить к вашей вики через структуру вики, охватывающую весь edX, или
    ссылка, которая была им предоставлена.

Для изменения разрешений на просмотр или редактирование для определенных групп пользователей с помощью
статью, см. Установка разрешений для статей вики.

Чтобы заблокировать статью и предотвратить ее дальнейшее редактирование, см. Раздел «Блокировка статьи Wiki».

Чтобы определенные группы пользователей не могли добавлять или редактировать статьи, вы
необходимо изменить разрешения на чтение и запись для статей.Например, как
член команды курса, вы, вероятно, захотите запретить учащимся создавать
вики-статьи на верхнем уровне, поэтому вам следует удалить доступ на запись к курсу -
статьи уровня вики для большинства пользователей. (Вики-статьи верхнего уровня являются дочерними
вики для всего edX и не может быть найдена в вики курса).

Чтобы изменить разрешения для статей вики, выполните следующие действия.

  1. Просмотрите интерактивную версию вашего курса.

  2. Выберите Wiki .

  3. Перейдите к статье, разрешения которой вы изменяете, а затем выберите
    Настройки .

  4. В разделе Разрешения на странице Настройки установите или снимите флажок
    флажки для доступа на чтение или запись для Group или Other .

  5. Внизу страницы нажмите кнопку Сохранить изменения для
    Разрешения раздел.

Обратите внимание, что есть две разные кнопки Сохранить изменения , одна в верхней части
страница для раздела Уведомления и одна внизу страницы
для раздела Permissions .Если вы изменяете разрешения, убедитесь, что
вы нажимаете кнопку Сохранить изменения внизу страницы для вашего
изменения, которые нужно сохранить.

11.5.5.1. Группы, используемые в разрешениях вики

Каждый курс состоит из следующих групп.

  • Бета-тестеры (по умолчанию бета-тестеры отсутствуют, пока вы их не добавите)

  • Администраторы (по умолчанию автор курса всегда в этой группе)

  • Персонал (это члены команды курса)

Вы добавляете пользователей в эти группы в LMS, выбирая Инструктор , а затем
Членство .

Разрешения для группы Другие применяются к пользователям, не входящим в
три группы курса, включая учащихся.

Чтобы учащиеся максимально использовали возможности вашего курса, создайте вики-страницу.
пробел перед началом курса, заполнив вики курса статьями,
придайте ему желаемую структуру.

Например, вы можете создать вики-статьи, отражающие план курса. В
на верхнем уровне вы можете предоставить схему курса, ответы на часто задаваемые вопросы и ссылки на основные
статьи по каждому разделу.В дочерних статьях для каждого раздела вы можете
предоставить информацию, относящуюся к единицам и компонентам в этом разделе, и
страница для учащихся, чтобы поделиться своими отзывами и опытом.

В этом разделе описывается, как вы можете внести свой вклад в вики-курс.

Когда вы добавляете статью в вики, знайте, на каком уровне вы сейчас находитесь.
просмотр, чтобы убедиться, что вы добавляете новую статью на правильный уровень в
конечно вики.

Чтобы перейти на уровень ниже в вики, выберите Просмотреть всех детей ; двигаться
вверх, выберите соответствующий уровень в вики-ссылках вверху
страницы.

11.5.7.1. Добавить статьи на одном уровне

Чтобы добавить вики-статью на вашем текущем уровне, выполните следующие действия. Если вы этого не сделаете
есть разрешения на добавление статьи, при выборе Добавить статью появляется сообщение
указывает «В разрешении отказано».

  1. В своем курсе выберите Wiki .

  2. Перейдите на уровень, на котором вы хотите добавить новую статью.

  3. Нажмите кнопку Добавить статью в правом верхнем углу страницы.

  4. На новой странице статьи добавьте заголовок страницы и, при желании, несколько
    ключевые слова для создания «ярлыка», который обеспечивает более конкретное местоположение
    идентификатор вашей статьи.

  5. Добавьте содержание к статье. Вы можете ввести простой текст и использовать Markdown
    синтаксис для добавления форматирования. Чтобы получить помощь по синтаксису Markdown, выберите ссылку на
    шпаргалку в верхнем правом углу поля Contents .

  6. Когда вы закончите вводить контент для своей вики-статьи, выберите
    Создать артикул .

11.5.7.2. Добавить статьи ниже текущего уровня

Чтобы добавить дочернюю статью к текущей статье, выполните следующие действия. Если вы это сделаете
нет прав на добавление статьи, при выборе Добавить статью
сообщение указывает «Permission Denied» (Отказано в разрешении).

  1. В своем курсе выберите Wiki .

  2. Перейдите на уровень выше, на который вы хотите добавить новую дочернюю статью.

  3. Выбрать Посмотреть всех детей .

  4. Нажмите кнопку Добавить статью под заголовком вики.

  5. На новой странице статьи добавьте заголовок страницы и, при желании, несколько
    ключевые слова для создания «ярлыка», который обеспечивает более конкретное местоположение
    идентификатор вашей статьи.

  6. Добавьте содержание к статье. Вы можете ввести простой текст и использовать Markdown
    синтаксис для добавления форматирования. Чтобы получить помощь по синтаксису Markdown, выберите ссылку на
    шпаргалку в верхнем правом углу поля Contents .

  7. Когда вы закончите вводить контент для своей вики-статьи, выберите
    Создать артикул .

Если у вас есть права на редактирование статьи, вы увидите кнопку и значок Изменить
справа от содержания статьи.

Чтобы внести изменения в статью вики, выполните следующие действия.

  1. В своем курсе выберите Wiki .

  2. Перейдите к статье, которую хотите отредактировать.

  3. Выберите Изменить .

  4. Внесите свои изменения. Чтобы получить справку по синтаксису Markdown, выберите ссылку на
    шпаргалка в верхнем правом углу поля Contents .

  5. В поле Сводка в левом нижнем углу под полем Содержание ,
    введите краткое описание внесенных вами изменений. Это описание появляется
    в списке Изменения и помогает другим пользователям вики понять, что
    изменения, которые вы внесли в статью.

  6. Когда вы закончите редактировать, выберите Сохранить изменения .

Поле Фильтр доступно только в том случае, если любой уровень вики содержит несколько
статьи.

Введите текстовую строку в поле Фильтр , чтобы найти список всех статей с
эта текстовая строка в их заголовках.

Вики есть история изменений для каждой статьи. Вы можете просмотреть каждое прошлое
версия статьи, вернуться к выбранной более ранней версии статьи,
или объединить текущую версию статьи с выбранной более ранней версией.

11.5.10.1. Просмотр списка предыдущих версий статьи

вики

  1. В своем курсе выберите Wiki .

  2. Перейдите к статье вики, для которой вы хотите просмотреть историю изменений.

  3. Выбрать Изменения . Ранее сохраненные версии текущей статьи
    в списке, причем самые свежие наверху.

11.5.10.2. Просмотр предыдущей версии статьи

вики

  1. На странице Changes вашей вики выберите версию статьи.
    что вы хотите просмотреть.

  2. Выберите Просмотреть эту версию , чтобы увидеть статью в том виде, в котором она появилась после
    доработка была сделана.

11.5.10.3. См. Построчные изменения в предыдущей версии

  1. На странице Changes вашей вики выберите версию статьи.
    что вы хотите просмотреть.

  2. Выберите связанные дату, время и информацию об авторе, чтобы просмотреть построчно
    изменения, внесенные в эту версию. Текст, выделенный красным, был
    заменяется текстом, выделенным зеленым цветом под ним.

11.5.10.4. Замена текущей версии предыдущей версией

  1. На странице Changes вашей вики выберите версию статьи.
    к которому вы хотите вернуться.

  2. Выбрать Перейти к выбранной версии , чтобы заменить текущую версию на
    выбранный.

11.5.10.5. Объединить текущую версию с предыдущей версией

  1. На странице Changes вашей вики выберите версию статьи.
    которую вы хотите объединить с текущей версией.

  2. Выберите Объединить выбранный с текущим , чтобы объединить текущий и
    выбранные версии.

Блокировка статьи вики предотвращает внесение в нее дальнейших изменений. Запереть
статья вики либо после ее создания, либо после внесения определенных изменений,
Следуй этим шагам.

  1. Просмотрите интерактивную версию вашего курса.

  2. Выберите Wiki .

  3. Перейдите к статье, которую вы хотите заблокировать, и выберите Настройки .

  4. В разделе Permissions на странице Settings выберите Lock
    чекбокс статьи
    .

  5. Внизу страницы нажмите кнопку Сохранить изменения для
    Разрешения раздел.

Только члены команды курса могут удалять статьи. Кроме того, вы можете только удалить
статью, если у вас есть разрешение на ее редактирование. Если у вас есть
требуемые разрешения, вы увидите кнопку Удалить статью внизу
Редактировать страницу .

Чтобы удалить статью, выполните следующие действия.

  1. Просмотрите интерактивную версию вашего курса.

  2. Выберите Wiki .

  3. Перейдите к статье, которую хотите удалить, и выберите Изменить .

  4. Выбрать Удалить артикул .

  5. На странице подтверждения удаления выберите Да, я уверен .

  6. При желании также установите флажок Purge .Подробнее см.
    Удаление статьи из вики.

  7. Выберите Удалить товар , чтобы подтвердить удаление.

11.5.12.1. Очистка Wiki Статья

Когда вы удаляете и очищаете статью, она полностью удаляется из вики,
без возможности отменить удаление. Выбирайте этот вариант, только если вы уверены
вы не захотите восстанавливать контент.

Чтобы очищать статью при ее удалении, установите флажок Очистить в
страница подтверждения удаления.

11.5.12.2. Восстановление удаленной статьи

вики

Статьи, которые были удалены, но не очищены, могут быть восстановлены. Ссылка на
статья остается видимой на том уровне, на котором она была создана.

Чтобы восстановить удаленную статью, выберите ссылку на статью и выберите
Восстановить .

Мнение | Сможет ли Википедия выжить?

Может ли давление мобильных устройств и внутренняя напряженность разорвать Википедию? Мир без него кажется невообразимым, но подумайте о судьбе других онлайн-сообществ.Основанная в 1985 году, на заре Интернета, Well, самопровозглашенная «колыбель движения онлайн-сообщества», принимала влиятельных светил доткомов на своих дискуссионных форумах на электронных досках объявлений. К 1995 году он резко упал, и сегодня это оболочка самого себя. Ведение блогов, которое десять лет назад отмечалось как пионер новой захватывающей формы личного письма, значительно сократилось в эпоху социальных сетей.

Это экзистенциальные проблемы, но их еще можно решить.Другой важной альтернативы Википедии нет, и добрая воля к проекту - замечательный подвиг альтруизма - едва ли может быть выше. Если фонду потребуется больше пожертвований, он наверняка сможет их собрать.

Настоящие задачи для Википедии состоят в том, чтобы разрешить споры об управлении - напряженность между сотрудниками фонда, давние редакторы, пытающиеся защитить свои прерогативы, и новые добровольцы, пытающиеся взломать, - и разработать среду редактирования, ориентированную на мобильные устройства. Один из членов правления, Мария Сефидари, предупредила, что «некоторые сообщества стали настолько устойчивыми к изменениям и отвращением к инновациям», что рискуют остаться «застрявшими в 2006 году, в то время как остальная часть Интернета думает о 2020 году и следующих трех миллиардах пользователей.

В течение последних нескольких лет Смитсоновский институт, Национальный архив и другие учреждения мирового уровня, библиотеки и музеи сотрудничали с волонтерами Википедии для повышения точности, качества ссылок и глубины мультимедиа на страницах статей. Это движение восходит к 2010 году, когда Британский музей увидел, что посещаемость Википедии к статьям об артефактах в пять раз больше, чем на собственном веб-сайте музея. Воспользовавшись возможностями Википедии для расширения ее охвата, музей пригласил редактора Википедии поработать со своим куратором.С тех пор аналогичные партнерские отношения были установлены с такими группами, как Cochrane Collaboration, некоммерческая организация, которая специализируется на оказании медицинской помощи, основанной на фактических данных, и Центры по контролю и профилактике заболеваний.

Это жизненно важные возможности для Википедии, чтобы привлечь внешних экспертов и расширить свою базу редакторов. Это также наиболее многообещающий способ решить значительный и часто отмечаемый гендерный разрыв среди редакторов Википедии; в 2011 году женщины составляли менее 15 процентов.

Наихудший сценарий - это конец Википедии, но не с треском, а с хныканьем: долгое, медленное снижение активности, точности и полезности, которое недостаточно драматично, чтобы подтолкнуть сообщество к проведению значимых реформ.

Никакие усилия в истории не позволили получить так много информации за такую ​​небольшую цену в руки стольких людей - подвиг, который тем более примечателен отсутствием прибыли и владельцев. В век интернет-гигантов стоит сохранить этот самый бескорыстный веб-сайт.

HTML (html) - wikipe.wiki

Эль-lenguaje de marcado de hipertexto, o HTML, es el lenguaje de marcado estándar для наиболее распространенных документов в Интернете.Puede ser asistido por tecnologías como hojas de estilo en cascada (CSS) y lenguajes de scripting como JavaScript.
Los navegadores web reciben documentos HTML de un servidor web or del almacenamiento local y convierten los documentos en páginas web multimedia. HTML описывает структуру веб-страницы с семантической формой и исходными текстами, включая señales para la apariencia del document.
Элементы HTML и основные компоненты HTML. Con las construcciones HTML, las imágenes y otros objetos, como los formularios interactivos, se pueden incrustar en la página renderizada.HTML пропорции и средства для создания структурных документов на основе семантических структурных текстов, содержащихся в текстах, таблицах, списках, enlaces, citas y otros elementos. HTML-элементы ограничены этикетами, скрытыми с угловым парентезом. Этикетки como y Introduction Contenido Directamente en la página. Отобразить этикетку

и соответствующую информацию о тексте документа и включить другой этикет с субэлементами. Los navegadores no muestran las etiquetas HTML, pero las utilizan для интерпретации содержания страницы.HTML включает в себя встроенные программы на языке безопасности команд на JavaScript, что обеспечивает удобство использования и содержание веб-страниц. La inclusión de CSS определяют аспект и состояние содержания. Консорциум World Wide Web Consortium (W3C), ответственный за HTML и действительный ответственный за использование CSS, созданный с использованием CSS и явный HTML-контент с 1997 года.

В 1980 году физический Тим Бернерс-Ли, contratista del CERN, propuso y creó el prototipo de INQUIRE, un sistema para que losvestigadores del CERN, utilicen y отсек документов.В 1989 г. Бернерс-Ли написал меморандум о поддержке системы hipertexto basado в Интернете. Berners-Lee especificó HTML y escribió el navegador y el software del servidor a final de 1990. Ese año, Berners-Lee y el ingeniero de sistemas de datos del CERN, Robert Cailliau, colaboraron en una solicitud conunta de financiación, pero el CERN no принять - формальный проект. En sus notas personales de 1990 enumeró "algunas de las muchas áreas en las que se utiliza el hipertexto" y puso una enciclopedia en primer lugar.Пример описания HTML доступен для публикации в документе «Этикетки HTML», который используется в Интернете в конце 1991 года Тима Бернерса-Ли. Опишите 18 элементов, которые соответствуют исходному относительному простому HTML. Excepto por la etiqueta de hipervínculo, estos fueron fuertemente influenciados por SGMLguid, un formato de documentación interno basado en el lenguaje de marcado generalizado estándar (SGML) в ЦЕРН. Once de estos elementos todavía existen en HTML 4.HTML - это язык веб-сайта, который используется для интерпретации текстовых компонентов, изображений и других материалов на веб-страницах, визуальных или звуковых файлов. Эти характеристики предопределены для элементов кода маркера HTML, которые определены в навигаторе, и являются характерными для модифицируемых или средних средних элементов CSS для части разработки веб-страницы. Muchos de los elementos de texto se encuentran en el informe técnico de la ISO 1988 TR 9537 Técnicas para usar SGML, que a su vez cubre las características de los primeros lenguajes de formato de texto, como el utilizado por el commando RUNOFF desarrollado Декада 1960 года для CTSS (Compatible Time -Sharing System) действующая система: есть команды в формате, производные от команд, использующих типографию для ручных форматов документов.Sin embargo, el concept SGML de marcado generalizado se basa en elementos (rangos anidados anidados con atributos) en lugar de simplemente efectos de impresión, con también la separación de estructura y marcado; HTML имеет прогрессивное движение в прямом направлении с CSS.
Бернерс-Ли рассматривает HTML как приложение SGML. Fue Definido formmente como tal por el Grupo de Trabajo de Ingeniería de Internet (IETF) con la publicación a mediados de la primera propuesta para una especificación HTML, el borrador de Internet "Hypertext Markup Language (HTML)" de Berners-Lee y Дэн Коннолли, "Включено определение типа документа SGML для определения грамматики"

Как скачать и просмотреть Википедию в автономном режиме

Интернет - отличный ресурс.Есть множество способов найти нужную информацию. Один из примеров, популярный ресурс: Википедия. Когда вы ищете что-либо в Интернете, статья в Википедии, вероятно, является одним из первых результатов Google, на которые вы нажимаете.

Но что, если вы находитесь в черной дыре Интернета и вам нужно провести предварительное исследование? Мы всегда ищем подробную информацию о местах отдыха, исторических событиях, знаменитостях, определениях слов и, возможно, даже о преобразовании в PDF.

Было бы трудно найти такой доступный источник исследования, как Википедия, без Интернета.Или ты бы?

Раньше мы показывали вам, как создать PDF-файл статей из Викпедии, который вы могли бы взять с собой. Что ж, мы наткнулись на еще одно изящное решение, в котором вы можете создать свою собственную автономную версию с помощью WikiTaxi.

Что такое ВикиТакси?

WikiTaxi - это приложение, которое позволяет загружать базу данных Википедии на свой компьютер, которую вы можете просматривать, искать и просматривать в автономном режиме. Согласно странице проекта, это «однофайловое приложение», которое «не требует движка базы данных или браузера HTML.”

Так как же это делает WikiTaxi? Приложение использует исходные дампы базы данных Википедии. Дампы данных, как правило, представляют собой выходные данные, которые используются в качестве резервных копий. Но его также можно использовать для репликации базы данных. По сути, это то, что вы будете делать с WikiTaxi.

Как скачать собственную Википедию

Чтобы начать создание собственной автономной Википедии, вы должны загрузить файл базы данных Википедии и приложение WikiTaxi из Интернета. В приложении есть необходимый вам автономный просмотрщик и импортер Википедии.Затем вы импортируете файл базы данных в базу данных WikiTaxi, которую сможете использовать.

Приступим.

* Предупреждение: вы будете иметь дело с файлами большого размера. Таким образом, время загрузки может быть медленным.

1. Загрузите одну из резервных копий Wiki. Некоторые из рекомендованных на сайте проекта:

  • Simple English (simplewiki), небольшая загрузка, менее 25 МБ, отлично подходит для вашего первого импорта и тестирования WikiTaxi.
  • английский (enwiki), огромное количество скачиваний, более 3-х.5 ГБ.
  • Немецкий (dewiki), большая загрузка, более 1,1 Гб.
  • Frensh (frwiki), средняя загрузка, менее 1 ГБ.
  • Польский (plwiki), загрузка меньшего размера, менее 400 МБ.
  • Дампы для всех вики, на разных языках и в разных размерах.

Вы также можете сами проверить основной список загрузок базы данных Википедии. Он регулярно обновляется. Таким образом, вы захотите найти последнюю версию, хотя вы можете выбрать любой датированный дамп данных по своему желанию (мы использовали версию от 23 августа для этого руководства).

Это может показаться сложным, но не пугайтесь. Обращаем ваше внимание на файл - pages-article.xml.bz2 . Загрузите только этот тип файла.

2. После этого загрузите приложение WikiTaxi. Вы можете найти последнюю загрузку в верхнем левом углу страницы проекта

3. Извлеките заархивированный файл приложения WikiTaxi в папку по вашему выбору.

4. После извлечения щелкните файл WikiTaxi_Importer.exe

5.В файле дампа XML для импорта раздела нажмите Обзор и выберите файл базы данных, который вы загрузили на первом шаге

6. В разделе файла базы данных WikiTaxi нажмите Обзор и выберите место для установки папки. Введите имя для создаваемой базы данных и нажмите Сохранить

7. Нажмите Импортировать сейчас!

8. После завершения импорта щелкните WikiTaxi.exe в папке с файлами приложения. Это ваш зритель. Нажмите Параметры> Открыть базу данных * .taxi…

9. Найдите и выберите файл базы данных, который вы создали (наш «Wikipedia.taxi» из шага 7). Затем приложение запустится со случайной страницы, но вы можете легко перейти с нее на другие статьи.

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

Мы всегда говорим о том, что работа в облаке и через Интернет обеспечивает большое удобство. Но WikiTaxi просто показывает, что есть способы сделать работу без интернета столь же удобной!

Уценка

- reddit.com

Markdown - это формат, в котором контент пишется на Reddit. Это
руководство по особой разновидности Markdown на Reddit, обновленное для New
Reddit, по состоянию на 19 сентября 2018 г.

Текстовый контент на Reddit - комментарии, собственные сообщения и т. Д. -
представлен как специфическая для Reddit вариация Markdown
формат, и этот формат был изменен в New Reddit, как в том, как он
проанализирован и как он отображается.Это руководство по теме Reddit.
Markdown, объясняя в целом, как форматировать контент на New Reddit,
и, в частности, определение областей, в которых Markdown со вкусом New Reddit
отличается от уценки со вкусом старого Reddit.

Те, кто отправляет контент исключительно через "Необычные штаны" по умолчанию.
Редактор New Reddit не имеет доступа к описанным деталям
здесь. Необязательно , чтобы знать , чтобы использовать эту информацию.
Reddit - Fancy Pants - это редактор форматированного текста, который предоставляет все
общие параметры форматирования, такие как полужирный, курсив, списки и т. д.

Внутри примеры представлены в виде пар, сначала показывающих, как Markdown
записывается в редакторе как , затем как отображается как или отображается
на экране. Важные Новые заметки Reddit о различиях между
Новая уценка со вкусом Reddit и уценка со вкусом Old Reddit
выделенные курсивом абзацы, отмеченные хрустальным шаром
(🔮), и общий подсказывает геральдической лилии (⚜️). (верхний индекс)

надстрочный
`код` код


Письменный :

[ссылка] (https: // redditinc.com)

или

  [ссылка] [1]

[1]: https: // redditinc.com`
  

Обработано :

ссылка


Письменный :

  # Заголовок 1
## Заголовок 2
  

Обработано :

Товарная позиция 2


Письменный :

  - а
- б
  1.c
  2. г
  

Обработано :


Письменный :

 > Lorem blockquote dolor sit amet, conctetur adipiscing elit.
> Sed ullamcorper enim libero, ut luctus lorem ultricies ut.
> Aenean sed nulla a mauris posuere aliquam bibendum id ipsum.
> Fusce non augue mollis, dictum libero sed, blockquote enim.
  

Обработано :

Lorem blockquote dolor sit amet ,conctetur adipiscing elit.Sed ullamcorper enim libero, ut luctus lorem ultricies ut.
Aenean sed nulla a mauris posuere aliquam bibendum id ipsum.
Fusce non augue mollis, dictum libero sed, blockquote enim.


Письменный :

  | заголовок | заголовок | заголовок | заголовок |
| -------- |: ------- | -------: |: ------: |
| вещи | вещи | вещи | вещи |
  

Обработано :

Заголовок Заголовок Заголовок Заголовок
персонал сотрудников сотрудников персонал

Написано (обратите внимание на отступ) :

  fn main () {
        println! ("эй")
    }
  

Обработано :

  fn main () {
    println! ("эй")
}
  

Markdown контент может быть размещен в нескольких местах Reddit.В
в основном Markdown используется в собственном тексте сообщения (тело сообщения
текстовый пост) и в комментариях.

Когда вы отправляете текстовое сообщение или комментарий в New Reddit, по умолчанию
вы отправляете контент, не связанный с Markdown, через WYSIWYG «Fancy
Редактор штанов (хотя бы на десктопе — история может быть другой.
на мобильных платформах). Если вместо этого вы нажмете «Перейти на уценку» в отправке публикации
screen, то вы отправите Markdown. Пользователи могут предпочесть Markdown, а не Fancy Pants для более точного контроля над своим документом и доступа к случайным
функции, которые не поддерживаются Fancy Pants, или просто
предпочтение.

Другие места, которые поддерживают Markdown, включают:

  • Вики — у некоторых субреддитов есть собственные вики, и есть
    вики для всего сайта.

  • Текст отправки субреддита (текст, отображаемый в старом
    Reddit при отправке сообщения в конкретный сабреддит).
  • Новая боковая панель «текстовой области» Reddit.
  • Правила субреддита — они отображаются в нескольких местах,
    наиболее заметно на боковой панели, но также и на других страницах.

  • Текст «О нас» в некоторых профилях пользователей в New Reddit — в настоящее время находится в стадии бета-тестирования (как
    функция согласия).

Имеются существенные различия в обосновании этих последних случаев
между Old Reddit и New Reddit, старым парсером Markdown и
новый парсер Markdown. Для получения дополнительной информации см. «Различия в поддержке контента между старым и новым Reddit»

Абзацы и перенос строки

Абзацы на Reddit записываются в виде строк текста, разделенных пробелом.
линий.

Письменный :

  Далеко в неизведанных захолустьях немодного конца
В западном спиральном рукаве Галактики находится маленькое неучтенное желтое солнце.Находиться на орбите на расстоянии примерно девяноста двух миллионов миль - это
совершенно ничтожная маленькая сине-зеленая планета, чьи потомки обезьяны
формы жизни настолько примитивны, что они все еще думают о цифровых
часы - довольно изящная идея.

У этой планеты была - или, скорее, была проблема, которая заключалась в следующем: большая часть
люди на нем были недовольны большую часть времени. Множество решений
были предложены для этой проблемы, но большинство из них были в основном
озабочены движениями маленьких зеленых бумажек, которые
движения маленьких зеленых бумажек, что странно, потому что на
в целом это были не маленькие зеленые листочки бумаги,
несчастный. 

Обработано :

Далеко в неизведанных захолустьях немодного конца
В западном спиральном рукаве Галактики находится маленькое неучтенное желтое солнце.

Облетает это на расстоянии примерно девяноста двух миллионов миль.
совершенно ничтожная маленькая сине-зеленая планета, чьи потомки обезьяны
формы жизни настолько примитивны, что они все еще думают о цифровых
часы — довольно изящная идея.

У этой планеты есть — или, скорее, была проблема, которая заключалась в следующем: большая часть
люди на нем были недовольны большую часть времени.Множество решений
были предложены для этой проблемы, но большинство из них были в основном
озабочены движениями маленьких зеленых бумажек, которые
движения маленьких зеленых бумажек, что странно, потому что на
в целом это были не маленькие зеленые листочки бумаги,
несчастный.

Обратите внимание, что разрывы строк не отображаются, то есть соседние строки
связаны вместе, чтобы создать единый абзац. Разрывы строк
могут быть добавлены явно, заканчивая строки двумя пробелами или
обратная косая черта ( \ ).

Написано ( обратите внимание на двойные пробелы в конце первой строки ):

  Любовь - это все.
Мы всего лишь штуки.
  

Обработано :

Любовь — это все.
Мы только штуки.

Письменный ( обратите внимание на расположение и направление косой черты ):

  За пределами представлений о проступках \
и праведность есть поле.\
Я встречусь с тобой там.
  

Обработано :

За пределами идей о проступках
и правильных поступках есть поле.
Я встречу тебя там.

🔮 Новое примечание Reddit : создание разрывов строк с помощью обратной косой черты работает только в
Новый Reddit. Хотя обратная косая черта более понятна для чтения и записи, чем две
пробелы, если вам нужна совместимость со старым Reddit, используйте два пробела для создания разрывов строк.

Абзацы разделяются любым количеством пустых строк, и эти пустые
сами линии не отображаются; таким образом, нельзя добавить произвольный
количество места между абзацами, просто добавляя лишние пустые строки.

Письменный :

  Не беспокойтесь. \
Подумайте, кто создал мысль!



Почему ты сидишь в тюрьме \
Когда дверь так широко открыта?
  

Обработано :

Не беспокойтесь.
Подумайте, кто создал мысль!

Почему ты остаешься в тюрьме
Когда дверь так широко открыта?

⚜️ Совет : Уловка для вставки пустых строк состоит в том, чтобы создать
абзац, не содержащий ничего, кроме «неразрывного пробела».

Письменный :

  Не беспокойтесь. \
Подумайте, кто создал мысль!

& nbsp;

Почему ты сидишь в тюрьме \
Когда дверь так широко открыта?
  

Обработано :

Не беспокойтесь.
Подумайте, кто создал мысль!

Почему ты остаешься в тюрьме
Когда дверь так широко открыта?

Это & nbsp; — это своего рода объект HTML, полезный для различных
«хитростей» в Markdown.

Базовое форматирование текста

Курсив текст представлен окружающим текстом с одним
звездочка ( * ) или подчеркивание ( _ ).

Письменный :

  От запроса уклоняется только * ошибка *, а не истина.
  

Обработано :

Только ошибка , а не истина , уклоняется от запроса.

Полужирный текст представлен окружающим текстом с двойным
звездочки ( ** ) или двойное подчеркивание ( __ ).

Письменный :

  От запроса уклоняется только ** ошибка **, а не __truth__.
  

Обработано :

Только ошибка , а не правда , уклоняется от запроса.

Полужирный курсив Текст представлен окружающим текстом либо
тройные звездочки ( *** ) или тройные подчеркивания ( ___ ).

Письменный :

  Только *** error ***, а не ___truth___, уклоняется от запроса. 

Обработано :

Это ошибка только, а не правда , которая уклоняется от запроса.

В предыдущих примерах выделено одно слово, но ударение может охватывать
также несколько слов.

Обратите внимание, что в предыдущих примерах выделенные слова были
полностью окружены звездами или подчеркиванием. Также возможно
подчеркивать только части слов, , но только звездочками .

Письменный :

  Это полностью суб * дер * ма ** тогли ** фика.
  

Обработано :

Это полностью sub der ma togly phic.

Зачеркнутый текст представлен окружающим текстом с
двойные тильды ( ~~ ).

Письменный :

  Самое лучшее, что вы когда-либо узнаете, - это просто
~~ любить ~~ reddit и быть ~~ любимым ~~ reddit взамен. 

Обработано :

Величайшее, чему вы когда-либо научитесь, — это просто
любить reddit и любить reddit взамен.

Спойлеры можно скрыть как spoilertext , заключив текст в >!
и ! <.

Письменный :

  Самое лучшее, что вы когда-либо узнаете, - это просто>! Reddit и получить взамен reddit! <.
  

Обработано :

Самое лучшее, что вы когда-либо узнаете, - это просто реддитировать и получать в ответ реддитинг.(a [b] (http://example.com)) ). Новый
Reddit (пока) не поддерживает несколько уровней надстрочного текста. А также
есть баги. В обоих. Для максимальной совместимости надстрочного индекса между
Старый и новый Reddit, придерживайтесь одного слова, без скобок
надстрочный синтаксис и надстрочный индекс каждого слова или, поочередно, отдельные
слова с "неразрывным пробелом" ( & nbsp; ) или
"пространство четверти ширины" ( & # x2005; ) HTML-сущности (последний
позволяет использовать перенос строки в верхнем индексе). return.возвращение.

Обработано :

Величайшее, чему вы когда-либо научитесь, - это просто
reddit и будет reddited в ​​возврате .

Ссылки

URL-адресов, начинающихся с «http: //» или «https: //», являются
автоматически добавляются гиперссылки, как и имена субреддитов и имена пользователей.
Последние известны как redditlinks и userlinks соответственно. Коллективно
они известны как автосылки .

⚜️ Совет : сложные URL-адреса могут анализироваться неожиданными способами как
автоссылки. Если вы обнаружите, что URL-адрес ссылается неправильно, вы можете
вместо этого окружите звено угловыми скобами ( <, > ).

Письменный :



Обработано :

http://example.com/foo/../bar ..

На произвольный текст можно сделать явную гиперссылку, заключив его в
квадратные скобки, за которыми следует URL в скобках.Ссылка может
при желании можно присвоить заголовок , который обычно отображается в браузере
когда пользователь наводит указатель мыши на ссылку.

Заголовок должен быть заключен в одинарные кавычки, двойные кавычки или
скобки.

письменный Оформлено
[Руми] (https://en.wikipedia.org/wiki/Rumi) Руми
[Заппа] (https: // en.wikipedia.org/wiki/Frank_Zappa "Фрэнк Заппа - Википедия") Заппа
[Ганди] (https://en.wikipedia.org/wiki/Mahatma_Gandhi 'Махатма Ганди - Википедия') Ганди
[Твен] (https://en.wikipedia.org/wiki/Mark_Twain (Марк Твен - Википедия)) Твен

🔮 Новое примечание Reddit : заголовки в круглых скобках
поддерживается в New Reddit.Для совместимости используйте кавычки.

Ссылки также могут быть определены как ссылки вне абзаца.

Письменный :

  [Очень немного] нужно для счастливой жизни;
все это внутри вас, в вашем [образе мышления] [wot].

[Очень мало]: https://www.reddit.com/r/Meditation/
[wot]: https://www.reddit.com/r/ChangeMyView/
  

Обработано :

Очень мало нужно для счастливой жизни;
все это внутри вас, в вашем образе мышления.

По умолчанию справочное имя такое же, как текст в скобках, но
ссылка может быть названа явно во втором наборе скобок,
как в [образ мышления] [wot] . Как и встроенные ссылки, ссылочные ссылки могут
есть титулы.

⚜️ Совет : ссылки в стиле справочника особенно полезны для
избавление от беспорядка в тексте с большим количеством ссылок.

Письменный :

  Где-то в [Ла-Манча] [lm], в месте, название которого мне не важно
помните, недавно жил джентльмен, один из тех, у кого
[копье] и [древний щит] [as] на полке и держит [тощий кляч] [sn]
и борзая для скачек.[lm]: https://en.wikipedia.org/wiki/La_Mancha
[копье]: https://en.wikipedia.org/wiki/Holy_Lance "Святое Копье - Википедия"
[as]: http://myarmoury.com/feature_shield.html «Щит: краткая история его использования и развития»
[sn]: https://en.wikipedia.org/wiki/Epona (Эпона - Википедия)
  

Обработано :

Где-то в Ла-Манче, в месте, имя которого мне не важно.
помните, недавно жил джентльмен, один из тех, у кого
копье и древний щит на полке и держит тощую клячу
и борзая для скачек.

⚜️ Совет : обратите внимание, что ссылки могут содержать круглые скобки, только если
они «сбалансированы», то есть если после каждого «(» следует «)».
Чтобы создать ссылку на URL-адрес с несбалансированными круглыми скобками, либо избегайте
скобки с обратной косой чертой ("\") или используйте альтернативный синтаксис связывания,
заключая URL в совпадающие угловые скобки, «<» и «>».

Письменный :

  [круглые скобки] (https: //en.wikipedia.org/wiki/ \ ()
  

Обработано :

Круглые скобки

Письменный :

  [Круглые скобки] ()
  

Обработано :

Круглые скобки

На Reddit ссылки обычно должны включать схему URI, например
«https: //», поэтому вместо [a] (www.example.com) напишите
[a] (https://www.example.com) .

Полный набор префиксов, принимаемых в URL-адресах: «http: //», «https: //»,
«ftp: //», «mailto:», «git: //», «steam: //», «irc: //», «news: //»,
«бормотать: //», «ssh: //», «ircs: //», «ts3server: //», «/», «#».

Заголовки

Раздел Заголовки имеют шесть уровней и записываются с ведущими хешами ( # ).

Письменный :

  # Домен

## Королевство

### Тип

#### Класс

##### Порядок

###### Семья
  

Обработано :

Королевство

Тип

Класс
Заказать
Семья

Заголовки уровня 1 и 2 также можно записать, подчеркнув заголовок.
текст с «=» и «-» соответственно.

Письменный :

  Домен
======

Королевство
-------
  

Обработано :

Королевство

Списки

Списки могут быть неупорядоченными, (маркированными) или упорядоченными, (пронумерованными).

Неупорядоченные списки состоят из строк, которым предшествует один из «-» или «*».

Письменный :

  - Агамемнон
- Носители возлияния
- Эвменид
  

Обработано :

  • Агамемнон
  • Носители возлияния
  • Евменид

Письменный :

,  * Агамемнон
* Носители возлияния
* Эвменид
  

Обработано :

  • Агамемнон
  • Носители возлияния
  • Евменид

Неупорядоченные списки состоят из пронумерованных строк, разделенных символом "."или") ".

Письменный :

  1. Агамемнон
2. Носители возлияния
3. Эвменид
  

Обработано :

  1. Агамемнон
  2. Носители возлияния
  3. Евменид

Письменный :

  1) Агамемнон
2) Носители возлияния
3) Эвменид
  

Обработано :

  1. Агамемнон
  2. Носители возлияния
  3. Евменид

🔮 Новое примечание Reddit : Использование ")" для определения упорядоченных списков работает только
в New Reddit.Для совместимости со старым Reddit используйте ".".

На Reddit упорядоченные списки должны начинаться с «1».

Помимо нумерации, неупорядоченные и упорядоченные списки
обычно анализируется одинаково, поэтому в остальных примерах будет использоваться неупорядоченный
списки для простоты.

Каждая отдельная запись в списке называется элементом списка . Предметы могут иметь
любое расстояние между ними. Добавление места может сделать список сложным
элементы более читабельны при редактировании.

Письменный :

  - Агамемнон

- Носители возлияния


- Эвменид
  

Обработано :

  • Агамемнон

  • Носители освобождения

  • Эвменид

Элементы списка могут содержать подсписки.

Письменный :

  - Гомер
  - Иллиада
  - Одиссея
- Эсхил
  - Агамемнон
  - Носители возлияния
  - Эвменид
  

Обработано :

  • Гомер
  • Эсхил
    • Агамемнон
    • Носители возлияния
    • Евменид

Обратите внимание, что подсписки неупорядоченных элементов списка должны предшествовать at.
минимум два пробела, в то время как подсписки элементов упорядоченного списка должны быть
перед ним стоит не менее трех пробелов.

Списки могут содержать собственные абзацы, цитаты и другие
типы контента.

Письменный :

  - Прежде всего: Lorem ipsum dolor sit amet, conctetur adipiscing
  элит.

  > Fusce hendrerit, nunc quis roncus tristique, neque augue ornare
  > enim, ut aliquam libero diam et ligula. Aliquam sagittis sem sed
  > Rutrum luctus. Nunc massa est, egestas eget massa id, lacinia
  > pretium dui. Нам эгет конскват эрос, эгет коммодо урна.- Но во-вторых: Phasellus vitae libero sit amet orci tempor lacinia
  sed в Tellus. Curabitur sit amet nibh elit. Quisque pulvinar odio
  sapien, et condimentum velit convallis et.

  ### Факты о Lipsum

  | Lorem | Ipsum | Dolor |
  | ----- | ----- | ----- |
  | 8 | 1 | 3 |
  | 3 | 7 | 8 |

  Aenean at dui в sapien sagittis sodales.
  

Обработано :

  • Прежде всего: Lorem ipsum dolor sit amet, conctetur adipiscing
    элит.

    Fusce hendrerit, nunc quis roncus tristique, neque augue ornare
    enim, ut aliquam libero diam et ligula.Aliquam sagittis sem sed
    rutrum luctus. Nunc massa est, egestas eget massa id, lacinia
    pretium dui. Нам эгет конскват эрос, эгет коммодо урна.

  • Но во-вторых: Phasellus vitae libero sit amet orci tempor lacinia
    sed в Tellus. Curabitur sit amet nibh elit. Quisque pulvinar odio
    sapien, et condimentum velit convallis et.

    Факты о Lipsum

    Lorem Ипсум Долор
    8 1 3
    3 7 8

    Aenean at dui in sapien sagittis sodales.

🔮 Новое примечание Reddit : в Markdown, в том числе в старом Reddit,
+ также можно использовать для определения неупорядоченных списков. На этот раз
Новый Reddit не может анализировать такие списки.

Цитаты

Цитаты позволяют выделить большие объемы текста,
обычно используется в ответных комментариях для цитирования других комментариев. Они
создаются путем начала строки с правой остроконечной скобки (> ).

Письменный :

 > Так трудно забыть боль, но еще труднее
помните сладость. У нас нет шрамов от счастья.
Мы так мало учимся у мира.
  

Обработано :

Так трудно забыть боль, но еще труднее
помните сладость. У нас нет шрамов от счастья.
Мы так мало учимся у мира.

Для простых цитат достаточно просто начать первую строку
абзац с > , как указано выше, и все это будет заключено в блок-кавычки.

Для более сложных цитат ставьте перед каждой строкой > .

Письменный :

 > - Прежде всего: Lorem ipsum dolor sit amet, conctetur adipiscing
> элит.
>
> - Но во-вторых: Phasellus vitae libero sit amet orci tempor lacinia
> sed at tellus. Curabitur sit amet nibh elit. Quisque pulvinar odio
> sapien, et condimentum velit convallis et.
>
>> Fusce hendrerit, nunc quis roncus tristique, neque augue ornare
>> enim, ut aliquam libero diam et ligula.Aliquam sagittis sem sed
>> rutrum luctus. Nunc massa est, egestas eget massa id, lacinia
>> pretium dui. Нам эгет конскват эрос, эгет коммодо урна.
>
> ### Факты о Lipsum
>
> | Lorem | Ipsum | Dolor |
> | ----- | ----- | ----- |
> | 8 | 1 | 3 |
> | 3 | 7 | 8 |
>
> Aenean at dui in sapien sagittis sodales.
  

Обработано :

  • Прежде всего: Lorem ipsum dolor sit amet, conctetur adipiscing
    элит.

  • Но во-вторых: Phasellus vitae libero sit amet orci tempor lacinia
    sed в Tellus. Curabitur sit amet nibh elit. Quisque pulvinar odio
    sapien, et condimentum velit convallis et.

Fusce hendrerit, nunc quis roncus tristique, neque augue ornare
enim, ut aliquam libero diam et ligula. Aliquam sagittis sem sed
rutrum luctus. Nunc massa est, egestas eget massa id, lacinia
pretium dui. Нам эгет конскват эрос, эгет коммодо урна.

Факты о Lipsum

Lorem Ипсум Долор
8 1 3
3 7 8

Aenean at dui in sapien sagittis sodales.

Столы

Таблицы состоят из строки заголовка и любого количества строк содержимого.
Столбцы разделены вертикальной чертой ( | ), а строка заголовка отделяется.
из строк содержимого тире ( - ).

Письменный :

  | Тикер | Инвестиции | Прибыль |
| -------- | ------------ | -------- |
| BTC | 100 долларов | $ -50 |
| ETH | $ 1000 | $ -500 |
| СОБАКА | $ 10000 | $ -5000 |
  

Обработано :

Тикер Инвестиции Прибыль
BTC $ 100 -50 $
ETH $ 1000 -500 $
СОБАКА $ 10000 -5000 $

Эта вторая строка таблицы, заполненная тире, является строкой маркера ,
и определяет выравнивание текста в столбце.Столбцы в маркерном ряду
начиная с : выровнены по левому краю; столбцы, заканчивающиеся на : , выровнены по правому краю;
столбцы, начинающиеся с и , заканчивающиеся на : , выровнены по центру; столбцы, содержащие все тире
выровнены по умолчанию (выровнены по левому краю).

Письменный :

  | Тикер | Инвестиции | Прибыль |
|: ------- | -----------: |: ------: |
| BTC | 100 долларов | $ -50 |
| ETH | $ 1000 | $ -500 |
| СОБАКА | $ 10000 | $ -5000 |
  

Обработано :

Тикер Инвестиции Прибыль
BTC $ 100 -50 $
ETH $ 1000 -500 $
СОБАКА $ 10000 -5000 $

К счастью, столбцы не нужно форматировать, чтобы они выстраивались друг с другом для работы -
они могут быть беспорядочными.

Письменный :

  | Тикер | Инвестиции | Прибыль |
|: - | -: |: -: |
| BTC | 100 долларов | $ -50 |
| ETH | $ 1000 | $ -500 |
| СОБАКА | $ 10000 | $ -5000 |
  

Обработано :

Тикер Инвестиции Прибыль
BTC $ 100 -50 $
ETH $ 1000 -500 $
СОБАКА $ 10000 -5000 $

⚜️ Совет : Таблицы можно писать без начала и конца строки
pipe ( | ), но результат может быть неожиданным, если
парсер должен угадать, является ли строка строкой таблицы или чем-то еще.Ведущие и конечные конвейеры указывают на то, что вы пишете таблицу.

Кодовые блоки и встроенный код

Есть несколько способов представления кода в Markdown, который всегда
отображается моноширинным шрифтом и отображается точно так, как написано
- Markdown не интерпретируется внутри области кода.

Сокращенные фрагменты кода, встроенный код , могут быть встроены в абзацы и
другой текст и разделяются открывающими и закрывающими обратными кавычками ( `
).

Письменный :

  Мы ошиблись: `goto` \
не считается вредным; \
`goto` хочет помочь. 

Обработано :

Мы ошиблись: goto
не считается вредным;
goto хочет помочь.

Более длинные кодовые блоки могут быть представлены несколькими способами. Первое
заключается в отступе всего блока кода на четыре пробела.

Письменный :

  hashOut.data = хеши + SSL_MD5_DIGEST_LEN;
    hashOut.length = SSL_SHA1_DIGEST_LEN;
    если ((err = SSLFreeBuffer (& hashCtx))! = 0)
        перейти к неудаче;
    если ((err = ReadyHash (& SSLHashSHA1, & hashCtx))! = 0)
        перейти к неудаче;
    если ((err = SSLHashSHA1.обновить (& hashCtx, & clientRandom))! = 0)
        перейти к неудаче;
    если ((err = SSLHashSHA1.update (& hashCtx, & serverRandom))! = 0)
        перейти к неудаче;
    если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
    если ((err = SSLHashSHA1.final (& hashCtx, & hashOut))! = 0)
        перейти к неудаче;
  

Обработано :

  hashOut.data = хеши + SSL_MD5_DIGEST_LEN;
hashOut.length = SSL_SHA1_DIGEST_LEN;
если ((err = SSLFreeBuffer (& hashCtx))! = 0)
    перейти к неудаче;
если ((err = ReadyHash (& SSLHashSHA1, & hashCtx))! = 0)
    перейти к неудаче;
если ((err = SSLHashSHA1.обновить (& hashCtx, & clientRandom))! = 0)
    перейти к неудаче;
если ((err = SSLHashSHA1.update (& hashCtx, & serverRandom))! = 0)
    перейти к неудаче;
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
    перейти к неудаче;
    перейти к неудаче;
если ((err = SSLHashSHA1.final (& hashCtx, & hashOut))! = 0)
    перейти к неудаче;
  

🔮 Новое примечание Reddit : Кодовые блоки с отступом - единственная форма кода
блок, который работает на Old Reddit. Используйте их для совместимости.

Ввод четырех пробелов перед каждой строкой в ​​блоке кода утомительно.
и подвержены ошибкам. Более простой способ - окружить весь блок
код код заборов . Кодовый забор - это строка, начинающаяся с трех
или более обратных кавычек ( `) или трех или более твиддлидудлов ( ~ ).

Письменный :

  ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''
  

Обработано :

  если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
  

Письменный :

  ~~~
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
~~~
  

Обработано :

  если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
  

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

⚜️ Совет : если встроенный код сам содержит обратную кавычку или
сам кодовый блок содержит ограждение кода, внутренние обратные кавычки и
заборы могут привести к преждевременному закрытию области кода. В этих случаях
ограждения можно отрегулировать в соответствии с кодом. Остальное
Раздел посвящен работе с угловыми случаями.

Рассмотрим следующий пример.

Письменный :

  ''

Этот код работал не так, как ожидалось:

`` ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''

Но он старался изо всех сил.

`` ''
  

Обработано :

  Этот код не работал должным образом:
  

, если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
перейти к неудаче;
перейти к неудаче;

  Но постаралась на славу.
  

Это ограждение кода внутри ограждения кода (т. Е. Блок кода Markdown
содержащий пример Markdown), и он не отображается должным образом
- код внутри внутреннего ограждения кода не отображается как код
вообще.Вместо этого код выглядит как обычный текст, окруженный двумя кодами.
блоки.

Эту проблему легко решить, поскольку синтаксис ограничения кода имеет два
различные разделители ( `) и ( ~ ), и это позволяет кодовым блокам
быть окруженным более чем тремя разделителями. Просто используйте больше обратных кавычек в
внешнюю границу кода или используйте другой разделитель.

Письменный :

  '' ''

Этот код работал не так, как ожидалось:

`` ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''

Но он старался изо всех сил.

`` ''
  

Обработано :

  Этот код не работал должным образом:

`` ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''

Но он старался изо всех сил.
  

Письменный :

  ~~~

Этот код работал не так, как ожидалось:

`` ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''

Но он старался изо всех сил.

~~~
  

Обработано :

  Этот код не работал должным образом:

`` ''
если ((err = SSLHashSHA1.update (& hashCtx, & signedParams))! = 0)
        перейти к неудаче;
        перейти к неудаче;
`` ''

Но он старался изо всех сил.
  

Есть аналогичный трюк и для встроенного кода: встроенный код может быть
окружены любым количеством обратных кавычек, а открывающая и закрывающая
должны совпадать.Итак, если нужно поставить одну обратную кавычку внутри встроенного кода
они могут просто окружить код двумя обратными кавычками , аля
`` вот эта штука - `- это обратная кавычка` .

Конечно, здесь есть еще один сложный случай: что, если ваш встроенный код
сам по себе должен начинаться или заканчиваться обратной кавычкой - например, вы хотите
проиллюстрировать, как написать встроенный код Markdown во встроенном коде? Просто
написание двух обратных кавычек для открытия встроенного кода и одного
обратная кавычка, чтобы начать встроенный код, не работает, потому что это выглядит как
встроенный код, разделенный тремя обратными кавычками : `` `` пример встроенного
код ``
.Если бы вы написали именно это, вы бы потеряли внутреннюю часть
обратные кавычки:

письменный Оформлено
`` пример встроенного кода`` пример встроенного кода

Markdown дает последний выход для таких ситуаций: любой
пространство вокруг встроенного кода удалено
, что позволяет писать
разделители встроенного кода, пробел, затем текстовая обратная кавычка:

письменный Оформлено
`` пример встроенного кода '' `пример встроенного кода`

По общему признанию, эта ситуация чаще всего возникает у людей, пишущих
Markdown о Markdown (как и я!).Надеюсь, вы никогда с этим не столкнетесь.

Наконец, что, если вы на самом деле хотите начальных или конечных пробелов в
ваш встроенный код? Что ж, вы очень сильно увязли в сорняках. Если
вы на самом деле попадаете в такую ​​ситуацию, вы, наверное, умны
достаточно, чтобы найти обходной путь.

Тематические паузы

Тематическая пауза , также известная как «горизонтальное правило», - это просто
горизонтальная линия, проведенная через страницу. Его можно использовать для создания
визуальное разделение контента.Тематический перерыв записывается как
строка, содержащая три или более звезд ( * ), тире ( - ) или
подчеркивания ( _ ).

Письменный :

  Вот задумчивая история о дедушке.

---

Вот фотография торпидного осла.
  

Обработано :

Вот задумчивая история о дедушке.


Вот фотография торпидного осла.

Письменный :

  Вот настоящий тусовщик.***

Здесь обман, разложение и - в конечном итоге - смерть.
  

Обработано :

Вот настоящий тусовщик.


Вот обман, разложение и - в конечном итоге - смерть.

Письменный :

  Вот ржавая дверь сарая.

___

Черный кофе.
  

Обработано :

Вот ржавая дверь сарая.


Черный кофе.

Экранирование синтаксиса Markdown

Экранирование - это способ указать синтаксическому анализатору не интерпретировать специальные
символов как Markdown, поставив перед ними обратную косую черту ( \ ).

Иногда обнаруживается, что синтаксический анализатор интерпретировал их текст в
так, что это было непреднамеренно. Это может произойти, например, если в
В середине абзаца дефис начинается с новой строки.

Письменный :

  Я почувствовал, как мои легкие раздуваются от натиска пейзажей
- воздух, горы, деревья, люди. Я думал,
«Вот что значит быть счастливым».
  

Обработано :

Я почувствовал, как мои легкие раздуваются от натиска пейзажей

  • воздух, горы, деревья, люди.Я думал,
    «Вот что значит быть счастливым».

В данном случае тире должно быть частью текста, а не началом
списка. Экранирование тире с помощью обратной косой черты устраняет проблему.

Письменный :

  Я почувствовал, как мои легкие раздуваются от натиска пейзажей
\ - воздух, горы, деревья, люди. Я думал,
«Вот что значит быть счастливым».
  

Обработано :

Я почувствовал, как мои легкие раздуваются от натиска пейзажей
- воздух, горы, деревья, люди.Я думал,
«Вот что значит быть счастливым».

Еще один частый случай, когда возникает необходимость сбежать
со скобками в ссылках.

Письменный :

  [скобки] (https://en.wikipedia.org/wiki/))
  

Обработано :

Круглые скобки)

Предполагается, что это ссылка на статью в Википедии о
круглые скобки ("https://en.wikipedia.org/wiki/)"), но вместо этого
ссылка на "https: // en.wikipedia.org/wiki/ ". Удаление скобок в
URL-адрес заставляет синтаксический анализатор не рассматривать его как закрывающую круглую скобку
синтаксис ссылки.

  [скобки] (https: //en.wikipedia.org/wiki/ \))
  

Обработано :

Круглая скобка

HTML-сущностей

Markdown поддерживает объекты HTML, такие как относительно распространенные
& nbsp; для «неразрывного пробела». Это может быть «аварийный выход» для
писать трудный для представления контент.Например, & nbsp; часто
используется для вставки «пустых» абзацев с вертикальными пробелами, где
Markdown иначе не допускает.

В других случаях сущности HTML используются для ввода символов, которые
трудно вводить, как те, что выше диапазона ASCII в Unicode, или
персонажи, не имеющие визуального представления.

Несколько полезных примеров:

Советы для роботов

Во время перехода мы увидели некоторую несовместимость
синтаксис, который использовали боты.Вот некоторые заметки из этого опыта, так как
а также некоторую общую информацию об автоматической публикации Markdown.

(Быстрая установка: в этом разделе может понадобиться помощь авторов ботов!)

  • В ссылках не ставьте пробелы между текстом ( [...] ) и URL-адресом.
    ( (http://example.com) ). Это работало в старом Reddit, но не
    Новый Reddit.

  • - экранировать все круглые скобки в URL-адресах ссылок (не автоссылки), например
    [текст] (http: // example.com / foo \ (бар) . Круглые скобки должны быть сбалансированы
    иначе они не будут проанализированы как ссылки, поэтому просто экранируйте все
    круглых скобок достаточно, чтобы все ссылки с круглыми скобками разбирались
    правильно.

  • В качестве альтернативы используйте синтаксис заостренных скобок для URL-адресов ссылок.
    ( [текст] () , которые принимают несбалансированные парные скобки. В
    в этом случае, хотя вы должны экранировать URL-адреса заостренными скобками, например, % 3C и
    % 3Э .

  • Если вы публикуете автосылки (необработанные URL без синтаксиса скобок),
    заключите их в острые скобки ( < > ) и
    URL-экранирование любых заостренных скобок в URL-адресе как % 3C и % 3E .Этот
    предотвратит двусмысленность при синтаксическом анализе, особенно в конце
    автоссылки. Обратите внимание, что даже в скобках автоссылки не могут содержать
    пробелы, поэтому URL-escape те как % 20 .

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

  • Новый синтаксический анализатор и старый синтаксический анализатор обрабатывают escape-последовательности HTML (а-ля & nbsp; )
    иначе - старый сохраняет их, как в тексте, так и в
    ссылки; новый отменяет их экранирование во время синтаксического анализа, чтобы клиенты
    (многие из которых не являются веб-браузерами) им не доступны.(...) На синтаксис нельзя положиться в старом Reddit, когда он объединен
    со ссылками.

Это несколько рекомендаций по написанию Markdown,
совместим со старым разбором уценки Reddit (если старый
парсер остается в использовании).

Некоторые из рекомендаций «простые», потому что они
эквиваленты, которые не уступают старому Reddit; некоторые из них "неудачливы"
потому что они предпочитают менее приятный синтаксис.

Предположительно старый синтаксический анализатор будет полностью прекращен в какой-то момент
(сегодня он используется только в старом веб-клиенте - мобильные клиенты используют
new), после чего эти рекомендации могут измениться.

С другой стороны, если вас не волнует форматирование на старом Reddit,
тогда действуйте и сделайте противоположное всем этим предложениям!

Простые рекомендации по совместимости

  • Используйте кавычки для заголовков ссылок, например [текст] (http://example.com "title")
    (в отличие от скобок для заголовков ссылок). Старый Reddit не
    поддерживайте круглые скобки здесь.

  • Начальные и конечные столбцы таблицы с вертикальной чертой ( | ). Они есть
    технически необязательно, но иногда случаются неожиданные синтаксические разборы, когда
    они не используются.И у старого Reddit, и у нового Reddit разные
    причуды.

  • Упорядоченные списки следует разделять точками вместо скобок, например ( 1. Первый ).
    Старый Reddit не поддерживает последнее.

  • Разделяйте неупорядоченные списки с помощью - или * , а не + . Новый Reddit сейчас
    не поддерживает последнее.

Неудачные рекомендации по совместимости

  • Используйте двойные пробелы вместо обратной косой черты для обозначения жестких разрывов строки.Старый Reddit поддерживает только двойные пробелы.

  • Используйте кодовые блоки с отступом вместо кодовых ограждений. Только старый Reddit
    поддерживает блоки кода с отступом.

  • Не используйте вложенные выделения, такие как _ это __ действительно__ важно_ .
    Да, как вы уже догадались: в Old Reddit это не работает.

  • Не используйте несколько уровней надстрочного индекса (также известные как «башни»). Это не
    работать в New Reddit (по крайней мере, пока).

  • Продолжайте использовать распространенные приемы для создания пробелов для поддержки надстрочных индексов, например
    надстрочный индекс каждого слова или соединение их с экзотическим пространством Unicode
    символы ( & nbsp; или & # x200b; .(...) - в Старом часто неверно разбирается
    Reddit.

Новый синтаксический анализатор уценки Reddit, snoomark, является разновидностью
Markdown (GFM) со вкусом GitHub, основанный на CommonMark, с
Таблица GFM и расширения автосвязки, а также модифицированный
зачеркивание расширения. Он также включает расширения для Reddit.
и специфические особенности совместимости Reddit, которые отличаются от CommonMark.

snoomark - это дочерний проект компании Comrak, который, в свою очередь,
повторная реализация cmark-gfm, реализация CommonMark на GitHub
с расширениями GitHub (GFM), которые, в свою очередь, находятся ниже cmark,
эталонная реализация CommonMark.Сам snoomark нет (пока)
открытый исходный код, но изменения в comrak регулярно объединяются в snoomark.

Поскольку все больше пользователей Reddit начали использовать создание и форматирование сообщений
инструментов на New Reddit, философия поддержки Markdown
колебалась - изначально планировалось что-то переехать
приближается к CommonMark и отказывается от всей совместимости со старым Reddit
«причуды»; но по мере развертывания эта позиция смягчилась, и
В новый синтаксический анализатор добавлено несколько причуд совместимости.

В настоящее время не ожидается, что многие дополнительные проблемы совместимости
будет добавлен в New Reddit: более вероятно, что Old Reddit будет
обновлен до нового парсера. В этом сценарии будут некоторые
количество (надеюсь, небольшое) старого контента, который больше не отображается
правильно из-за различий в парсинге.

Тем не менее, будущие направления будут продолжать оцениваться по мере развертывания
продолжается, и сообщается об ошибках.

Рендеринг

Markdown в New Reddit заметно отличается от старого
Reddit, и от большинства веб-сайтов, потребляющих Markdown, в том смысле, что это не
отображается непосредственно в HTML из Markdown, но через промежуточный,
Запатентованный Reddit формат документа под названием RTJSON («Rich Text JSON»).Этот формат разработан таким образом, чтобы его могли легко использовать и обрабатывать все
Клиенты Reddit, веб-сайты и мобильные устройства, тогда как в Old Reddit мобильные устройства
у клиентов были различные проблемы с отображением содержимого Markdown
последовательно. Подробная информация о формате RTJSON в настоящее время не опубликована.

Новый синтаксический анализатор был создан, потому что старый синтаксический анализатор было трудно поддерживать,
критичный для безопасности код C, и добавление в него новых функций было недопустимо
сложно. Новый парсер написан не на C, поэтому он больше
ремонтопригодный. Кроме того, редизайн потребовал новых функций и
будущая возможность добавлять новые функции.

Скорость разработки старого синтаксического анализатора была равна нулю.
парсер получает изменения по мере необходимости, и для большинства изменений не требуется
проверка безопасности.

Редизайн также дал возможность обновить древний Reddit.
markdown диалект до современного основанного на стандартах диалекта CommonMark, где
он может получить выгоду от непрерывной разработки и
стандарты работают, и примерно за 6 лет Markdown
эволюция (в то время как парсер Old Reddit не работал).Это решение
конечно, привело к многочисленным жалобам на то, что некоторые старые Reddit
синтаксисы не работают в New Reddit, но мы постепенно добавили
обратная совместимость для наиболее распространенных причуд.

New Reddit Markdown получает в наследство несколько новых тонкостей
из CommonMark, особенно разрывы строк с завершающим
обратная косая черта и блоки кода, разграниченные забором вместо отступов. В переходный период
конечно, они несовместимы со старым Reddit, но в итоге мы
можно было бы ожидать, что они будут "безопасными" в использовании, не беспокоясь о
совместимость - мобильные клиенты уже понимают новое
вывод парсера; это просто старый веб-клиент, которого нет (пока).

Вероятно, единственной серьезной альтернативой обновлению до CommonMark было бы
пришлось полностью переписать старый парсер в безопасном
язык, сохраняя все особенности Reddit. Предположительно, что
было нежелательно, как из-за чрезмерного количества
требуются усилия и потому, что это не подошло бы никому, кроме Reddit. Новый парсер,
с другой стороны, основан на активно поддерживаемом парсере CommonMark, что полезно
для всех, кто хочет разобрать CommonMark.В конечном итоге, ведя себя
больше похоже на CommonMark обеспечит более плавный опыт для тех, кто
используя CommonMark где-то еще, в основном технически подкованные,
поскольку подавляющее большинство пользователей New Reddit используют Fancy Pants
редактор. Теперь Reddit может участвовать в апстриме CommonMark.
сообщество (и уже повлияло на апстрим реализации и
Спецификация CommonMark). И снова комбинация поддерживаемой кодовой базы и
наличие стандарта, которому нужно соответствовать, означает, что Reddit может поддерживать свой парсер в рабочем состоянии
соответствовать стандартам по мере их развития.

Новый Markdown со вкусом Reddit унаследован от старых
Markdown и CommonMark / GFM, но также отличается от обоих. Этот
В разделе перечислены известные отличия новой Markdown со вкусом Reddit от
Старый Markdown со вкусом Reddit и CommonMark / GFM. Нет
всесторонний.

Отличия от старого Reddit часто унаследованы от CommonMark. Примечание
это для тех, кто хочет, чтобы их контент точно отображался для старых
Пользователи Reddit могут отказаться от использования этих функций. (См. Также «Рекомендации по совместимости с Markdown со вкусом Reddit».(...) ).

  • Зачеркнутый — синтаксис Reddit отличается от
    расширение GFM.

  • Redditlinks и userlinks — названия субреддитов и
    Пользователи Reddit с префиксом / r / , r / , / u / и u / :
    автоматически связывается.

  • Rich text media — Reddit поддерживает материалы, содержащие
    изображения, видео и гифки, и они закодированы в Markdown
    с настраиваемым синтаксисом встроенного изображения.Эта функция только
    поддерживается редактором Fancy Pants — синтаксис будет
    в настоящее время непомерно сложно писать вручную.

  • Абзацы, содержащие только один пробел нулевой ширины ( & # x200b; )
    являются пустыми абзацами (ZWS удаляется при рендеринге). Этот
    поддерживает редактор Fancy Pants.

  • Новые функции, унаследованные от CommonMark

    • Упорядоченные списки можно записывать в круглые скобки, где Старый Reddit
      поддерживаются только упорядоченные списки с точками: ( 1) vs. 1. ).

    • Жесткие разрывы строк могут быть записаны завершением строк с помощью \ , где
      Старый Reddit поддерживал это только тем, что заканчивал строки символом
      двойной пробел. Этот синтаксис более читабелен и менее удивителен, чем
      синтаксис с двойным пробелом.

    • Кодовые блоки могут быть записаны с помощью окружающих заборов вместо
      отступ ( ~ или ~~~ ). Возможно, этот популярный синтаксис
      более доступный для записи и чтения, чем синтаксис отступов.б) .

    • Несколько вложенных уровней надстрочного индекса отображаются как один
      уровень надстрочного индекса. Это может быть исправлено в будущем.

    • Новый Reddit некорректно анализирует верхний индекс без скобок, когда
      он предшествует слову, за которым следует закрывающая квадратная скобка,
      закрывающие круглые скобки или закрывающий ударение.

    • Неэкранированные круглые скобки в ссылках должны быть сбалансированы.

      • Предыдущие обсуждения:
        1
      • Билет: CREATE-1662
    • Подсписки требуют не менее двух пробелов отступа для неупорядоченных
      списки и три для упорядоченных списков, где требуется только старый Reddit
      одно пространство.

      • Предыдущие обсуждения:
        1
      • Билет: CREATE-1702
    • Первая ячейка заголовка таблицы не может быть пустой, если ей не предшествует
      ведущая вертикальная черта ( | ) — например, следующее не работает:

        (эта строка является взломом для открытия блока старого кода Reddit, не является частью примера)
      
       | B | C
      - | - | -
      г | д | е
        
      • Предыдущие обсуждения:
        1
      • Билет: CREATE-1701
    • Первая ячейка «маркера» таблицы не может быть дефисом, за которым следует пробел, если
      ему не предшествует вертикальная черта ( | ) — вместо этого он будет интерпретирован
      как начало списка.Например, не работает:

        (эта строка является взломом для открытия блока старого кода Reddit, не является частью примера)
      
      А | B
      - | -
      c | d
        
      • Предыдущие обсуждения:
        1
      • Билет: CREATE-1708
    • Спойлер-текст не обязательно должен быть «фланговым»; то есть разделители текста спойлера
      (>! и ! <) будут проанализированы как таковые независимо от их смежности с
      пробелы и знаки препинания.

      • Предыдущие обсуждения:
        1
      • Билет: CREATE-1534
    • Текст спойлера с цитатой не поддерживается, т. Е. С цитатой.
      написано с помощью >! вместо > .

    • Синтаксис ссылки не допускает пробелов между квадратными скобками ( [] ) и
      круглые скобки ( () ).

      • Предыдущие обсуждения:
        1
        2
      • Билет: CREATE-1438
    • Более двух тильд ( ~ ) в синтаксисе зачеркивания - e.г., а
      ~~~ b ~~~ c
      - обрабатываются по-другому: в Old Reddit экстра
      не потребляются, тогда как в New Reddit они есть. Кроме того, в New Reddit
      более двух тильд в начале строки можно интерпретировать как ограничители кода.

    • Строки, не содержащие ничего, кроме хэшей ( # ), обрабатываются по-другому:
      в Старом Reddit такие строки полностью потребляются и не отображаются;
      в New Reddit 6 или меньше хэшей отображаются как пустой заголовок, и
      более 6 отображаются как абзацы, содержащие хеши.

    • Некоторые угловые случаи, связанные с синтаксическим анализом ссылок, содержащих пробелы,
      особенно в отношении их взаимодействия с заголовками ссылок,
      другой.

    • Существуют и другие случаи различий в парсинге ссылок, некоторые из которых
      ошибки, а некоторые еще не определились.

      • Предыдущие обсуждения:
        1
      • Билет: CREATE-2206
    • Некоторые случаи, когда «слово-интерьер» жирный + курсив (он же сильный + emph)
      парсинг бывают разные. Например, Old Reddit проанализирует a ** _ b _ ** c как
      жирный + курсив, а CommonMark - нет.

    • Упорядоченные списки должны начинаться с «1». Другие стартовые номера не указаны.
      поддерживается. Старый Reddit анализировал другие стартовые номера, хотя
      всегда отображаемые списки начиная с 1.

    • Новый Reddit постоянно допускает вложенное выделение, например _a __b c b__ d_ ,
      в то время как старый Reddit во многих случаях неверно интерпретирует это.

    • Ссылки внутри ссылок анализируются по-разному - например,
      [[a] (http://example.com)] (http://example.com)

    • Новый текст ссылки Reddit не позволяет использовать спойлер внутри текста ссылки.

    • Неупорядоченные списки, разграниченные с помощью + , не работают в New Reddit. Этот
      нарушает спецификацию CommonMark.

    • Заголовки не могут содержать произвольные строки как курсив в New
      Reddit. Это нарушает спецификацию CommonMark.

    • Reddit применяет «белый список префиксов», в основном состоящий из URI
      схемы, ко всем ссылкам. В New Reddit эти префиксы могут быть заменены
      пробелами, тогда как в Old Reddit они не могли.Например.,
      [a] (http: // example.com) разрешено в New Reddit.

    • Точно так же New Reddit позволяет использовать только префикс URL-адреса в качестве действительного URL-адреса,
      в то время как старый Reddit требует, чтобы за префиксом следовали другие символы.

    • Содержание абзаца, за которым следует строка, которая выглядит как неупорядоченный
      список интерпретируется как закрытие абзаца и открытие
      неупорядоченный список, тогда как старый Reddit продолжил абзац.

    • Определения ссылочных ссылок могут появляться внутри цитат.

    • Встроенные интервалы кода, содержащие обратные кавычки, могут содержать любые
      количество последовательных обратных кавычек, тогда как в Old Reddit самые внешние
      обратные кавычки должны быть самой длинной строкой обратных кавычек в коде
      охватывать. `` код '' работает в обоих, `` код '' только
      работает в New Reddit.

    • Вложенные элементы блока (например, списки, цитаты и
      таблицы) можно открывать в той же строке, что и элементы списка.

    Отличия от CommonMark / GFM

    • Встроенные изображения не поддерживаются в режиме Markdown, только в режиме Fancy Pants.

    • Надстрочный синтаксис похож на старый Reddit, а не на comrak.

    • Упорядоченные списки должны начинаться с «1». Другие начальные номера не поддерживаются.

    • Ссылки могут содержать пробелы.

    • Строки, содержащие только хэши ( # ), обрабатываются по-другому.

    • Заголовки не требуют пробелов после хешей.

    • Заголовки с более чем 6 хешами анализируются иначе, как заголовки уровня 6.
      с хешами в тексте заголовка (например,g., ####### valhallaforolaf ). В CommonMark,
      такие конструкции не анализируются как заголовки.

    • Строка ячеек таблицы может начинаться с тире, за которым следует пробел,
      тогда как в CommonMark это откроет новый неупорядоченный список:

        (эта строка является взломом для открытия блока старого кода Reddit, не является частью примера)
      
      А | B | C
      - | --- | -
      - | е | ж
        

      (обратите внимание, что в настоящее время это не относится к строке «маркеров», следующей за
      строка заголовка, поэтому следующая строка не анализируется как таблица,

        (эта строка является взломом для открытия блока старого кода Reddit, не является частью примера)
      
      
      А | B | C
      - | - | -
      - | е | ж
        

      , тогда как в Старом Reddit.)

    • Для зачеркивания требуется две тильды ( ~~ ) на каждое старое.
      Reddit, а не один, согласно CommonMark.

    • Относительные ссылки не поддерживаются.

    • Встроенный HTML не поддерживается.

    • Неупорядоченные списки, разграниченные с помощью + , не работают в New Reddit.

    • Заголовки не могут содержать произвольные строки, такие как курсив в New
      Reddit.

    В разделе «Где использовать Markdown на Reddit» описывается
    специфические особенности Reddit, которые принимают Markdown в качестве входных данных.На данный момент,
    есть существенные различия в поддержке этих различных случаев
    между Old Reddit и New Reddit, старым парсером Markdown и новым
    Парсер Markdown.

    Вот грязные подробности.

    • selftext - В то время как New Reddit использует новую Markdown
      парсер / рендерер для рендеринга самотекста в большинстве мест, в том числе и в этом
      на собственной странице сообщения и в "лайтбоксе" (всплывающее окно, которое появляется при
      щелкнув сообщение на странице списка), он использует старый Markdown
      парсер в превью листинга, как в карточном просмотре по умолчанию, так и в
      "экспандо" (т.е., детали, которые открываются после щелчка по значку с
      две противоположные стрелки) в классическом виде.

    • wikis - В настоящее время отображается только через старый Reddit.

    • описание субреддита - Не интерпретируется как Markdown в
      Новый Reddit. Кроме того, ранее доступ к многострочному контенту ограничен.
      в одну строку.

    • текст отправки субреддита - вообще не отображается в New Reddit.

    • Новая боковая панель «текстовой области» Reddit - Использует старый модуль рендеринга Reddit.

    • правила субреддита - Всегда отображается с помощью старого Reddit
      рендерер.

    • Новый стиль текста "о" профилях пользователей - Всегда отображается
      с помощью средства визуализации Old Reddit.

    WYSIWYG-редактор Fancy Pants обычно поддерживает большинство функций Markdown, которые
    Reddit поддерживает, но имеет некоторые ограничения. Под
    капюшон, Fancy Pants хранит свои документы как Markdown, но его интерфейс
    не поддерживает все функции Reddit Markdown.

    • HTML-объекты нельзя вводить в Fancy Pants.

    • Fancy Pants имеет гораздо более низкие «пределы вложенности», чем необработанный Markdown.
      Ограничения вложенности влияют на глубину вложенности списков и цитат.
      разрешено создавать в документе.

    • Мультимедиа, такие как изображения и видео, могут быть встроены в контент через
      Редактор Fancy Pants, но без уценки.

    • Fancy Pants поддерживает только один уровень заголовка.

    • Fancy Pants не поддерживает размещение произвольных блочных элементов, например
      списки, цитаты и таблицы внутри списков или цитат.

    • Fancy Pants не поддерживает определения ссылок на ссылки -
      повторяющиеся ссылки необходимо вставлять повторно.

    • Fancy Pants не поддерживает жесткие разрывы строк.

    • Fancy Pants может создавать пустые строки, а Markdown - нет.
      Он делает это с помощью обратно совместимого хака, вставляя
      абзацы, содержащие один пробел нулевой ширины ( & # x200b; ), который
      позже анализатор Markdown преобразует его в пустой абзац.Технически,
      Авторы Markdown могут проделать тот же трюк.

    Несмотря на то, что на странице отправки есть возможность переключаться между Fancy
    Режимы Pants и Markdown, не переключайтесь с Markdown обратно на Fancy.
    Брюки. Хотя ожидается переход с Fancy Pants на Markdown
    чтобы быть без потерь, обратное неверно. Например, если ваш Markdown
    содержит объекты HTML, они будут преобразованы в простой Unicode во время
    преобразование, глубоко вложенные списки будут потеряны и т. д. Кроме того,
    при переключении назад на Markdown с Fancy Pants, точная Markdown
    введенные вами данные будут потеряны и заменены на Markdown, созданный Fancy
    Брюки.

    Большое спасибо / u / brson за создание этого документа и за его усердную работу.
    для улучшения нашего парсера. Основная организация этой страницы и ее содержание
    находились под влиянием / u / AnteChrono's Reddit Markdown Primer, / u / Reddit / Raerth
    Форматирование комментариев, существующая "комментирующая" вики-страница,
    и страницу справки CommonMark.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *