Skip to content

SMS-IT/wiki_VisualChanges

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

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

Данный плагин автоматизирует процесс принятия правок в Wiki.

Принятие правок осуществляется только после того, как задача с трекером "Спецификация" или ее родительская фича переходят в статус "Закрыта".

ВНИМАНИЕ! Правки могут быть приняты только по одной задаче и сразу по всем спецификациям, включающим блок "Изменение (Сhange)" с номером этой задачи. Т.е. нельзя принять правки по нескольким задачам одновременно. И нельзя принять правки по задаче не по всем спекам.

ВНИМАНИЕ! Правки не принимаются корректно, если страница является служебной. Например, если название страницы содержит текст "Участник:" или "Шаблон:" Т.е. на личных страницах пользователей, а также на страницах с шаблонами и на других служебных страницах не стоит делать блоки принятия правок.

Блоки изменений в спецификациях используются для:

  • отображения новых требований на разработку;
  • разделения функционала для разных Требований/Целей/Назначений;
  • выделения каких-то особенностей или функционала для других целей.

Например,

<change task="12345" tag="" forpage="">Небольшое изменение для всех Целей/Назначений</change> <change task="54321" tag="Tesla inc." forpage="">Небольшое изменение для одного конкретного Цели/Назначения</change>

Назначение основных полей блока изменений

Блок изменений содержит следующие поля):

  • номер Задачи в Redmine - указывается целочисленный номер задачи из Redmine, согласно которому необходимо разработать/модифицировать/удалить функционал. Если по данному функционалу заведено несколько задач в Redmine, то номера задач указываются через запятую и пробел. Номера можно указать как с "#", так и без, но рекомендуемым вариантом является без "#". Например: 123456, 654321.
  • поле "Тег" - указывается Цель/Назначение для которых будет осуществлен данный функционал, если Целей/Назначений несколько, то необходимо их указывать через запятую и пробел.
  • поле "Для страницы" - указывается значение "yes", если вся страница целиком создана в рамках какой-либо задачи (в отличие от случая, когда делаются точечные доработки в уже существующем функционале).

Работа с блоками изменений

####Алгоритм вставки в Wiki блока изменений:

  1. Открыть статью в Wiki на редактирование (кнопка [Править]).
  2. В раскрывающемся списке кнопки [Вставить] выбрать пункт "Изменение (блок)", либо нажать сочетание клавиш Ctrl+Alt+B.
  3. На хинте к блоку изменений нажать кнопку [Править]. Если хинт не отображается, то необходимо нажать по блоку изменений два раза левой кнопкой мыши.
  4. На открывшейся форме заполнить необходимые поля.
  5. Закрыть окошко (кнопкой [Готово])
  6. Указать необходимую информацию в блоке изменений (внутри оранжевого блока).
  7. Нажать на кнопку [Сохранить изменения].

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

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

Просмотр страниц

Блок изменений в режиме просмотра на странице в Wiki отображается в виде выделенного блока. Информация в блоках отображается следующим образом:

  • на первом месте отображается поле "Тег".
  • затем отображается "Номер задачи из Redmine".
    • если поле "Тег" не заполнено, то поле "Задача" отображается на первом месте;
  • затем в основном блоке отображается описание требуемых изменений.
    • описание может быть коротким (однострочным), в этом случае оно показывается внутри основного абзаца текста.
    • если описание длинное, содержит несколько абзацев, списки или таблицы, то блок изменений отображается на несколько строк, и разрывает основной текст статьи.

Алгоритм принятие правок

Принятие правок по задаче осуществляется по следующему алгоритму:

  1. Определить задачу, по которой необходимо принять правки в Wiki. В задаче в Redmine должен быть блок "Непринятые правки", включающий ссылки на измененные спеки по этой задаче.
  2. Нажать на кнопку [Принять].
  3. Посмотреть на открывшуюся страницу с названием "Принятие правок по задаче".
  4. Просмотреть по всем спецификациям и всем блокам изменений по данной задаче внешний вид части спеки до принятия правки и какая она будет после принятия правки.
  5. Отметить флагами "Не забыть подправить вручную" те блоки, которые необходимо будет подправить вручную из-за некорректного авто-форматирования (например, съедет нумерация, неровно сделаются списки, слепится текст и т.д).
  6. Нажать на кнопку [Принять], чтобы запустить процесс принятия. Иначе, для отмены действия, просто закрыть вкладку.
  7. Посмотреть результат принятия.
  8. Если все выполнилось успешно, то просмотреть список измененных спек.
  9. Если спека отмечена признаком "Подправь вручную", то нужно открыть ее по ссылке и скорректировать нужную часть текста вручную.
  10. Осуществить поиск страниц с участием данной задачи. Для этого на странице принятия правок нажать на гиперссылку "Найти страницы с участием задачи" (Возможно задача была прописана в комментарии).

Поиск задач по проекту для принятия правок

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

  1. Перейти в браузере к AcceptChanges/getPagesWithTasks.php
  2. Ввести название проекта MediaWiki.
  3. Отметить флагом "Показать только закрытые задачи".
  4. Выполнить поиск.
  5. Отобразятся все задачи, у которых статус "Закрыта". Если есть родительская фича, то ее статус тоже равен "Закрыта".

Просмотр изменения страницы

  1. Зайти на страницу спецификации MediaWiki.
  2. Нажать кнопку [Ещё].
  3. В раскрывающемся списке выбрать пункт "Показать историю изменений страницы".
  4. В соседней вкладке отобразится история принятия правок по задачам.

Отображение спецификаций с новыми требованиями в задачах Redmine

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

В соответствующей задаче в Redmine отобразится список страниц вики с помеченными изменениями для данной задачи

##Изменение в Parser MediaWiki По умолчанию контент внутри незнакомого тега обрабатывается как текст, без его парсинга на расширения wiki (Table, Figma, References, etc.), поэтому необходимо изменить исходные файлы прописав правила обработки тегов расширений, как тегов внутри которых могут и будут присутствовать другие расширения.

При обновлении MediaWiki или Parsoid на другую версию необходимо изменить некоторые исходные файлы MediaWiki и Parsoid для корректной обработки и поддержки расширения VisualChanges и аналогов

###Изменения MediaWiki для белого списка Если расширение использует собственный тег, например ... , и при этом использует Hook для визуализации, то необходимо изменить файл /var/www/wiki/includes/parser/Parser.php, переписав его метод getTags() на

	public $mExcludeExtansionTags = [' 'change'];
	/**
	 * Accessor
	 *
	 * @return array
	 */
	public function getTags() {
		$return = [];
		$res = array_merge(
			array_keys( $this->mTransparentTagHooks ),
			array_keys( $this->mTagHooks ),
			array_keys( $this->mFunctionTagHooks ));
		foreach($res as $value) {
			if(!in_array($value, $this->mExcludeExtansionTags)){
				array_push($return, $value);
			}
		}
		return $return;
	}

где в переменной массива $mExcludeExtansionTags дописать необходимые теги.

Делается это для того чтобы парсоид не получал данные через API от Wiki о теге как о extension, а обрабатывал его как тег, внутри которого присутствуют другие расширения, сама wiki уже обработает этот тег в файлах расширения js, которые описаны в папке extensions.

Изменения в Parsoid для белого списка

Что бы сам парсоид корректно обрабатывал контент внутри тега, а не оставлял его грязным wiki текстом, необходимо в файле /usr/lib/parsoid/src/lib/config/WikitextConstants.js дополнить необходимым тегом, например для VisualChanges - , разделы:

  • Sanitizer в множестве TagWhiteList
** @namespace */
	Sanitizer: {
		/**
		 * List of whitelisted tags that can be used as raw HTML in wikitext.
		 * All other html/html-like tags will be spit out as text.
		 * @type {Set}
		 */
		TagWhiteList: new Set([
			// In case you were wondering, explicit <a .. > HTML is NOT allowed in wikitext.
			// That is why the <a> tag is missing from the white-list.
			...,
			' 'CHANGE'
		]),
	},
  • HTMLTagsWithWTEquivalents
/**
* These HTML tags have native wikitext representations.
* All other HTML tags would have to be emitted as HTML tags in wikitext.
* @type {Set}
*/
HTMLTagsWithWTEquivalents: new Set([
...,
 "CHANGE"
]),
  • HTML в множестве HTML5Tags и (HTML4BlockTags или HTML4InlineTags) в зависимости от типа в строке или блока:
/** @namespace */
	HTML: {
		/**
		 * The list of HTML5 tags, mainly used for the identification of *non*-html tags.
		 * Non-html tags terminate otherwise tag-eating rules in the tokenizer
		 * to support potential extension tags.
		 * @type {Set}
		 */
		HTML5Tags: new Set([
			...,
			" "CHANGE"
		]),

		/**
		 * From {@link https://developer.mozilla.org/en-US/docs/HTML/Block-level_elements}.
		 * However, you probably want to use `Util.isBlockTag()`, where some
		 * exceptions are being made.
		 * @type {Set}
		 */
		HTML4BlockTags: new Set([
			...,
			''CHANGE'
		]),

		/**
		 * From {@link https://developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements}
		 * plus some non-strict elements not on that list (FONT, S, STRIKE, U) since
		 * these are tags that are actually used on wikipedias.
		 *
		 * All HTML5 formatting elements except NOBR are on this list.
		 * @type {Set}
		 */
		HTML4InlineTags: new Set([
			...
		]),
		...
	},

Установка

  • в LocalSettings.php добавить:
wfLoadExtension( 'VisualChanges' );
  • добавить changes_tag_filter.svg skins/common/images
  • добавить стили из changes.css в customizations/custom.css
  • добавить @import "/customizations/custom.css"; на странице /index.php/MediaWiki:Common.css
  • используйте Apache или другой веб-сервер, чтобы можно было сделать запрос из MediaWiki к скриптам в директории AcceptChanges
  • укажите данные для доступа к базам данных Redmine, MediaWiki
    • RedmineSqlProvider.class.php

    var $dbserver = "";
    var $dbuser = "";
    var $dbpassword = "";
    var $dbencoding = "utf8";
    var $database = "";

  • WikiSqlProvider.class.php

    var $dbserver = "localhost";
    var $dbuser = "";
    var $dbpassword = "";
    var $dbencoding = "utf8";
    var $database = "";
$wiki_apiLogin = "";
$wiki_apiPassword = "";
  • укажите адреса MediaWiki, Redmine и к скрипту AcceptChanges/index.php в файле shared.php
$wiki_url = '';
$accept_changes_url = "";  // например, 
$redmine_url = '';
  • добавьте плагин View_Customize для Redmine, с помощью него добавьте следующий скрипт, который ведет к AcceptChanges/getPagesByTask.php. Укажите в url ссылку на AcceptChanges/getPagesByTask.php
var task = /#(\d+)/.exec($('#content > h2').text())[1];

$.ajax({
    type: 'GET',
    url: 'https://mediawiki.ru/AcceptChanges/getPagesByTask.php',
    data: { task: task },
    dataType: 'html',
    success: function( data ) {
        if (data) {
            // Добавляем блок со спецификациями
            $('<div id="wiki_specifications"></div>').insertBefore(".attributes");
            $('#wiki_specifications').append(data);
            $('#wiki_specifications').css('margin-top', '10px');
            $('#wiki_specifications').css('padding-bottom', '10px');
            $('#wiki_specifications').css('border-bottom', '1px solid #E0E0E0');
            $('#wiki_specifications > p').css('margin', '5px 0px 5px 0px');
            $('#wiki_specifications > ul').css('margin', '0px');
        }
    }
});
  • укажите название cookie, которая хранит id пользователя MediaWiki, в shared.php:
// Например, wiki_workUserID
// Название составляется из $wgDBuser + _workUserID
// $wgDBuser указывается в LocalSettings.php
$cookie_name = "";

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published