Skip to content

Instantly share code, notes, and snippets.

@hyperking
Last active March 17, 2018 07:29
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 hyperking/c38e2044e4431296b8399d33acb143a4 to your computer and use it in GitHub Desktop.
Save hyperking/c38e2044e4431296b8399d33acb143a4 to your computer and use it in GitHub Desktop.
Converts google form into JSON form response object
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