Methods
(
source code)
Permits to cut an array into smaller blocks
Parameters:
Array
b
The array to split
Number
e
The size of each block
Returns:
Array
An array that contains several arrays with the required size
(
source code)
Permits to do an Ajax request based on https://github.com/yanatan16/nanoajax for Browsers, and https://github.com/s-KaiNet/sp-request for NodeKJ
Parameters:
Object
settings
(See options below)
String
settings.url
The url to call
String
settings.method Optional, Default: "GET"|"POST"
The HTTP Method ("GET" or "POST" if "body" is provided)
Object
settings.headers Optional
the headers
String
settings.body Optional
The data to send to the server
Function
settings.onprogress Optional, Default: function(event){}
Show the download/upload progress (within browser only)
Function
settings.getXHR Optional, Default: function(xhr){}
Pass the XMLHttpRequest object as a parameter (within browser only)
Returns:
Promise
resolve(responseText||responseXML), reject({response, statusCode, responseText})
Example:
// for a regular request
$SP().ajax({url:'https://my.web.site'}).then(function(data) { console.log(data) })
// if the URL contains /_api/ and if "Accept", "Content-Type" or "X-RequestDigest", then they are auto-defined
// (in browser) manipulate xhr for specific needs, like reading a remote file (based on https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data)
$SP().ajax({url:'https://url.com/file.png', getXHR:function(xhr){ xhr.responseType = 'arraybuffer' }}).then(function(data) {
// ArrayBuffer result
var blob = new Blob([data], {type: "image/png"});
fileReader.readAsArrayBuffer(blob);
})
// (in browser) show progress on download, and cancel the download after 5 seconds
var _xhr;
$SP().ajax({
url:'https://server/files/video.mp4',
getXHR:function(xhr) {
_xhr = xhr;
xhr.responseType = 'arraybuffer'
},
onprogress:function(event) {
console.log(event.loaded+" / "+event.total)
}
});
setTimeout(function() { _xhr.abort() }, 5000); // abort after 5 seconds
// (in Node) to get the Buffer from a remote file we could use `encoding:null` from https://github.com/request/request
sp.ajax({url:'https://my.web.site/lib/file.pdf', encoding:null}).then(data => {
// 'data' is a Buffer
})
// for a CORS/cross-domain request you may need to use 'false' for 'Content-Type'
$SP().ajax({url:'https://my.cross-domain.web/site', headers:{"Content-Type":false}}).then(function(data) { console.log(data) })
(
source code)
Split the ID and Value
Parameters:
String
str
The string to split
Returns:
Object
.id returns the ID (or an array of IDs), and .value returns the value (or an array of values)
Example:
$SP().getLookup("328;#Foo"); // --> {id:"328", value:"Foo"}
$SP().getLookup("328;#Foo;#191;#Other Value"); // --> {id:["328", "191"], value:["Foo", "Other Value"]}
$SP().getLookup("328"); // --> {id:"328", value:"328"}
(
source code)
When returning a people field from a list using 'expandUserField' to true, then this utility function will split into more friendly pieces
Parameters:
String
str
The string to split
Returns:
Object|Array
An object (or array of objects) with 'id', 'name', 'username', 'email'
Example:
$SP().getPeopleLookup("42;#Doe,, John,#i:0#.w|domain\John_Doe,#John_Doe@Domain.com,#John_Doe@Domain.com,#Doe,, John"); // --> {id:"42", name:"Doe, John", username:'i:0#.w|domain\John_Doe', email:'John_Doe@Domain.com'}
$SP().getPeopleLookup("42;#Doe,, John,#i:0#.w|domain\John_Doe,#John_Doe@Domain.com,#John_Doe@Domain.com,#Doe,, John;#1981;#Doe,, Jane,#i:0#.w|domain\Jane_Doe,#Jane_Doe@Domain.com,#Jane_Doe@Domain.com,#Doe,, Jane"); // --> [ {id:"42", name:"Doe, John", username:'i:0#.w|domain\John_Doe', email:'John_Doe@Domain.com'}, {id:"1981", name:"Doe, Jane", username:'i:0#.w|domain\Jane_Doe', email:'Jane_Doe@Domain.com'} ]
(
source code)
getRequestDigest(settings)
Retrieve a Request Digest (and it will change the value of document.querySelector("#__REQUESTDIGEST") when a new Request Digest is created)
Parameters:
String
settings.url Optional, Default: current
To check another URL (or if you use it on a Node server)
Boolean
settings.cache Optional, Default: true
TRUE to use the cache and/or the one into the page for the digest, FALSE to get a new one
Returns:
Promise
resolve(Request Digest), reject(reject from $SP().ajax())
Example:
$SP().getRequestDigest({cache:false}).then(function(digest) { console.log("The new digest is "+digest)})
(
source code)
getTimeZoneInfo(settings)
Permits to retrieve the TimeZone informations (ID, Description, XMLTZone) based on the server's timezone
Parameters:
String
settings.url Optional, Default: "current website"
Returns:
Object
resolve({ID, Description, XMLTZone}), reject(error)
(
source code)
Return the current base URL website
Returns:
Promise
resolve(The current base URL website), reject(error)
(
source code)
Verify if the website supports REST API (Sharepoint 2013 and later)
Parameters:
String
settings.url Optional, Default: current
To check another URL (or if you need on a Node server)
Returns:
Promise
A resolved Promise that gives TRUE or FALSE
(
source code)
Create an unique GUID (based on Sharepoint function called SP.Guid.newGuid())
(
source code)
Provide the Date Format based on the user regional settings (YYYY for 4-digits Year, YY for 2-digits day, MM for 2-digits Month, M for 1-digit Month, DD for 2-digits day, D for 1-digit day) -- it's using the DatePicker iFrame (so an AJAX request)
Returns:
Promise
resolve(dateFormat), reject(error)
Example:
// you'll typically need that info when parsing a date from a Date Picker field from a form
// we suppose here you're using momentjs
// eg. we want to verify start date is before end date
var startDate = $SP().formfields("Start Date").val();
var endDate = $SP().formfields("End Date").val();
$SP().regionalDateFormat().then(function(dateFormat) {
// if the user settings are on French, then dateFormat = "DD/MM/YYYY"
if (moment(startDate, dateFormat).isAfter(moment(endDate, dateFormat))) {
alert("StartDate must be before EndDate!")
}
})
// Here is also an example of how you can parse a string date
// -> https://gist.github.com/Aymkdn/b17903cf7786578300f04f50460ebe96
(
source code)
Find the region settings (of the current user) defined with _layouts/regionalsetng.aspx?Type=User (lcid, cultureInfo, timeZone, calendar, alternateCalendar, workWeek, timeFormat..)
Returns:
Promise
resolve({lcid, cultureInfo, timeZone, calendar, alternateCalendar, workWeek:{days, firstDayOfWeek, firstWeekOfYear, startTime, endTime}}), reject(error)
Example:
$SP().regionalSettings().then(function(region) {
// show the selected timezone, and the working days
console.log("timeZone: "+region.timeZone);
console.log("working days: "+region.workWeek.days.join(", "))
}, function(error) {
console.log(error)
})
(
source code)
toDate(textDate, forceUTC)
Change a Sharepoint date (as a string) to a Date Object
Parameters:
String
textDate
the Sharepoint date string
Boolean
forceUTC Optional, Default: false
Permits to force the reading of the date in UTC
Returns:
Date
the equivalent Date object for the Sharepoint date string passed
Example:
$SP().toDate("2012-10-31T00:00:00").getFullYear(); // 2012
(
source code)
toSPDate(dateObject, includeTime)
Change a Date object into a Sharepoint date string
Parameters:
Date
dateObject
The Date object you want to convert
Date
includeTime Optional, Default: false
By default the time is not returned (if the time appears then the WHERE clause will do a time comparison)
Returns:
String
the equivalent string for the Date object passed
Example:
$SP().toSPDate(new Date(2012,9,31), true); // --> "2012-10-31T00:00:00Z"
$SP().toSPDate(new Date(2012,9,31)); // --> "2012-10-31"
(
source code)
Change a string into a XSL format string
Parameters:
String
text
The string to change
Returns:
String
the XSL version of the string passed
Example:
$SP().toXSLString("Big Title"); // --> "Big_x0020_Title"
(
source code)
workflowStatusToText(code)
Return the text related to a workflow status code
Parameters:
String|Number
code
This is the code returned by a workflow
Example:
$SP().workflowStatusToText(2); // -> "In Progress"