Last active
March 17, 2018 07:29
-
-
Save legenderrys/c38e2044e4431296b8399d33acb143a4 to your computer and use it in GitHub Desktop.
Converts google form into JSON form response object
This file contains hidden or 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
var db = {} | |
var gf = _docs_flag_initialData['docs-seu'].replace('/edit','/formResponse'); | |
var labels = [...document.querySelectorAll('.freebirdFormviewerViewItemsItemItem')]; | |
var form = labels.forEach(function(elb,i){ | |
//find labelname | |
var labelname = elb.querySelector('.freebirdFormviewerViewItemsItemItemTitle'); | |
labelname = labelname.textContent; | |
db[labelname] = {}; | |
//find type | |
var isradio = elb.querySelectorAll('[role="radio"]').length > 0 ? 'radio':false; | |
var isdropdown = elb.querySelectorAll('[role="option"]').length > 0 ? 'select':false; | |
var ischeckbox = elb.querySelectorAll('[role="checkbox"]').length > 0 ? 'checkbox':false; | |
var istextarea = elb.querySelectorAll('textarea').length > 0 ? 'textarea':false; | |
var isdate = elb.querySelectorAll('[type="date"]').length > 0 ? 'date':false; | |
let inputtype = isradio || isdropdown || ischeckbox || isdate || istextarea ||'text'; | |
db[labelname].type = inputtype; | |
let id = elb.querySelectorAll('[name*="entry."]').length > 0? elb.querySelectorAll('[name*="entry."]')[0].name.replace('_year','').replace('other_option_response','').replace('_sentinel','') : false; | |
// console.log(id); | |
let hidden_keys = [...elb.querySelectorAll('input[type="hidden"][name*="entry."]')]; | |
let is_grid = elb.querySelectorAll('.freebirdFormviewerViewItemsGridColumnHeader').length > 0? true : false; | |
if(is_grid){ | |
optionNames = elb.querySelectorAll('.freebirdFormviewerViewItemsGridCell.freebirdFormviewerViewItemsGridRowHeader,.freebirdFormviewerViewItemsGridRow.freebirdFormviewerViewItemsGridColumnHeader'); | |
var gridobj = {options:[],labels:[],type:inputtype,name:id}; | |
hidden_keys = hidden_keys.reduce(function(list,h,i){if(h.name && h.hasAttribute('disabled') && list.indexOf(h.name) == -1){list.push(h.name );}; return list},[]); | |
gridobj.names = hidden_keys; | |
optionNames.forEach(function(el,i){ | |
var val = el.textContent; | |
let labelNames = [...el.querySelectorAll('.freebirdFormviewerViewItemsGridCell')]; | |
let is_header = el.classList.contains('freebirdFormviewerViewItemsGridColumnHeader'); | |
if(is_header && val != ''){ | |
var hh = labelNames.reduce(function(list,h,i){ | |
console.log(h); if(h.textContent !=='' && h.classList.contains('freebirdFormviewerViewItemsGridColumnHeader') == false){ | |
list.push(h.textContent); | |
};return list},[]); | |
gridobj.options = hh | |
}else{ | |
if(val != '' && gridobj.labels.indexOf(val) == -1){ | |
gridobj.labels.push(val) | |
} | |
} | |
db[labelname] = gridobj | |
}); | |
}else{ | |
//Non grid blocks | |
let odom = [...elb.querySelectorAll('.exportLabel,.exportContent')]; | |
let options = (inputtype == 'text')?false:odom.reduce(function(list,ell,i){ | |
// console.log(ell); | |
var name = ell.textContent.trim().replace(':','').replace(',','+'); | |
if(name !== ''){list.push(name);} | |
return list; | |
},[]); | |
if(hidden_keys.length > 0){ | |
hidden_keys = hidden_keys.reduce(function(list,h,i){if(h.name && list.indexOf(h.name) == -1){list.push({name:h.name,type:'hidden'} );}; return list},[]); | |
} | |
if(options && options.length > 0 && inputtype !== 'textarea'){ | |
db[labelname] = {name:id, type:inputtype, options: options}; | |
}else{ | |
db[labelname] = {name:id, type:inputtype}; | |
} | |
} | |
}); | |
convertToMd = function(db){ | |
let md = `action=${gf}\n===\n`; | |
Object.keys(db).forEach(function(label,i){ | |
let ln = db[label]; | |
let options = (ln.options)?','+ln.options.join(','):''; | |
md += `${label}: name=${ln.name}, type=${ln.type} ${options}\n`; | |
}); | |
console.log(md); | |
return md; | |
} | |
db | |
convertToMd(db); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment