Skip to content

Instantly share code, notes, and snippets.

@SergProduction
Last active March 27, 2017 02:00
Show Gist options
  • Save SergProduction/10adee1e14bd47f6146ed3328ef4b7c8 to your computer and use it in GitHub Desktop.
Save SergProduction/10adee1e14bd47f6146ed3328ef4b7c8 to your computer and use it in GitHub Desktop.
let tableSource = document.getElementById('tableSource')
let addEqualIf = document.getElementById('addEqualIf')
let addEqualThen = document.getElementById('addEqualThen')
let clearEqual = document.getElementById('clearEqual')
let saveEqual = document.getElementById('saveEqual')
let divEqual = document.getElementById('divEqual')
const base1 = [
['id','name','lvl'],
['1584 sdf','serg','80'],
['1756 gh','alex','15'],
['1756 we','ivan','18'],
];
const base2 = [
['id','prof','work'],
['1584 df','develop','y'],
['1756 ty','manager','y'],
['1756 yu','desinger','n'],
]
const folder = ['1','2','3','4'];
const fileName = ['1.jpg','2.jpg','3.jpg','4.jpg'];
const base = ['base1','base2','folder','file_name']
createTable(base1, tableSource)
createTable(base2, tableSource)
//var afi= addFromsIf(divEqual, base)
addEqualIf.addEventListener('click', ()=>{
addFromsIf(divEqual, base).add()
//afi().add()
})
//var aft = addFromsThen(divEqual, base)
addEqualThen.addEventListener('click', ()=>{
addFromsThen(divEqual, base).add()
//aft().add()
})
clearEqual.addEventListener('click', ()=>{
divEqual.innerHTML = '';
})
saveEqual.addEventListener('click', ()=>{
})
function createCode(){
let result = []
for( let p of divEqual.children){
for( let form of p.children){
if( form.name == 'if' ){
let base1 = form.elements.base1.value
let val1 = form.elements.val1.value
let val1split = form.elements.val1split.value
let equal = form.elements.equal.value
let base2 = form.elements.base2.value
let val2 = form.elements.val2.value
let val2split = form.elements.val2split.value
let boolean = form.elements.boolean.value
result.push({type:'if', data: createUserIf(base1, val1, val1split, equal, base2, val2, val2split, boolean)})
}
if( form.name == 'then' ){
let what = form.elements.what.value //пременная, база
let val1 = form.elements.val1.value //имя переменной
let base = form.elements.base.value //откуда
let val2 = form.elements.val2.value //какой столбец
let val2split = form.elements.val2split.value //разделитель
let boolean = form.elements.boolean.value //логическое И, ИЛИ
result.push({type:'if', data:createUserThen(what, val1, base, val2, val2split, boolean) })
}
}
}
return result
}
//if(form.elements.val1.value == 'variable')
function createUserIf(base1, val1, val1split, equal, base2, val2, val2split, boolean){
if( base1 == 'folder'){
let result = 'return ';
let split1 = val1split.split(';')
let split2 = val2split.split(';')
if(val1split) result += `folderOrFile.split('${split1[0]}')[ ${split1[1]} ]`
else result += `folderOrFile`
result += ` ${equal} `;
if(val2split) result += `${base2}[${val2}].split('${split2[0]}')[ ${split2[1]} ]`
else result += `${base2}[${val2}]`
result += ` ${boolean} `;
return {type:'folder', base:base2, function:new Function(`folderOrFile, ${base2}`, result)}
}
else if(base1 == 'file_name' ){
let result = 'return ';
let split1 = val1split.split(';')
let split2 = val2split.split(';')
if(val1split) result += `folderOrFile.split('${split1[0]}')[ ${split1[1]} ]`
else result += `folderOrFile`
result += ` ${equal} `;
if(val2split) result += `${base2}[${val2}].split('${split2[0]}')[ ${split2[1]} ]`
else result += `${base2}[${val2}]`
result += ` ${boolean} `;
return {type:'file', base:base2, function:new Function(`folderOrFile, ${base2}`, result)}
}
else{
let result = 'return ';
let split1 = val1split.split(';')
let split2 = val2split.split(';')
if(val1split) result += `${base1}[${val1}].split('${split1[0]}')[ ${split1[1]} ]`
else result += `${base1}[${val1}]`
result += ` ${equal} `;
if(val2split) result += `${base2}[${val2}].split('${split2[0]}')[ ${split2[1]} ]`
else result += `${base2}[${val2}]`
result += ` ${boolean} `;
return {type:'base', function: new Function('base1,base2', result )}
}
}
function createUserThen(what, val1, base, val2, val2split, boolean){
if(what == 'variable'){
let sp = val2split.split(';')
if(val2split) variable[val1] = base[val2].split( sp[0] )[ sp[1] ]
else variable[val1] = base[val2]
}
if(what == 'table'){
readXlsx(base, val2, data => {
})
}
if(what == 'renameFolder'){
let sp = val2split.split(';')
if( val2split ) newFolder = val1 || val2.split( sp[0] )[ sp[1] ]
else newFolder = val1 || val2
}
if(what == 'renameFile'){
let sp = val2split.split(';')
if( val2split ) newNameFile = val1 || val2.split( sp[0] )[ sp[1] ]
else newNameFile = val1 || val2
}
}
function start(){}
function readXlsx(pathToXlsx, column){
let workbook = new Excel.Workbook();
workbook.xlsx.readFile( pathToXlsx )
.then( e => {
let worksheet = workbook.getWorksheet(1);
let ids = [];
let col_ids = worksheet.getColumn(column);
col_ids.eachCell((cell, rowNum) => {
let text = cell.value.text
ids.push( text ? text : '' )
})
ids = _uniq(ids)
ids = ids.filter( el => el.length == ID_LENGTH && el != '[object object]')
})
.catch(error => {
})
}
/*
function cv(){
let userEqual = createCode()
if(userEqual.type == 'folder'){
let currentBaseIndex = base.indexOf(userEqual.base)
return userEqual.function(folder[0], base[currentBaseIndex])
}
else if(userEqual.type == 'file'){
let currentFileListIndex = fileList.indexOf(userEqual.base)
return userEqual.function(file[0], base[currentFileListIndex])
}
else{
return userEqual.function(base1[1], base2[1])
}
}
*/
function* generatorFolder(arrFolder){
for(let i=0; i<arrFolder.length; i++)
yield arrFolder[i]
}
function* generatorFileInFilder(){
let iterFolder = generatorFolder(folder)
for( let dir of iterFolder){
//let fileList = fs.readdirSync(path.join(__dirname, dir))
//for(let i=0; i<fileList.length; i++){
// yield {dir:dir, file:fileList[i]}
//}
}
}
let iterFile = generatorFileInFilder()
function* generatorEequalBase(base1, base2){
for(let i=0; i<base1.length; i++){
for(let z=0; z<base2.length; z++){
if( userIf(base1[i], base2[z]) ){
yield userThen()
}
}
}
}
function addFromsIf(where, base){
let count = 0;
let description = document.createElement('p')
description.textContent = 'если';
(where || document.body).appendChild(description)
let watchAdd = function(e){
let forms = description || document.body
forms = forms.getElementsByTagName('form')
let lastForm = forms[forms.length - 1]
if( lastForm.elements.val1.value &&
lastForm.elements.val2.value &&
e.target.value ){
add()
}
};
let watchRemove = function(e){
let forms = description || document.body
forms = forms.getElementsByTagName('form')
let del = false;
let arrDel = []
for(let form of forms){
if(del)
arrDel.push(form)
if( !e.target.value ){
if( form.elements.boolean === e.target ){
del = true
form.elements.boolean.addEventListener('change', watchAdd)
}
}
}
arrDel.map(el => {
el.parentElement.removeChild(el)
return null
})
};
function addOrDelete(){
let forms = description || document.body
forms = forms.getElementsByTagName('form')
for(let form of forms){
form.elements.boolean.removeEventListener('change', watchAdd)
form.elements.boolean.addEventListener('change', watchRemove)
}
let lastForm = forms[forms.length - 1]
lastForm.elements.boolean.addEventListener('change', watchAdd)
}
function optionBase(name, ...ne){
let optStr = `<select name="base${name}">`;
base.forEach( el => {
if( ne.includes(el) ) return false
optStr += `<option value="${el}" > ${el} </option>\n`
})
optStr += '</select>'
return optStr
}
function add(name, where){
count+=1;
let newName = name || count
let form = document.createElement('form')
form.name = 'if'
let newForms = `
${optionBase(1)}
<input type="text" name="val1" placeholder="имя/столбец">
<input type="text" name="val1split" placeholder="разделитель">
<select name="equal">
<option value=">" > > </option>
<option value="<" > < </option>
<option value="=="> = </option>
</select>
${optionBase(2, 'folder', 'file_name')}
<input type="text" name="val2" placeholder="имя/столбец">
<input type="text" name="val2split" placeholder="разделитель">
<select name="boolean">
<option value="" ></option>
<option value="&&" > && </option>
<option value="||" > || </option>
</select>`;
form.innerHTML = newForms
where = description || where || document.body
where.appendChild(form)
addOrDelete()
}
function remove(where){
where = description || where || document.body
}
return {add}
}
function addFromsThen(where, base){
let count = '_';
let countNum = 0;
let description = document.createElement('p')
description.textContent = 'тогда';
(where || document.body).appendChild(description)
let watchAdd = function(e){
let forms = description.getElementsByTagName('form')
let lastForm = forms[forms.length - 1]
if( lastForm.elements.val2.value &&
e.target.value ){
add()
}
};
let watchRemove = function(e){
let forms = description.getElementsByTagName('form')
let del = false;
let arrDel = []
for(let form of forms){
if(del)
arrDel.push(form)
if( !e.target.value ){
if( form.elements.boolean === e.target ){
del = true
form.elements.boolean.addEventListener('change', watchAdd)
}
}
}
arrDel.map(el => {
el.parentElement.removeChild(el)
return null
})
};
function addOrDelete(){
let forms = description.getElementsByTagName('form')
for(let form of forms){
form.elements.boolean.removeEventListener('change', watchAdd)
form.elements.boolean.addEventListener('change', watchRemove)
}
let lastForm = forms[forms.length - 1]
lastForm.elements.boolean.addEventListener('change', watchAdd)
}
function optionBase(name, ...ne){
let optStr = `<select name="base${name}">`;
base.forEach( el => {
optStr += `<option value="${el}" > ${el} </option>\n`
})
optStr += '</select>'
return optStr
}
function add(name, where){
countNum+=1;
let newName = name || count + countNum
let form = document.createElement('form')
form.name = 'then'
let newForms = `
<select name="what">
<option value="variable" > сохранить в переменную </option>
<option value="table" > сохранить из таблицы xlsx </option>
<option value="renameFolder" > положить в папку </option>
<option value="renameFile"> переименовать файл </option>
</select>
<input type="text" name="val1" placeholder="имя">
<span>значение из</span>
${optionBase(1)}
<input type="text" name="val2" placeholder="имя/столбец">
<input type="text" name="val2split" placeholder="разделитель">
<select name="boolean">
<option value="" ></option>
<option value="&&" > && </option>
<option value="||" > || </option>
</select>`;
form.innerHTML = newForms
where = description || where || document.body
where.appendChild(form)
addOrDelete()
}
function remove(where){
where = description || where || document.body
}
return {add}
}
//addFroms(divEqual).add()
function createTable(arr, where){
let table = document.createElement('table')
table.border = '1';
table.style.borderSpacing = '0';
table.style.display = 'inline-block';
table.style.marginLeft = '20px';
let tableOuter = '';
for(let i=0; i<arr.length; i++){
tableOuter += '<tr>';
for(let z=0; z<arr[i].length; z++){
tableOuter += '<td>' + arr[i][z] + '</td>';
}
tableOuter += '</tr>';
}
table.innerHTML = tableOuter
where.appendChild(table)
}
function getFunctionBoolean(where0){
let forms = where0 || document.body
forms = forms.getElementsByTagName('form')
let result = 'return ';
for(let form of forms){
result += 'a[' + form.elements.val1.value + ']'
result += ' ' + form.elements.equal.value + ' '
result += 'b[' + form.elements.val2.value + ']'
result += ' ' + form.elements.boolean.value + ' '
//result += '\n';
}
return result
}
<html>
<head>
<meta charset="utf8">
<style type="text/css">
input{
width: 50px
}
</style>
</head>
<body>
<div id="tableSource"></div>
<button id="addEqualIf">если</button>
<button id="addEqualThen">тогда</button>
<button id="clearEqual">очистить</button>
<button id="saveEqual">сохранить конфигурацию</button>
<div id="divEqual"></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment