Last active
June 21, 2018 10:35
-
-
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
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'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); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Online version