Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Doc {
- constructor(docId = null) {
- this.html = this.getDocAsHtml(docId);
- this.xml = XmlService.parse(this.html);
- this.root = this.xml.getRootElement();
- }
- getDocStyles() {
- let styleTag = this.root.getChildren()[0].getChildText("style");
- let regexStyles = styleTag.match(/(\.c\d+\{.*?\})/g);
- let styles = {}
- for (let i in regexStyles) {
- console.log(regexStyles[i])
- let className = regexStyles[i].match(/\.(c\d+)\{/)[1];
- let cssStyle = this.parseCSSText(regexStyles[i]).style;
- console.log(className, cssStyle)
- styles[className] = cssStyle
- }
- return styles
- }
- parseCSSText(cssText) {
- var cssTxt = cssText.replace(/\/\*(.|\s)*?\*\//g, " ").replace(/\s+/g, " ");
- var style = {}, [,ruleName,rule] = cssTxt.match(/ ?(.*?) ?{([^}]*)}/)||[,,cssTxt];
- var cssToJs = s => s.replace(/\W+\w/g, match => match.slice(-1).toUpperCase());
- var properties = rule.split(";").map(o => o.split(":").map(x => x && x.trim()));
- for (var [property, value] of properties) style[cssToJs(property)] = value;
- return {cssText, ruleName, style}
- }
- getDocAsHtml(docId) {
- let id = docId ? docId : DocumentApp.getActiveDocument().getId(); //get active doc if no ID is supplied
- let _ = DriveApp.getStorageUsed(); //needed to get Drive Scope requested
- let url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + id + "&exportFormat=html";
- let param = {
- method: "get",
- headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
- muteHttpExceptions: true,
- };
- let html = UrlFetchApp.fetch(url, param).getContentText();
- html = html.replace(`<meta content="text/html; charset=UTF-8" http-equiv="content-type">`, "");
- return HtmlService.createHtmlOutput(html).getContent();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement