Created
August 12, 2020 16:24
-
-
Save nutanc/ef19c3cbdf9eb3c8dae7456c786465b2 to your computer and use it in GitHub Desktop.
This file contains 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 Limits the script to only accessing the current presentation. | |
*/ | |
/** | |
* Create a open translate menu item. | |
* @param {Event} event The open event. | |
*/ | |
function onOpen(event) { | |
SlidesApp.getUi().createAddonMenu() | |
.addItem('Open GPT Helper', 'showSidebar') | |
.addToUi(); | |
} | |
/** | |
* Open the Add-on upon install. | |
* @param {Event} event The install event. | |
*/ | |
function onInstall(event) { | |
onOpen(event); | |
} | |
/** | |
* Opens a sidebar in the document containing the add-on's user interface. | |
*/ | |
function showSidebar() { | |
var ui = HtmlService | |
.createHtmlOutputFromFile('sidebar') | |
.setTitle('GPT Helper'); | |
SlidesApp.getUi().showSidebar(ui); | |
} | |
/** | |
* Recursively gets child text elements a list of elements. | |
* @param {PageElement[]} elements The elements to get text from. | |
* @return {Text[]} An array of text elements. | |
*/ | |
function getElementTexts(elements) { | |
var texts = []; | |
elements.forEach(function(element) { | |
switch (element.getPageElementType()) { | |
case SlidesApp.PageElementType.GROUP: | |
element.asGroup().getChildren().forEach(function(child) { | |
texts = texts.concat(getElementTexts(child)); | |
}); | |
break; | |
case SlidesApp.PageElementType.TABLE: | |
var table = element.asTable(); | |
for (var y = 0; y < table.getNumColumns(); ++y) { | |
for (var x = 0; x < table.getNumRows(); ++x) { | |
texts.push(table.getCell(x, y).getText()); | |
} | |
} | |
break; | |
case SlidesApp.PageElementType.SHAPE: | |
texts.push(element.asShape().getText()); | |
break; | |
} | |
}); | |
return texts; | |
} | |
/** | |
* Translates selected slide elements to the target language using Apps Script's Language service. | |
* | |
* @param {string} targetLanguage The two-letter short form for the target language. (ISO 639-1) | |
* @return {number} The number of elements translated. | |
*/ | |
function translateSelectedElements() { | |
// Get selected elements. | |
var selection = SlidesApp.getActivePresentation().getSelection(); | |
var selectionType = selection.getSelectionType(); | |
var texts = []; | |
switch (selectionType) { | |
case SlidesApp.SelectionType.PAGE: | |
var pages = selection.getPageRange().getPages().forEach(function(page) { | |
texts = texts.concat(getElementTexts(page.getPageElements())); | |
}); | |
break; | |
case SlidesApp.SelectionType.PAGE_ELEMENT: | |
var pageElements = selection.getPageElementRange().getPageElements(); | |
texts = texts.concat(getElementTexts(pageElements)); | |
break; | |
case SlidesApp.SelectionType.TABLE_CELL: | |
var cells = selection.getTableCellRange().getTableCells().forEach(function(cell) { | |
texts.push(cell.getText()); | |
}); | |
break; | |
case SlidesApp.SelectionType.TEXT: | |
var elements = selection.getPageElementRange().getPageElements().forEach(function(element) { | |
texts.push(element.asShape().getText()); | |
}); | |
break; | |
} | |
var r=''; | |
// Translate all elements in-place. | |
texts.forEach(function(text) { | |
var query = text.asRenderedString(); | |
var url = 'URL_OF_OPEN_API' | |
+ '?' | |
+ 'text=' + encodeURIComponent(query); | |
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true}); | |
r=r+response.getContentText(); | |
console.log(response.getResponseCode()); | |
Logger.log(response.getResponseCode()); | |
text.setText(""); | |
//text.setText(LanguageApp.translate(text.asRenderedString(), '', targetLanguage)); | |
}); | |
var data = JSON.parse(r); | |
console.log(data); | |
// Create a new square textbox, using the supplied element ID. | |
/*var url = 'https://d0fe0d9608f4.ngrok.io/get_presentation?' | |
+ '?' | |
+ 'text=' + encodeURIComponent(query); | |
var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true}); | |
console.log(response.getResponseCode()); | |
Logger.log(response.getResponseCode());*/ | |
var slide=SlidesApp.getActivePresentation().getSlides()[0]; | |
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 200, 20, 500, 100); | |
var textRange = shape.getText(); | |
var t=textRange.setText(data.title); | |
t.getTextStyle() | |
.setBold(true) | |
.setFontSize(48) | |
.setForegroundColor('#ff0000'); | |
//t.insertParagraph(4, "para1"); | |
//t.insertParagraph(4, "para2"); | |
elems=data.elements; | |
for (i = 0; i < elems.length; i++) { | |
top=75+(i+1)*75; | |
var shape = slide.insertShape(SlidesApp.ShapeType.TEXT_BOX, 50, top, 650, 75); | |
var textRange = shape.getText(); | |
var t=textRange.setText(elems[i]); | |
t.getTextStyle() | |
.setBold(true) | |
.setFontSize(24) | |
.setForegroundColor('#000000'); | |
} | |
/*var elementId = 'MyTextBox_01'; | |
var pt350 = { | |
magnitude: 350, | |
unit: 'PT' | |
}; | |
var requests = [ | |
// Insert text into the box, using the supplied element ID. | |
{ | |
insertText: { | |
objectId: SlidesApp.getActivePresentation().getSlides()[0], | |
insertionIndex: 0, | |
text: 'New Box Text Inserted!' | |
} | |
}]; | |
// Execute the request. | |
var createTextboxWithTextResponse = SlidesApp.getActivePresentation().batchUpdate({ | |
requests: requests | |
}, '1mUnOuadMjnZLPh_X8i1Glm8bcI02UIJj3Vis2D9PD44'); | |
var createShapeResponse = createTextboxWithTextResponse.replies[0].createShape; | |
console.log('Created textbox with ID: %s', createShapeResponse.objectId);*/ | |
return texts.length; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment