Last active
February 23, 2021 17:37
-
-
Save johandanforth/dfdd6ab858d0b6bb47328f433aebd217 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
name: Get workitem (bootstrap 3) | |
description: '' | |
host: OUTLOOK | |
api_set: {} | |
script: | |
content: "\"use strict\";\n\nvar itemId = null;\nvar item = null;\n\n(function() {\n Office.onReady(function() {\n // Office is ready\n $(document).ready(function() {\n enableTabs();\n run();\n });\n });\n})();\n\nfunction enableTabs() {}\n\n//TODO: get projects - show project name\n\nasync function updateView(workItem) {\n let d1 = loadData(item.subject);\n let d2 = loadData(item.start);\n let d3 = loadData(item.end);\n\n const [subject, start, end] = await Promise.all([d1, d2, d3]);\n\n if (workItem.Name === null || workItem.Name === \"\") {\n console.log(1);\n console.log(subject.toString());\n $(\"#Name\").val(subject.toString());\n } else $(\"#Name\").val(workItem.Name);\n $(\"#Comment\").text(workItem.Comment);\n $(\"#ProjectId\").text(workItem.ProjectId);\n $(\"#InvoiceTime\").attr(\"checked\", workItem.InvoiceTime === \"true\" ? \"checked\" : \"\");\n}\n\nfunction loadData(prop) {\n return new Promise((resolve, reject) => {\n prop.getAsync((res) => {\n resolve(res.value);\n });\n });\n}\n\nfunction run() {\n item = Office.context.mailbox.item;\n\n item.getItemIdAsync((result) => {\n itemId = result.value;\n\n Office.context.mailbox.getCallbackTokenAsync({ isRest: true }, function(asyncResult) {\n getCurrentItem(asyncResult.value);\n });\n });\n}\n\nfunction getCurrentItem(accessToken) {\n var itemId = getItemRestId();\n var getMessageUrl = Office.context.mailbox.restUrl + \"/v2.0/me/events/\" + itemId + \"?expand=attachments\";\n console.log(\"Calling \" + Office.context.mailbox.restUrl + \"/v2.0/me/events/\");\n $.ajax({\n url: getMessageUrl,\n dataType: \"json\",\n headers: { Authorization: \"Bearer \" + accessToken }\n })\n .done(function(item) {\n if (item.Attachments.length > 0) {\n let att = item.Attachments[0];\n var raw = window.atob(att.ContentBytes);\n //console.log(raw);\n let dom = new DOMParser().parseFromString(raw, \"text/xml\");\n let json = xml2json(dom, \"\");\n let workitem = JSON.parse(json);\n console.log(workitem.WorkItem);\n updateView(workitem.WorkItem);\n }\n })\n .fail(function(error) {\n console.error(error);\n });\n}\n\nfunction getItemRestId() {\n if (Office.context.mailbox.diagnostics.hostName === \"OutlookIOS\") {\n // itemId is already REST-formatted.\n return itemId;\n //return Office.context.mailbox.item.itemId;\n } else {\n // Convert to an item ID for API v2.0.\n return Office.context.mailbox.convertToRestId(\n itemId,\n //Office.context.mailbox.item.itemId,\n Office.MailboxEnums.RestVersion.v2_0\n );\n }\n}\n\n// function getAttachment(itemId, attachmentId, accessToken) {\n// var getMessageUrl = Office.context.mailbox.restUrl + \"/v2.0/me/events/\" + itemId + \"/attachments/\" + attachmentId;\n\n// $.ajax({\n// url: getMessageUrl,\n// dataType: \"json\",\n// headers: { Authorization: \"Bearer \" + accessToken }\n// })\n// .done(function(item) {\n// console.log(item);\n// })\n// .fail(function(error) {\n// console.error(error);\n// });\n// }\n\n/*\tThis work is licensed under Creative Commons GNU LGPL License.\n\n\tLicense: http://creativecommons.org/licenses/LGPL/2.1/\n Version: 0.9\n\tAuthor: Stefan Goessner/2006\n\tWeb: http://goessner.net/ \n*/\nfunction xml2json(xml, tab) {\n var X = {\n toObj: function(xml) {\n var o = {};\n if (xml.nodeType == 1) {\n // element node ..\n if (xml.attributes.length)\n // element with attributes ..\n for (var i = 0; i < xml.attributes.length; i++)\n o[\"@\" + xml.attributes[i].nodeName] = (xml.attributes[i].nodeValue || \"\").toString();\n if (xml.firstChild) {\n // element has child nodes ..\n var textChild = 0,\n cdataChild = 0,\n hasElementChild = false;\n for (var n = xml.firstChild; n; n = n.nextSibling) {\n if (n.nodeType == 1) hasElementChild = true;\n else if (n.nodeType == 3 && n.nodeValue.match(/[^ \\f\\n\\r\\t\\v]/)) textChild++;\n // non-whitespace text\n else if (n.nodeType == 4) cdataChild++; // cdata section node\n }\n if (hasElementChild) {\n if (textChild < 2 && cdataChild < 2) {\n // structured element with evtl. a single text or/and cdata node ..\n X.removeWhite(xml);\n for (var n = xml.firstChild; n; n = n.nextSibling) {\n if (n.nodeType == 3)\n // text node\n o[\"#text\"] = X.escape(n.nodeValue);\n else if (n.nodeType == 4)\n // cdata node\n o[\"#cdata\"] = X.escape(n.nodeValue);\n else if (o[n.nodeName]) {\n // multiple occurence of element ..\n if (o[n.nodeName] instanceof Array) o[n.nodeName][o[n.nodeName].length] = X.toObj(n);\n else o[n.nodeName] = [o[n.nodeName], X.toObj(n)];\n } // first occurence of element..\n else o[n.nodeName] = X.toObj(n);\n }\n } else {\n // mixed content\n if (!xml.attributes.length) o = X.escape(X.innerXml(xml));\n else o[\"#text\"] = X.escape(X.innerXml(xml));\n }\n } else if (textChild) {\n // pure text\n if (!xml.attributes.length) o = X.escape(X.innerXml(xml));\n else o[\"#text\"] = X.escape(X.innerXml(xml));\n } else if (cdataChild) {\n // cdata\n if (cdataChild > 1) o = X.escape(X.innerXml(xml));\n else for (var n = xml.firstChild; n; n = n.nextSibling) o[\"#cdata\"] = X.escape(n.nodeValue);\n }\n }\n if (!xml.attributes.length && !xml.firstChild) o = null;\n } else if (xml.nodeType == 9) {\n // document.node\n o = X.toObj(xml.documentElement);\n } else alert(\"unhandled node type: \" + xml.nodeType);\n return o;\n },\n toJson: function(o, name, ind) {\n var json = name ? '\"' + name + '\"' : \"\";\n if (o instanceof Array) {\n for (var i = 0, n = o.length; i < n; i++) o[i] = X.toJson(o[i], \"\", ind + \"\\t\");\n json +=\n (name ? \":[\" : \"[\") +\n (o.length > 1 ? \"\\n\" + ind + \"\\t\" + o.join(\",\\n\" + ind + \"\\t\") + \"\\n\" + ind : o.join(\"\")) +\n \"]\";\n } else if (o == null) json += (name && \":\") + \"null\";\n else if (typeof o == \"object\") {\n var arr = [];\n for (var m in o) arr[arr.length] = X.toJson(o[m], m, ind + \"\\t\");\n json +=\n (name ? \":{\" : \"{\") +\n (arr.length > 1 ? \"\\n\" + ind + \"\\t\" + arr.join(\",\\n\" + ind + \"\\t\") + \"\\n\" + ind : arr.join(\"\")) +\n \"}\";\n } else if (typeof o == \"string\") json += (name && \":\") + '\"' + o.toString() + '\"';\n else json += (name && \":\") + o.toString();\n return json;\n },\n innerXml: function(node) {\n var s = \"\";\n if (\"innerHTML\" in node) s = node.innerHTML;\n else {\n var asXml = function(n) {\n var s = \"\";\n if (n.nodeType == 1) {\n s += \"<\" + n.nodeName;\n for (var i = 0; i < n.attributes.length; i++)\n s += \" \" + n.attributes[i].nodeName + '=\"' + (n.attributes[i].nodeValue || \"\").toString() + '\"';\n if (n.firstChild) {\n s += \">\";\n for (var c = n.firstChild; c; c = c.nextSibling) s += asXml(c);\n s += \"</\" + n.nodeName + \">\";\n } else s += \"/>\";\n } else if (n.nodeType == 3) s += n.nodeValue;\n else if (n.nodeType == 4) s += \"<![CDATA[\" + n.nodeValue + \"]]>\";\n return s;\n };\n for (var c = node.firstChild; c; c = c.nextSibling) s += asXml(c);\n }\n return s;\n },\n escape: function(txt) {\n return txt\n .replace(/[\\\\]/g, \"\\\\\\\\\")\n .replace(/[\\\"]/g, '\\\\\"')\n .replace(/[\\n]/g, \"\\\\n\")\n .replace(/[\\r]/g, \"\\\\r\");\n },\n removeWhite: function(e) {\n e.normalize();\n for (var n = e.firstChild; n; ) {\n if (n.nodeType == 3) {\n // text node\n if (!n.nodeValue.match(/[^ \\f\\n\\r\\t\\v]/)) {\n // pure whitespace text node\n var nxt = n.nextSibling;\n e.removeChild(n);\n n = nxt;\n } else n = n.nextSibling;\n } else if (n.nodeType == 1) {\n // element node\n X.removeWhite(n);\n n = n.nextSibling;\n } // any other node\n else n = n.nextSibling;\n }\n return e;\n }\n };\n if (xml.nodeType == 9)\n // document node\n xml = xml.documentElement;\n var json = X.toJson(X.toObj(X.removeWhite(xml)), xml.nodeName, \"\\t\");\n return \"{\\n\" + tab + (tab ? json.replace(/\\t/g, tab) : json.replace(/\\t|\\n/g, \"\")) + \"\\n}\";\n}\n" | |
language: typescript | |
template: | |
content: "<div>\n\n\t<input id=\"Name\" class=\"form-control form-control-lg\"\n\n\t<!-- Nav tabs -->\n\t<ul class=\"nav nav-tabs\" role=\"tablist\">\n\t\t<li role=\"presentation\" class=\"active\"><a href=\"#home\" aria-controls=\"home\" role=\"tab\"\n\t\t\t\tdata-toggle=\"tab\">Home</a></li>\n\t\t<li role=\"presentation\"><a href=\"#profile\" aria-controls=\"profile\" role=\"tab\" data-toggle=\"tab\">Profile</a>\n\t\t</li>\n\t</ul>\n\n\t<!-- Tab panes -->\n\t<div class=\"tab-content\">\n\t\t<div role=\"tabpanel\" class=\"tab-pane active\" id=\"home\">\n\t\t\t\n\t\t\t<div class=\"col-6 bold\">Projekt:</div>\n\t\t\t<div class=\"col-6\"><select class=\"form-select\" id=\"Projects\"></select></div>\n\t\t\t\t\n\t\t\t<div class=\"col-6 bold\">Aktivitet:</div>\n\t\t\t<div class=\"col-6\"><select class=\"form-select\" id=\"Activities\"></select></div>\n\n\t\t\t<div class=\"col-6 bold\">Fakturera tid:</div>\n\t\t\t<div class=\"col-6\" id=\"InvoiceTime\"><input type=\"checkbox\" checked /></div>\n\n\t\t\t<div class=\"col-12 bold\">Kommentar:</div>\n\t\t\t<div class=\"col-12\"><textarea id=\"Comment\" class=\"form-control\" ></textarea></div>\n\n\t\t</div>\n\t\t<div role=\"tabpanel\" class=\"tab-pane\" id=\"profile\">\n\n\t\t\t<!-- resa här -->\n\n\t\t</div>\n\t</div>\n\t\n\t\t\t\t\n</div>" | |
language: html | |
style: | |
content: |- | |
body { | |
font-size: normal; | |
font-weight: 100; | |
} | |
section.samples { | |
margin-top: 20px; | |
} | |
section.samples .ms-Button, section.setup .ms-Button { | |
display: block; | |
margin-bottom: 5px; | |
margin-left: 20px; | |
min-width: 80px; | |
} | |
.bold { | |
font-weight: bold; | |
} | |
.header { | |
padding-top: 3px; | |
margin-left: 5px; | |
border-top: 2px solid white; | |
background: #0173C7; | |
color: white; | |
} | |
.note { | |
color: gray; | |
font-size: smaller; | |
} | |
language: css | |
libraries: |- | |
https://appsforoffice.microsoft.com/lib/1/hosted/office.js | |
@types/office-js | |
office-ui-fabric-js@1.4.0/dist/css/fabric.min.css | |
office-ui-fabric-js@1.4.0/dist/css/fabric.components.min.css | |
core-js@2.4.1/client/core.min.js | |
@types/core-js | |
jquery@3.1.1 | |
@types/jquery@3.3.1 | |
bootstrap@3.4.0/dist/css/bootstrap.min.css | |
https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css | |
bootstrap@3.4.0/dist/js/bootstrap.min.js | |
@types/bootstrap@3.4.0/index.d.ts | |
@types/bootstrap@3.4.0/package.json |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment