-
Notifications
You must be signed in to change notification settings - Fork 0
/
SlidesApp Unpack Zotero.js
81 lines (76 loc) · 3.43 KB
/
SlidesApp Unpack Zotero.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
function unpackZoteroSlides(warning) {
const ui = SlidesApp.getUi();
try {
let links, link, groupId, itemKey, linkText, regEx, advice = '', showAdviseFlag = { value: false };
let counter = { value: 0 };
if (warning === true) {
regEx = new RegExp('https?://ref.opendeved.net/zo/zg/([0-9]+)/7/([^/\?]+)/([^/\?]+)', 'i');
} else {
regEx = new RegExp('https?://ref.opendeved.net/zo/zg/([0-9]+)/7/([^/\?]+)/?', 'i');
}
const slides = SlidesApp.getActivePresentation().getSlides();
for (let i in slides) {
slides[i].getPageElements().forEach(function (pageElement) {
if (pageElement.getPageElementType() == SlidesApp.PageElementType.SHAPE) {
links = pageElement.asShape().getText().getLinks();
Logger.log(links);
unpackZoteroSlidesHelper(warning, links, showAdviseFlag, regEx, counter);
} else if (pageElement.getPageElementType() == SlidesApp.PageElementType.TABLE) {
const table = pageElement.asTable();
numRows = table.getNumRows();
numCols = table.getNumColumns();
for (let m = 0; m < numRows; m++) {
for (let k = 0; k < numCols; k++) {
cell = table.getRow(m).getCell(k);
if (cell.getMergeState() == 'HEAD' || cell.getMergeState() == 'NORMAL') {
links = cell.getText().getLinks();
unpackZoteroSlidesHelper(warning, links, showAdviseFlag, regEx, counter);
}
}
}
}
});
}
if (showAdviseFlag === true) {
advice = ' Following unpacking, check the document for symbols "+UL+", "+UR+", ⇡ and 《warning》 and then run cleanup.';
}
ui.alert('Number of citations that were Zotero-unpacked: ' + counter.value + advice);
}
catch (error) {
ui.alert('Error in unpackZoteroSlides: ' + error);
}
}
function unpackZoteroSlidesHelper(warning, links, showAdviseFlag, regEx, counter) {
let link, groupId, itemKey, linkText;
//for (let j in links) {
for (let j = links.length - 1; j >= 0; j--) {
warningFlag = false;
link = links[j].getTextStyle().getLink().getUrl();
result = regEx.exec(link);
if (result != null) {
itemKey = result[2];
groupId = result[1];
linkTextHelper = result[3];
linkText = links[j].asString().replace(/^⇡/, '');
if (warning === true && linkTextHelper != linkText) {
warningText = `《warning:${linkTextHelper}》`;
warningTextLength = warningText.length;
newText = `⟦zg:${groupId}:${itemKey}|${linkText}${warningText}⟧`;
warningFlag = true;
showAdviseFlag.value = true;
} else {
newText = `⟦zg:${groupId}:${itemKey}|${linkText}⟧`;
}
pinkLength = groupId.length + itemKey.length + 6;
Logger.log(newText);
links[j].setText(newText).getTextStyle().setLinkUrl(null).setBackgroundColorTransparent();
links[j].getRange(0, pinkLength).getTextStyle().setFontSize(6).setForegroundColor('#fe01dc');
links[j].getRange(newText.length - 1, newText.length).getTextStyle().setFontSize(6).setForegroundColor('#fe01dc');
links[j].getRange(pinkLength, newText.length - 1).getTextStyle().setForegroundColor('#0123dd');
if (warningFlag === true) {
links[j].getRange(newText.length - warningTextLength - 1, newText.length - 1).getTextStyle().setFontSize(6).setForegroundColor('#fe01dc').setBackgroundColor('#dedede');
}
counter.value++;
}
}
}