Skip to content

Instantly share code, notes, and snippets.

@KhodeN
Last active June 21, 2018 10:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KhodeN/cdc8ef6585b517bb202a3534767ae5de to your computer and use it in GitHub Desktop.
Save KhodeN/cdc8ef6585b517bb202a3534767ae5de to your computer and use it in GitHub Desktop.
Converter markdown multilevel list to jasmine/mocha tests structure http://jsbin.com/qahurad
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<table>
<tr>
<td>
<textarea id="in" cols=50 rows=30>- Вход/регистрация
- [COMPLETE] Авторизация
- Регистрация
- Восстановление пароля #отложено
- Подтверждение email #отложено
- Выход
- Общие действия
- Выбор элементов списков
- Прогрузка элементов при выборе всех
- Работа фильтров (в т.ч. поиска) и сортировки
- Работа с тулбаром
- На каждой странице проверять
- Заголовок окна
- Хлебную крошку
- Тип компонента-страницы (тег)
- URL
- Раздел групп
- Переключение режима видимости
- Создание групп
- Удаление групп
- Переименование групп
- Проверка на страницах проксей, аккаунтов, задач
- Удаление элемента из группы
- Дашборд
- Вызов помощи (индексной страницы)
- Меню скачивания агента
- Переключение режима бокового меню
- Версия и чейнжлог
- Покупка лицензии
- Настройки
- Вызов помощи по настройкам
- Установка часового пояса
- Установка режима антибана
- Настройки антикапчи (в т.ч. проверка баланса)
- Редактирование списка UA
- Просмотр списка лицензий
- Привязывание Dropbox #отложено
- Прокси
- Вызов помощи по прокси (список/добавление)
- Добавление прокси вручную
- Импорт проксей
- В том числе с ошибками
- Список проксей (группы, фильтры, сортировки)
- Действия
- Запуск проверки
- Остановка/возобновление активности
- Удаление прокси
- Экспорт в CSV
- Страница прокси
- Редактирование
- Дополнительная информация
- Список аккаунтов
- Журнал
- Аккаунты
- Вызов помощи по аккаунтам (список/добавление)
- Добавление аккаунтов вручную
- Импорт аккаунтов
- В том числе в формате spotlight
- В том числе с ошибками
- Список аккаунтов (группы, фильтры, сортировки)
- Действия
- Авторизация
- Статистика
- Удаление
- Открытие стены ВК
- Остановка/возобновление активности
- Распределение UA
- Распределение прокси автоматически
- Распределение прокси вручную
- Экспорт в CSV
- Редактирование
- Открытие стены
- Открытие статистики
- Смена пароля аккаунта
- Смена UA
- Смена прокси
- Просмотр журнала событий
- Списки
- Вызов справки по работе со списками
- Список списков
- Импорт списка
- Импорт списков из Spotlight
- Задачи
- Вызов помощи по задачам (проверить также разную помощь в разных типах задач)
- Создание и редактирование
- Параметры задачи
- Масслайк
- Пригласить в друзья
- Пригласить в сообщество
- Пригласить из группы на мероприятие
- Заполнение аккаунта
- Очистка аккаунта
- Поставить лайк
- Рассылка сообщений
- Обслуживание аккаунта
- Список аккаунтов на задаче
- Расписание
- Журнал
- Список задач (группы, фильтры, сортировки)
- Действия
- Запуск
- Остановка
- Статистика
- Удаление
- Дублирование
- Журнал
- Вызов помощи по журналу
- Статистика команд
- Вызов помощи по статистике команд
- Статистика по капчам
- Вызов помощи по статистики капчей
- Мультичат #отложено
- Вызов помощи
- Аккаунты
- Добавление аккаунта в чат
- Удаление аккаунта в чат
- Поиск аккаунтов в чате
- Диалоги
- Фильтрация диалогов
- Начать новый диалог
- Открыть диалог
- Написать сообщение
- Получить сообщение
- В том числе на другой странице (уведомление)
</textarea>
</td>
<td>
<button id="convert">></button>
</td>
<td>
<textarea id="out" cols=50 rows=30></textarea>
</td>
</tr>
</table>
<script id="jsbin-javascript">
'use strict';
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
function parseTree(list) {
var root = {
title: 'Корень',
parent: null,
children: [],
level: -1
};
list.split('\n').map(function (r) {
return r.match(/^(\s*)- (.+?)$/);
}).filter(function (r) {
return r;
}).reduce(function (acc, row) {
var _row = _slicedToArray(row, 3);
var _ = _row[0];
var indent = _row[1];
var title = _row[2];
var level = indent.length / 2;
var item = { title: title, level: level, children: [] };
// Next is child
if (item.level > acc.level) {
item.parent = acc;
}
// Next is uncle
if (item.level < acc.level) {
var diff = acc.level - level;
switch (diff) {
case 1:
item.parent = acc.parent.parent;
break;
case 2:
item.parent = acc.parent.parent.parent;
break;
case 3:
item.parent = acc.parent.parent.parent.parent;
break;
}
}
// Next is sibling
if (level === acc.level) {
item.parent = acc.parent;
}
item.parent.children.push(item);
return item;
}, root);
return root;
}
function toCode(branch) {
var result = '';
var indent = '';
for (var i = -1; i < branch.level; i += 1) {
indent += ' ';
}
if (branch.children.length > 0) {
var content = branch.children.map(function (c) {
return toCode(c);
});
result += indent + 'xdescribe(\'' + branch.title + '\', () => {\n' + content.join('\n') + '\n' + indent + '});\n';
} else {
result += indent + 'xit(\'' + branch.title + '\', () => {\n' + indent + ' // TODO\n' + indent + '});\n';
}
return result;
};
function convert(list) {
var tree = parseTree(list);
return toCode(tree);
}
console.clear();
var gbi = function gbi(id) {
return document.querySelector('#' + id);
};
gbi('convert').addEventListener('click', function () {
var list = gbi('in').value;
gbi('out').value = convert(list);
});
</script>
<script id="jsbin-source-javascript" type="text/javascript">function parseTree(list) {
const root = {
title: 'Корень',
parent: null,
children: [],
level: -1
};
list.split('\n')
.map(r => r.match(/^(\s*)- (.+?)$/))
.filter(r => r)
.reduce((acc, row) => {
const [_, indent, title] = row;
const level = indent.length/2;
const item = {title,level,children:[]};
// Next is child
if (item.level > acc.level) {
item.parent = acc;
}
// Next is uncle
if (item.level < acc.level) {
const diff = acc.level - level;
switch(diff){
case 1:
item.parent = acc.parent.parent;
break;
case 2:
item.parent = acc.parent.parent.parent;
break;
case 3:
item.parent = acc.parent.parent.parent.parent;
break;
}
}
// Next is sibling
if (level === acc.level){
item.parent = acc.parent;
}
item.parent.children.push(item);
return item;
}, root);
return root;
}
function toCode(branch) {
let result = '';
let indent = '';
for (let i = -1; i < branch.level; i+=1){
indent+=' ';
}
if (branch.children.length > 0) {
const content = branch.children.map(c => toCode(c))
result += `${indent}xdescribe('${branch.title}', () => {
${content.join('\n')}
${indent}});\n`;
} else {
result += `${indent}xit('${branch.title}', () => {
${indent} // TODO
${indent}});\n`;
}
return result;
};
function convert(list) {
const tree = parseTree(list);
return toCode(tree);
}
console.clear();
const gbi = id => document.querySelector(`#${id}`);
gbi('convert').addEventListener('click', () =>{
const list = gbi('in').value;
gbi('out').value = convert(list);
});
</script></body>
</html>
'use strict';
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
function parseTree(list) {
var root = {
title: 'Корень',
parent: null,
children: [],
level: -1
};
list.split('\n').map(function (r) {
return r.match(/^(\s*)- (.+?)$/);
}).filter(function (r) {
return r;
}).reduce(function (acc, row) {
var _row = _slicedToArray(row, 3);
var _ = _row[0];
var indent = _row[1];
var title = _row[2];
var level = indent.length / 2;
var item = { title: title, level: level, children: [] };
// Next is child
if (item.level > acc.level) {
item.parent = acc;
}
// Next is uncle
if (item.level < acc.level) {
var diff = acc.level - level;
switch (diff) {
case 1:
item.parent = acc.parent.parent;
break;
case 2:
item.parent = acc.parent.parent.parent;
break;
case 3:
item.parent = acc.parent.parent.parent.parent;
break;
}
}
// Next is sibling
if (level === acc.level) {
item.parent = acc.parent;
}
item.parent.children.push(item);
return item;
}, root);
return root;
}
function toCode(branch) {
var result = '';
var indent = '';
for (var i = -1; i < branch.level; i += 1) {
indent += ' ';
}
if (branch.children.length > 0) {
var content = branch.children.map(function (c) {
return toCode(c);
});
result += indent + 'xdescribe(\'' + branch.title + '\', () => {\n' + content.join('\n') + '\n' + indent + '});\n';
} else {
result += indent + 'xit(\'' + branch.title + '\', () => {\n' + indent + ' // TODO\n' + indent + '});\n';
}
return result;
};
function convert(list) {
var tree = parseTree(list);
return toCode(tree);
}
console.clear();
var gbi = function gbi(id) {
return document.querySelector('#' + id);
};
gbi('convert').addEventListener('click', function () {
var list = gbi('in').value;
gbi('out').value = convert(list);
});
@KhodeN
Copy link
Author

KhodeN commented Jun 21, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment