Advertisement
jakkyjack

Doc Class

Mar 1st, 2022
835
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Doc {
  2.   constructor(docId = null) {
  3.     this.html = this.getDocAsHtml(docId);
  4.     this.xml = XmlService.parse(this.html);
  5.     this.root = this.xml.getRootElement();
  6.   }
  7.  
  8.   getDocStyles() {
  9.     let styleTag = this.root.getChildren()[0].getChildText("style");
  10.     let regexStyles = styleTag.match(/(\.c\d+\{.*?\})/g);
  11.     let styles = {}
  12.  
  13.     for (let i in regexStyles) {
  14.       console.log(regexStyles[i])
  15.       let className = regexStyles[i].match(/\.(c\d+)\{/)[1];
  16.  
  17.       let cssStyle = this.parseCSSText(regexStyles[i]).style;
  18.       console.log(className, cssStyle)
  19.       styles[className] = cssStyle
  20.     }
  21.    
  22.  
  23.     return styles
  24.   }
  25.  
  26.   parseCSSText(cssText) {
  27.     var cssTxt = cssText.replace(/\/\*(.|\s)*?\*\//g, " ").replace(/\s+/g, " ");
  28.     var style = {}, [,ruleName,rule] = cssTxt.match(/ ?(.*?) ?{([^}]*)}/)||[,,cssTxt];
  29.     var cssToJs = s => s.replace(/\W+\w/g, match => match.slice(-1).toUpperCase());
  30.     var properties = rule.split(";").map(o => o.split(":").map(x => x && x.trim()));
  31.     for (var [property, value] of properties) style[cssToJs(property)] = value;
  32.     return {cssText, ruleName, style}
  33.   }
  34.  
  35.   getDocAsHtml(docId) {
  36.     let id = docId ? docId : DocumentApp.getActiveDocument().getId(); //get active doc if no ID is supplied
  37.     let _ = DriveApp.getStorageUsed(); //needed to get Drive Scope requested
  38.     let url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + id + "&exportFormat=html";
  39.     let param = {
  40.       method: "get",
  41.       headers: { "Authorization": "Bearer " + ScriptApp.getOAuthToken() },
  42.       muteHttpExceptions: true,
  43.     };
  44.     let html = UrlFetchApp.fetch(url, param).getContentText();
  45.     html = html.replace(`<meta content="text/html; charset=UTF-8" http-equiv="content-type">`, "");
  46.     return HtmlService.createHtmlOutput(html).getContent();
  47.   }
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement