Created
July 8, 2025 15:17
-
-
Save wescpy/b92e73a9747aef51bda225d90b82959f to your computer and use it in GitHub Desktop.
Google Apps Script code for the progress bars Google Slides add-on as described in the blog post(s): http://goo.gl/69EJVw and http://goo.gl/12c3ZD
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
/** | |
* @OnlyCurrentDoc Adds progress bars to a presentation. | |
*/ | |
var BAR_ID = 'PROGRESS_BAR_ID'; | |
var BAR_HEIGHT = 10; // 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.SNIP_2_SAME_RECTANGLE, | |
x, y, barWidth, BAR_HEIGHT); | |
bar.getBorder().setTransparent(); | |
bar.getFill().setSolidFill(127, 127, 255); | |
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