Skip to content

Instantly share code, notes, and snippets.

@jpigree
Created November 5, 2019 21:22
Show Gist options
  • Save jpigree/e248145b5626240d86002d907c012d84 to your computer and use it in GitHub Desktop.
Save jpigree/e248145b5626240d86002d907c012d84 to your computer and use it in GitHub Desktop.
Google Slides blue slidebar
/**
* @OnlyCurrentDoc Adds progress bars to a presentation.
*/
var BAR_ID = 'PROGRESS_BAR_ID';
var BAR_HEIGHT = 5; // px
var presentation = SlidesApp.getActivePresentation();
/**
* Runs when the add-on is installed.
* @param {object} e The event parameter for a simple onInstall trigger. To
* determine which authorization mode (ScriptApp.AuthMode) the trigger is
* running in, inspect e.authMode. (In practice, onInstall triggers always
* run in AuthMode.FULL, but onOpen triggers may be AuthMode.LIMITED or
* AuthMode.NONE.)
*/
function onInstall(e) {
onOpen();
}
/**
* Trigger for opening a presentation.
* @param {object} e The onOpen event.
*/
function onOpen(e) {
SlidesApp.getUi().createAddonMenu()
.addItem('Show progress bar', 'createBars')
.addItem('Hide progress bar', 'deleteBars')
.addToUi();
}
/**
* Create a rectangle on every slide with different bar widths.
*/
function createBars() {
deleteBars(); // Delete any existing progress bars
var slides = presentation.getSlides();
for (var i = 0; i < slides.length; ++i) {
var ratioComplete = (i / (slides.length - 1));
var x = 0;
var y = presentation.getPageHeight() - BAR_HEIGHT;
var barWidth = presentation.getPageWidth() * ratioComplete;
if (barWidth > 0) {
var bar = slides[i].insertShape(SlidesApp.ShapeType.RECTANGLE, x, y,
barWidth, BAR_HEIGHT);
bar.getFill().setSolidFill(77, 121, 255);
bar.getBorder().setTransparent();
bar.setLinkUrl(BAR_ID);
}
}
}
/**
* Deletes all progress bar rectangles.
*/
function deleteBars() {
var slides = presentation.getSlides();
for (var i = 0; i < slides.length; ++i) {
var elements = slides[i].getPageElements();
for (var j = 0; j < elements.length; ++j) {
var el = elements[j];
if (el.getPageElementType() === SlidesApp.PageElementType.SHAPE &&
el.asShape().getLink() &&
el.asShape().getLink().getUrl() === BAR_ID) {
el.remove();
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment