Skip to content

Instantly share code, notes, and snippets.

@gartmeier
Last active May 31, 2018 17:10
Show Gist options
  • Save gartmeier/381df5c151224d23751f877de28bc5a3 to your computer and use it in GitHub Desktop.
Save gartmeier/381df5c151224d23751f877de28bc5a3 to your computer and use it in GitHub Desktop.
Adds disclosure slides to custom decks
(function ($) {
var prefix = 'System:ds:';
function uniqueArray(ar) {
var j = {};
ar.forEach(function (v) {
j[v + '::' + typeof v] = v;
});
return Object.keys(j).map(function (v) {
return j[v];
});
}
function parseSlideOrder(slideOrder) {
return slideOrder
.split(',')
.map(function (slide) {
var pieces = slide.split(/_|\|/);
return {
dirname: pieces[0] + '_' + pieces[1],
fileID: pieces[0],
page: parseInt(pieces[2])
}
});
}
function toSlideOrder(slides) {
return slides.map(function(slide) {
return slide.dirname + '|' + slide.page
}).join(',')
}
function parseDisclosurePages(keywords, pageMax) {
if (!keywords) {
return []
}
return pages = keywords.split(',')
.map(function (kw) {
return kw.trim()
})
.filter(function (kw) {
return prefix === kw.substring(0, prefix.length)
})
.map(function (kw) {
return parseInt(kw.substring(prefix.length, kw.length))
})
.filter(function (page) {
return page > 0 && page <= pageMax;
});
}
function getFile(id) {
for (var i = 0; i < serverJSON.files.length; i++) {
var file = serverJSON.files[i];
if (parseInt(file.ID) === parseInt(id)) {
return file
}
}
}
function addDisclures(decks) {
for (var i = 0; i < decks.length; i++) {
var deck = decks[i];
if (!deck.isCustom || !deck.slideOrder) {
continue;
}
var slides = parseSlideOrder(deck.slideOrder);
var fileIDs = uniqueArray(slides.map(function (slide) {
return slide.fileID
}));
for (var j = 0; j < fileIDs.length; j++) {
var file = getFile(fileIDs[j]);
var dpages = parseDisclosurePages(file.keywords, parseInt(file.extra));
for (var k = 0; k < dpages.length; k++) {
slides.push({
dirname: file.vUrl.split(/\/|\./)[1],
fileID: parseInt(file.ID),
page: dpages[k]
})
}
}
deck.ID = deck.slideOrder = toSlideOrder(slides);
deck.vNumber = slides.length
}
return decks
}
var superLoadPresentations = window.loadPresentations;
window.loadPresentations = function(presentationsObject, searchPhrase) {
superLoadPresentations(addDisclures(presentationsObject), searchPhrase)
}
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment