Last active
July 15, 2018 16:22
-
-
Save studermartin/6b8297a494bb998d44731f84069f50de to your computer and use it in GitHub Desktop.
Shared with Script Lab
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
name: Fix Confluence2Word export | |
description: '' | |
author: MartinStuderHTWChur | |
host: WORD | |
api_set: {} | |
script: | |
content: |- | |
// Script to adapt formating in Microsoft Word documents exported from Atlassian Confluence. | |
// | |
// Links | |
// - https://github.com/OfficeDev/office-js-snippets/tree/master/samples/word/99-fabric: example using fabric components for the UI | |
initializeUI(); | |
async function initializeUI() { | |
const toggleElements = document.querySelectorAll(".ms-Toggle"); | |
for (let i = 0; i < toggleElements.length; i++) { | |
new fabric['Toggle'](toggleElements[i]); | |
} | |
} | |
$("#run").click(() => tryCatch(run)); | |
function replaceListStyle13(paragraph: Word.Paragraph): void { | |
if (paragraph.isListItem) { | |
if (paragraph.leftIndent == 36) { | |
setAndLogStyle(paragraph, "List Bullet"); | |
} | |
if (paragraph.leftIndent == 72) { | |
setAndLogStyle(paragraph, "List Bullet 2"); | |
} | |
} | |
} | |
function replaceHeadingStyle13(paragraph: Word.Paragraph): void { | |
const heading: string = "Heading"; | |
let replaceStyles: Map<string, string> = new Map<string, string>(); | |
replaceStyles[`${heading}2`] = `${heading}1`; | |
replaceStyles[`${heading}3`] = `${heading}2`; | |
replaceStyles[`${heading}4`] = `${heading}3`; | |
if (paragraph.styleBuiltIn in replaceStyles) { | |
setAndLogStyleBuiltIn(paragraph, replaceStyles[paragraph.styleBuiltIn]); | |
} | |
} | |
function replaceHeadingStyle(paragraph: Word.Paragraph): void { | |
const heading: string = "\u00dcberschrift"; | |
let replaceStyles: Map<string, string> = new Map<string, string>(); | |
replaceStyles[`${heading} 2`] = `${heading} 1`; | |
replaceStyles[`${heading} 3`] = `${heading} 2`; | |
replaceStyles[`${heading} 4`] = `${heading} 3`; | |
if (paragraph.style in replaceStyles) { | |
setAndLogStyle(paragraph, replaceStyles[paragraph.style]); | |
} | |
} | |
async function run() { | |
await Word.run(async (context) => { | |
let wordApi1_3: boolean = Office.context.requirements.isSetSupported('WordApi', 1.3); | |
/* if (!Office.context.requirements.isSetSupported('WordApi', 1.3)) { | |
console.log('Sorry. The tutorial add-in uses Word.js APIs that are not available in your version of Office.'); | |
} | |
*/ | |
// only using WordApi 1.1 | |
const heading: string = "\u00dcberschrift"; | |
let replaceStyles: Map<string,string> = new Map<string,string>(); | |
replaceStyles[`${heading} 2`] = `${heading} 1`; | |
replaceStyles[`${heading} 3`] = `${heading} 2`; | |
replaceStyles[`${heading} 4`] = `${heading} 3`; | |
let increaseHeading:boolean = $("#tgl-increase-heading").children('label').hasClass('is-selected'); | |
let selection = context.document.getSelection(); | |
await context.sync(); | |
let paragraphs = selection.paragraphs; | |
// var paragraphs = context.document.body.paragraphs; | |
paragraphs.load(); | |
await context.sync(); | |
for (let i = 0; i < paragraphs.items.length; i++) { | |
let paragraph = paragraphs.items[i]; | |
paragraph.load("style"); | |
await context.sync(); | |
// | |
if (paragraph.style == "Standard (Web)") { | |
setAndLogStyle(paragraph, "Standard"); | |
} | |
if (increaseHeading) { | |
if (wordApi1_3) { | |
replaceHeadingStyle13(paragraph); | |
} else { | |
replaceHeadingStyle(paragraph); | |
} | |
} | |
// Failed attemps to reliably check for list items | |
// Attempt 1: isListItem | |
// Failed because list related functions are only available in WordApi 1.3 | |
// console.log(paragraph.isListItem) | |
// Attempt 2: HTML | |
// Aproach: Check the html code for <li>s | |
// Failed because the html code does not contain any sign of lists | |
// var html = paragraph.getHtml(); | |
// await context.sync(); | |
// console.log(html.value); | |
// Heuristially check for list item | |
// Approach: Check for indentation | |
// Drawback: Cannot distinguish between list types (ordered, numbered ...) | |
if (wordApi1_3) { | |
replaceListStyle13(paragraph); | |
} else { | |
if (paragraph.leftIndent == 36) { | |
setAndLogStyle(paragraph, "Aufz\u00E4hlungszeichen"); | |
} | |
if (paragraph.leftIndent == 72) { | |
setAndLogStyle(paragraph, "Aufz\u00E4hlungszeichen 2"); | |
} | |
} | |
} | |
OfficeHelpers.UI.notify("Finished"); | |
await context.sync(); | |
}); | |
} | |
/** Default helper for invoking an action and handling errors. */ | |
async function tryCatch(callback) { | |
try { | |
await callback(); | |
} | |
catch (error) { | |
OfficeHelpers.UI.notify(error); | |
OfficeHelpers.Utilities.log(error); | |
} | |
} | |
/** Helper */ | |
function logParagraph(paragraph: Word.Paragraph):void { | |
console.log("Paragraph <" + paragraph.text.substr(0, 20) + "...>"); | |
} | |
function setAndLogStyle(paragraph: Word.Paragraph, style: string): void { | |
paragraph.style = style; | |
logParagraph(paragraph); | |
console.log(` style = ${style}`); | |
} | |
function setAndLogStyleBuiltIn(paragraph: Word.Paragraph, style: string): void { | |
paragraph.styleBuiltIn = style; | |
logParagraph(paragraph); | |
console.log(` styleBuiltIn = ${style}`); | |
} | |
// To avoid compile errors for the undeclared "fabric" object, declare it to the type-system here. | |
declare var fabric; | |
language: typescript | |
template: | |
content: "<section class=\"ms-font-m\">\n\t<p>Select range to fix styles. If there is no selection, the paragraph where the cursor is placed is the selected.</p>\n</section>\n\n<div class=\"ms-Toggle ms-Toggle--textRight\" id=\"tgl-increase-heading\">\n\t<span class=\"ms-Toggle-description\">Increase headings?</span>\n\t<input type=\"checkbox\" class=\"ms-Toggle-input\" />\n\t<label for=\"tgl-increase-heading\" class=\"ms-Toggle-field\" tabindex=\"0\">\n <span class=\"ms-Label ms-Label--off\">Do not increase</span> \n <span class=\"ms-Label ms-Label--on\">Increase</span> \n </label>\n</div>\n\n\n<button id=\"run\" class=\"ms-Button\">\n<span class=\"ms-Button-label\">Run</span>\n</button>\n<label class=\"ms-Label\">See log for changes.</label>\n" | |
language: html | |
style: | |
content: | | |
/* Your style goes here */ | |
language: css | |
libraries: |- | |
// Office.js | |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js | |
// NPM libraries | |
[email protected] | |
[email protected]/dist/js/fabric.min.js | |
[email protected]/dist/css/fabric.min.css | |
[email protected]/dist/css/fabric.components.min.css | |
@microsoft/[email protected]/dist/office.helpers.min.js | |
[email protected]/client/core.min.js | |
// IntelliSense: Use dt~library_name for DefinitelyTyped or URLs to d.ts files | |
@types/office-js | |
@types/jquery | |
@types/core-js | |
@microsoft/[email protected]/dist/office.helpers.d.ts |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Correct name and description.