Skip to content

Instantly share code, notes, and snippets.

@cramforce
Created August 23, 2012 03:04
Show Gist options
  • Save cramforce/3431703 to your computer and use it in GitHub Desktop.
Save cramforce/3431703 to your computer and use it in GitHub Desktop.
speaker-apps-script.js
var COLS = {
name: 0,
title: 11,
summary: 12,
imageSrc: 10
};
var TEMPLATE = '---\n\
layout: main\n\
title: [title]\n\
tag: speaker\n\
---\n\
\n\
# {{ page.title }}\n\
\n\
<img src="images/[image]" class="speaker" alt="[name]">[summary]\n';
function render(template, map) {
return template.replace(/\[([a-z-_]+)\]/ig, function(all, key) {
return map[key] || 'MISSING: ' + key;
});
}
function fromSelectedRow() {
createPost(SpreadsheetApp.getActiveRange().getValues()[0]);
}
function createPost(row) {
var map = {};
for (var key in COLS) {
var i = COLS[key];
map[key] = row[i];
}
var dir = DocsList.getFolder('jsconf-speakers');
var filename = '2012-08-22-' + getFilename(map.title) + '.md';
var existing = getFileByPrefix(dir, filename);
if (existing) {
existing.setTrashed(true);
}
map.image = fetchImage(DocsList.getFolder('jsconf-images'), map);
var content = render(TEMPLATE, map);
dir.createFile(filename, content);
Logger.log(content);
}
function fetchImage(dir, map) {
var exists = getFileByPrefix(dir, getFilename(map.name));
if (exists) {
return exists.getName();
}
var url = map.imageSrc;
if (url) {
var resp = UrlFetchApp.fetch(url);
Logger.log(url);
Logger.log(resp.getHeaders())
var mimeType = resp.getHeaders()['content-type'];
Logger.log(mimeType);
// create a blob with a name and content type
var name = getFilename(map.name) + '.' + mimeType.split(/\//)[1];
var blb = Utilities.newBlob(resp.getContent(), mimeType, name);
var file = dir.createFile(blb);
return name;
}
}
function getFileByPrefix(dir, name) {
var files = dir.getFiles().filter(function(file) {
return file.getName().indexOf(name) == 0;
});
return files[files.length - 1];
}
function getFilename(str) {
return str.toLowerCase().replace(/\W/g, '-').replace(/-+/g, '-')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment