node.parentElement
node.parentNode
using System; | |
using System.Linq; | |
using System.Collections.Generic; | |
public class Program | |
{ | |
private static string ReplaceMulti(string startString, IEnumerable<(string, string)> replacements) | |
{ | |
if (!replacements.Any()) | |
{ |
const fetchBlob = url => fetch(url) | |
.then(response => response.blob()); | |
const blobToDataURL = blob => new Promise((resolve, reject) => { | |
const reader = new FileReader; | |
reader.onerror = reject; | |
reader.onload = () => { | |
resolve(reader.result); | |
}; | |
reader.readAsDataURL(blob); |
async function getDigest(webUrl) { | |
const r = await fetch(webUrl + '_api/contextinfo', { | |
method: 'POST', | |
headers: { | |
accept: 'application/json', | |
}, | |
}); | |
const j = await r.json(); | |
async function modifyWeb(digest, url, properties) { | |
const body = JSON.stringify({ | |
{ '__metadata': { 'type': 'SP.Web' } }, | |
properties, | |
}); | |
return fetch(`${url}/_api/web`, { | |
method: "POST", | |
body, | |
headers: { |
// (List[A], Number?, Number?) -> [A] | |
var slice = Function.prototype.call.bind(Array.prototype.slice); | |
// (A -> B, B -> C, ..., X -> Y, Y -> Z) -> A -> Z | |
var pipe = function pipe() { | |
if (arguments.length === 0) { throw new Error('at least one argument required'); } | |
var f0 = arguments[0]; | |
var fRem = slice(arguments, 1); |
// (Number, ((x0, .., xn) -> y)) -> (x0 -> .. -> xn -> y) | |
var curryN = (function () { | |
var slice = Function.prototype.call.bind(Array.prototype.slice); | |
var bindArr = function (f, arr) { | |
return f.bind.apply(f, [{}].concat(arr)); | |
}; | |
return function curryN(argCount, func) { | |
return function fn() { | |
var args = slice(arguments); |
var fetchJson = async (url, options) => (await fetch(url, options)).json(); | |
async function getDigest(site) { | |
const resObj = await fetchJson(site + '/_api/contextinfo', { | |
method: 'POST', | |
headers: { | |
Accept: 'application/json' | |
}, | |
credentials: 'include' | |
}); |