Skip to content

Instantly share code, notes, and snippets.

@viceice
Created July 17, 2025 11:09
Show Gist options
  • Select an option

  • Save viceice/88bcc43aed6660a650103ac428271218 to your computer and use it in GitHub Desktop.

Select an option

Save viceice/88bcc43aed6660a650103ac428271218 to your computer and use it in GitHub Desktop.
import { html } from 'common-tags';
import { beforeAll, describe, expect, it } from 'vitest';
import { getFieldValue, getFields } from 'spjs';
// https://github.com/capricorn86/happy-dom/issues/1836
// @vitest-environment jsdom
// ^^^ remove this to test happy-dom
const formTable = html`
<table class="ms-formtable" style="margin-top: 8px;" border="0" cellpadding="0" cellspacing="0" width="100%">
<tbody>
<tr fielddispname="Beschreibung" fieldtype="SPFieldText">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="Title">
<nobr>Beschreibung<span class="ms-accentText" title="Dies ist ein Pflichtfeld."> *</span></nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Beschreibung"
FieldInternalName="Title"
FieldType="SPFieldText"
-->
<span dir="none"
><input
type="text"
value="Kabinettssitzung Nr. 001"
maxlength="255"
id="Title_fa564e0f-0c70-4ab9-b863-0177e6ddd247_$TextField"
title="Beschreibung Pflichtfeld"
style="ime-mode : "
class="ms-long ms-spellcheck-true" /><br
/></span>
</td>
</tr>
<tr fielddispname="Termin" fieldtype="SPFieldDateTime">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="Termin">
<nobr>Termin</nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Termin"
FieldInternalName="Termin"
FieldType="SPFieldDateTime"
-->
<span dir="none"
><table id="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldTopTable" border="0" cellpadding="0" cellspacing="0">
<tbody>
<tr>
<td class="ms-dtinput">
<label for="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDate" style="display:none">Termin Datum</label
><input
type="text"
value="21.06.2021"
maxlength="45"
id="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDate"
title="Termin"
class="ms-input"
autopostback="0"
/>
</td>
<td class="ms-dtinput">
<a
href="#"
onclick="clickDatePicker('Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDate', '/ws/kis/_layouts/15/iframe.aspx?cal=1&amp;lcid=1031&amp;langid=1031&amp;tz=00:59:59.9997740&amp;ww=0111110&amp;fdow=1&amp;fwoy=0&amp;hj=0&amp;swn=false&amp;minjday=109207&amp;maxjday=2666269&amp;date=', '21.06.2021', event); return false;"
><img
id="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDateDatePickerImage"
src="/_layouts/15/images/calendar_25.gif?rev=43"
border="0"
alt="Wählen Sie im Kalender ein Datum aus."
/></a>
</td>
<td></td>
<td class="ms-dttimeinput" nowrap="nowrap">
<label for="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDateHours" class="ms-accessible">Termin Stunden</label
><select id="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDateHours">
<option value="0">00:</option>
<option value="1">01:</option>
<option value="2" selected="selected">02:</option>
<option value="3">03:</option>
<option value="4">04:</option>
<option value="5">05:</option>
<option value="6">06:</option>
<option value="7">07:</option>
<option value="8">08:</option>
<option value="9">09:</option>
<option value="10">10:</option>
<option value="11">11:</option>
<option value="12">12:</option>
<option value="13">13:</option>
<option value="14">14:</option>
<option value="15">15:</option>
<option value="16">16:</option>
<option value="17">17:</option>
<option value="18">18:</option>
<option value="19">19:</option>
<option value="20">20:</option>
<option value="21">21:</option>
<option value="22">22:</option>
<option value="23">23:</option></select
>&nbsp;<label for="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDateMinutes" class="ms-accessible">Termin Minuten</label
><select id="Termin_52638195-bdb7-4c6d-b315-3d5cc20eef58_$DateTimeFieldDateMinutes">
<option value="00" selected="selected">00</option>
<option value="05">05</option>
<option value="10">10</option>
<option value="15">15</option>
<option value="20">20</option>
<option value="25">25</option>
<option value="30">30</option>
<option value="35">35</option>
<option value="40">40</option>
<option value="45">45</option>
<option value="50">50</option>
<option value="55">55</option>
</select>
</td>
</tr>
</tbody>
</table></span
>
</td>
</tr>
<tr fielddispname="Ort" fieldtype="SPFieldNote">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="Ort">
<nobr>Ort</nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Ort"
FieldInternalName="Ort"
FieldType="SPFieldNote"
-->
<span dir="none">
<textarea rows="6" cols="20" id="Ort_32c8ad3e-e016-485f-a45b-04f1b9634d88_$TextField" title="Rich-Text-Editor Ort" class="ms-long">
Dienstgebäude der Landesregierung
Hegelstraße 42
</textarea
><br
/></span>
<span class="ms-metadata">Ort der Sitzung</span>
</td>
</tr>
<tr fielddispname="Sitzung" fieldtype="SPFieldLookup">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="SitzungVorgaenger">
<nobr>Sitzung</nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<div class="vo-main">
<div class="container-fluid">
<div class="row">
<div class="input-group input-group-sm">
<input type="text" class="form-control" readonly="" data-bind="text-input:displayText" required="true" />
<span class="input-group-btn">
<button type="button" class="btn btn-default" data-bind="click:show">
<span class="ms-ellipsis-a">
<img class="ms-ellipsis-icon" src="/_layouts/15/images/spcommon.png" alt="Auswählen" />
</span>
</button>
</span>
</div>
</div>
</div>
</div>
<!-- FieldName="Sitzung"
FieldInternalName="SitzungVorgaenger"
FieldType="SPFieldLookup"
-->
<span dir="none" id="Lookup_Sitzungsvorgaenger" style="display: none;"
><select id="SitzungVorgaenger_7bc415a9-922f-4c9d-baad-18c46a32b878_$LookupField" title="Sitzung">
<option selected="selected" value="0">(Keine)</option>
<option value="3">Kabinettsausschüsse</option>
<option value="7">Kabinettssitzung</option>
<option value="1">Kabinettssitzung intern</option>
<option value="8">Kabinettssitzung Vertraulich</option>
<option value="10">LP I</option>
<option value="11">LP I</option>
<option value="12">LP I</option>
<option value="13">LP I</option>
<option value="14">LP I</option>
<option value="15">LP I</option>
<option value="16">LP I</option>
<option value="17">LP I</option>
<option value="18">LP I</option>
<option value="27">LP II</option>
<option value="28">LP II</option>
<option value="29">LP II</option>
<option value="30">LP II</option>
<option value="31">LP II</option>
<option value="32">LP II</option>
<option value="33">LP II</option>
<option value="34">LP II</option>
<option value="35">LP II</option>
<option value="36">LP III</option>
<option value="37">LP III</option>
<option value="38">LP III</option>
<option value="39">LP III</option>
<option value="40">LP III</option>
<option value="41">LP III</option>
<option value="42">LP III</option>
<option value="43">LP III</option>
<option value="44">LP III</option>
<option value="45">LP IV</option>
<option value="46">LP IV</option>
<option value="47">LP IV</option>
<option value="48">LP IV</option>
<option value="49">LP IV</option>
<option value="50">LP IV</option>
<option value="51">LP IV</option>
<option value="52">LP IV</option>
<option value="53">LP IV</option>
<option value="168">LP IX</option>
<option value="169">LP IX</option>
<option value="170">LP IX</option>
<option value="171">LP IX</option>
<option value="172">LP IX</option>
<option value="173">LP IX</option>
<option value="174">LP IX</option>
<option value="175">LP IX</option>
<option value="176">LP IX</option>
<option value="54">LP V</option>
<option value="55">LP V</option>
<option value="56">LP V</option>
<option value="57">LP V</option>
<option value="58">LP V</option>
<option value="59">LP V</option>
<option value="60">LP V</option>
<option value="61">LP V</option>
<option value="62">LP V</option>
<option value="63">LP VI</option>
<option value="64">LP VI</option>
<option value="65">LP VI</option>
<option value="66">LP VI</option>
<option value="67">LP VI</option>
<option value="68">LP VI</option>
<option value="69">LP VI</option>
<option value="70">LP VI</option>
<option value="71">LP VI</option>
<option value="72">LP VII</option>
<option value="73">LP VII</option>
<option value="74">LP VII</option>
<option value="75">LP VII</option>
<option value="76">LP VII</option>
<option value="77">LP VII</option>
<option value="78">LP VII</option>
<option value="79">LP VII</option>
<option value="80">LP VII</option>
<option value="158">LP VIII</option>
<option value="159">LP VIII</option>
<option value="160">LP VIII</option>
<option value="161">LP VIII</option>
<option value="162">LP VIII</option>
<option value="163">LP VIII</option>
<option value="164">LP VIII</option>
<option value="165">LP VIII</option>
<option value="166">LP VIII</option>
<option value="109">LP X</option>
<option value="110">LP X</option>
<option value="111">LP X</option>
<option value="112">LP X</option>
<option value="113">LP X</option>
<option value="114">LP X</option>
<option value="115">LP X</option>
<option value="116">LP X</option>
<option value="117">LP X</option>
<option value="118">LP XI</option>
<option value="119">LP XI</option>
<option value="120">LP XI</option>
<option value="121">LP XI</option>
<option value="122">LP XI</option>
<option value="123">LP XI</option>
<option value="124">LP XI</option>
<option value="125">LP XI</option>
<option value="126">LP XI</option>
<option value="6">Sonderberatung</option>
<option value="4">Stdg. StS-Ausschuss IT</option>
<option value="2">Strat. Clearingstelle</option>
<option value="9">StS-Konferenz I</option>
<option value="5">StS-Konferenz II</option>
<option value="26">Kabinettsausschüsse Nr. 001</option>
<option value="157">Kabinettsausschüsse Nr. 001</option>
<option value="20">Kabinettssitzung intern Nr. 001</option>
<option value="97">Kabinettssitzung intern Nr. 001</option>
<option value="151">Kabinettssitzung intern Nr. 002</option>
<option value="19">Kabinettssitzung Nr. 001</option>
<option value="167">Kabinettssitzung Nr. 001</option>
<option value="82">Kabinettssitzung Nr. 002</option>
<option value="83">Kabinettssitzung Nr. 003</option>
<option value="84">Kabinettssitzung Nr. 004</option>
<option value="85">Kabinettssitzung Nr. 005</option>
<option value="86">Kabinettssitzung Nr. 006</option>
<option value="88">Kabinettssitzung Nr. 007</option>
<option value="89">Kabinettssitzung Nr. 008</option>
<option value="90">Kabinettssitzung Nr. 009</option>
<option value="91">Kabinettssitzung Nr. 010</option>
<option value="92">Kabinettssitzung Nr. 0111111111111111111111111111111</option>
<option value="93">Kabinettssitzung Nr. 012</option>
<option value="95">Kabinettssitzung Nr. 013</option>
<option value="96">Kabinettssitzung Nr. 014</option>
<option value="102">Kabinettssitzung Nr. 015 KEKSE</option>
<option value="105">Kabinettssitzung Nr. 016</option>
<option value="106">Kabinettssitzung Nr. 017</option>
<option value="107">Kabinettssitzung Nr. 018</option>
<option value="108">Kabinettssitzung Nr. 019</option>
<option value="127">Kabinettssitzung Nr. 020</option>
<option value="129">Kabinettssitzung Nr. 021</option>
<option value="130">Kabinettssitzung Nr. 022</option>
<option value="139">Kabinettssitzung Nr. 023</option>
<option value="140">Kabinettssitzung Nr. 024</option>
<option value="142">Kabinettssitzung Nr. 025</option>
<option value="143">Kabinettssitzung Nr. 026</option>
<option value="144">Kabinettssitzung Nr. 027 Helge</option>
<option value="145">Kabinettssitzung Nr. 028 ### Diese Sitzung ist kaputt ###</option>
<option value="146">Kabinettssitzung Nr. 029</option>
<option value="147">Kabinettssitzung Nr. 030</option>
<option value="150">Kabinettssitzung Nr. 031</option>
<option value="178">Kabinettssitzung Nr. 032 123</option>
<option value="179">Kabinettssitzung Nr. 033</option>
<option value="180">Kabinettssitzung Nr. 034</option>
<option value="81">Kabinettssitzunggggggggggggggggggg Nr. 001</option>
<option value="177">Leitungsstag Nr. 001</option>
<option value="22">Sonderberatung Nr. 001</option>
<option value="100">Sonderberatung Nr. 001</option>
<option value="103">Sonderberatung Nr. 002</option>
<option value="104">Sonderberatung Nr. 003</option>
<option value="153">Sonderberatung Nr. 004</option>
<option value="25">Strat. Clearingstelle Nr. 001</option>
<option value="156">Strat. Clearingstelle Nr. 001</option>
<option value="21">StS-Konferenz I Nr. 001</option>
<option value="87">StS-Konferenz I Nr. 001</option>
<option value="94">StS-Konferenz I Nr. 002 ffffffffffffffffffffff</option>
<option value="98">StS-Konferenz I Nr. 003</option>
<option value="101">StS-Konferenz I Nr. 004 KEKSE</option>
<option value="141">StS-Konferenz I Nr. 005</option>
<option value="148">StS-Konferenz I Nr. 006</option>
<option value="152">StS-Konferenz I Nr. 007</option>
<option value="23">StS-Konferenz II Nr. 001</option>
<option value="99">StS-Konferenz II Nr. 001</option>
<option value="128">StS-Konferenz II Nr. 002</option>
<option value="149">StS-Konferenz II Nr. 003</option>
<option value="154">StS-Konferenz II Nr. 004</option>
<option value="155">StS-Konferenz II Nr. 005</option></select
><br
/></span>
<span class="ms-metadata" id="Lookup_Sitzungsvorgaenger" style="display: none;">Zugehoerige StS-Konferenz I</span>
</td>
</tr>
<tr fielddispname="Überschrift Startseite" fieldtype="SPFieldNote">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="TOUeberschrift1">
<nobr>Überschrift Startseite<span class="ms-accentText" title="Dies ist ein Pflichtfeld."> *</span></nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Überschrift Startseite"
FieldInternalName="TOUeberschrift1"
FieldType="SPFieldNote"
-->
<span dir="none">
<textarea
rows="10"
cols="20"
id="TOUeberschrift1_c0b056c0-f72b-4787-ab17-4d55c578206d_$TextField"
title="Rich-Text-Editor Überschrift Startseite Pflichtfeld"
class="ms-long"
>
Vorläufige Tagesordnung
der [m:Nummer]. Sitzung der Landesregierung
am [m:Termin:DZ] Uhr
im [m:Ort]</textarea
><br
/></span>
</td>
</tr>
<tr fielddispname="Überschrift Folgeseiten" fieldtype="SPFieldNote">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="TOUeberschrift2">
<nobr>Überschrift Folgeseiten</nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Überschrift Folgeseiten"
FieldInternalName="TOUeberschrift2"
FieldType="SPFieldNote"
-->
<span dir="none">
<textarea
rows="10"
cols="20"
id="TOUeberschrift2_b5d24673-31e7-4a3e-8e74-dd16c98d0ad1_$TextField"
title="Rich-Text-Editor Überschrift Folgeseiten"
class="ms-long"
>
TOP [m:Punkt]
Vorläufige Tagesordnung
der [v:Sitzung.Nummer]. Sitzung am [v:Sitzung.Termin:D]</textarea
><br
/></span>
</td>
</tr>
<tr id="idAttachmentsRow" style="display: none;" fielddispname="Anlagen" fieldtype="SPFieldAttachments">
<td nowrap="true" valign="top" width="113px" class="ms-formlabel">
<span class="ms-h3 ms-standardheader" id="Attachments">
<nobr>Anlagen</nobr>
</span>
</td>
<td valign="top" width="350px" class="ms-formbody">
<!-- FieldName="Anlagen"
FieldInternalName="Attachments"
FieldType="SPFieldAttachments"
-->
<table border="0" cellpadding="0" cellspacing="0" id="idAttachmentsTable"></table>
</td>
</tr>
</tbody>
</table>
`;
describe('Scripts/spjs', () => {
beforeAll(() => {
document.body.innerHTML = formTable;
});
it('getfields', () => {
expect(getFields).toBeDefined();
const fields = getFields();
expect(Object.keys(fields)).toEqual(['Title', 'Termin', 'Ort', 'SitzungVorgaenger', 'TOUeberschrift1', 'TOUeberschrift2', 'Attachments']);
});
describe('getFieldValue', () => {
it('works', () => {
expect(getFieldValue).toBeDefined();
const date = getFieldValue<string>('Termin');
expect(date).toBe('21.06.2021 02:00');
});
});
});
/* eslint-disable */
/*********************************
* Created by Alexander Bautz
* alexander.bautz@gmail.com
* http://sharepointjavascript.wordpress.com
* Copyright (c) 2009-2014 Alexander Bautz (Licensed under the MIT X11 License)
**********************************/
import $ from 'jquery';
let fields: Record<string, HTMLElement> = undefined;
export const utility = { version: 1.183, versionDate: 'May 13, 2014' };
export function getFieldValue<T = any>(fin: string, dispform?: boolean, multiValueJoinBy?: string, optionalFilter?: string): T {
// If not already done - init all fields
if (typeof fields === 'undefined') {
fields = init_fields_v2();
}
// Return if FieldInternalName is not found
if (fields[fin] === undefined) {
return null;
}
let thisField: JQuery,
valRaw: string,
fieldType: string | undefined,
getFieldValueReturnVal: any,
multiChoice: string[],
userMulti: string[],
lookupMulti: string[],
link: string | undefined,
descr: string | undefined,
date: string | undefined,
hour: string | undefined,
minutes: string | undefined,
AMPM: string | undefined,
hourRaw: string | undefined,
minutesRaw: string | undefined;
thisField = $(fields[fin]);
if (dispform === true) {
valRaw = $(fields[fin]).find('.ms-formbody').text();
return valRaw.replace(/[ \xA0]+$/, '').trim() as any;
} else {
// If "editform"
fieldType = $(fields[fin]).attr('FieldType');
if (fieldType === undefined) {
alert(
'[getFieldValue]\nThe attribute "FieldType" is missing for the FieldInternalName "' + fin + '".\nEnsure that you use the function init_fields_v2().',
);
return false as any;
}
getFieldValueReturnVal = '';
switch (fieldType) {
case 'ContentTypeChoice':
getFieldValueReturnVal = thisField.find('option:selected').text();
break;
case 'Attachments':
multiChoice = [];
thisField.find('#idAttachmentsTable tr').each(function (i, tr) {
multiChoice.push($(tr).find('td:first').html());
});
getFieldValueReturnVal = multiChoice.join('<br>');
break;
case 'SPFieldText':
case 'SPFieldFile':
case 'SPFieldNumber':
case 'SPFieldCurrency':
getFieldValueReturnVal = thisField.find('input').val();
break;
case 'SPFieldChoice':
if (thisField.find('input:radio').length > 0 && thisField.find('select').length === 0 && thisField.find('input:text').length === 0) {
getFieldValueReturnVal = thisField.find('input:radio:checked').next().text();
} else if (thisField.find('input:radio').length > 0 && thisField.find('input:text').length > 0) {
// Fill-in
if (thisField.find('select').length > 0) {
if (thisField.find('input:radio:last').prop('checked')) {
getFieldValueReturnVal = $.trim(thisField.find('input:text').val() as string);
} else {
getFieldValueReturnVal = thisField.find('select').val();
}
} else {
if (thisField.find('input:radio:last').prop('checked')) {
getFieldValueReturnVal = $.trim(thisField.find('input:text').val() as string);
} else {
getFieldValueReturnVal = thisField.find('input:radio:checked').next().text();
}
}
} else {
getFieldValueReturnVal = thisField.find('select').val();
}
break;
case 'SPFieldMultiChoice':
multiChoice = [];
thisField.find('input:checkbox').each(function (i, opt) {
if ($(opt).prop('checked')) {
const $opt = $(opt);
if (thisField.find('input:text').length === 0) {
// No fill-in
multiChoice.push($opt.next().text());
} else {
// Fill-in
if (i + 1 === thisField.find('input:checkbox').length) {
multiChoice.push(thisField.find('input:text').val() as string);
} else {
multiChoice.push($opt.next().text());
}
}
}
});
if (multiValueJoinBy !== undefined && multiValueJoinBy !== '') {
getFieldValueReturnVal = multiChoice.join(multiValueJoinBy);
} else {
getFieldValueReturnVal = multiChoice;
}
break;
case 'SPFieldUser':
case 'SPFieldUserMulti':
userMulti = [];
if (typeof SPClientPeoplePicker !== 'undefined') {
$.each(
(SPClientPeoplePicker.SPClientPeoplePickerDict[thisField.find('div.sp-peoplepicker-topLevel').attr('id')] as any).GetControlValueAsJSObject(),
function (i, o) {
if (optionalFilter === 'displayName' || optionalFilter === undefined) {
userMulti.push(o.DisplayText);
} else if (optionalFilter === 'loginName') {
userMulti.push(o.Key);
}
},
);
} else {
userMulti.push(
'[' +
fin +
']: The people picker is not ready!\n\nYou must delay the function call like this:\n' +
'ExecuteOrDelayUntilScriptLoaded(function(){/*Your code here*/},"sp.ribbon.js");',
);
}
if (multiValueJoinBy !== undefined && multiValueJoinBy !== '') {
getFieldValueReturnVal = userMulti.join(multiValueJoinBy);
} else {
getFieldValueReturnVal = userMulti;
}
break;
case 'SPFieldLookup':
if (thisField.find('select option:selected').val() !== '0') {
getFieldValueReturnVal = thisField.find('select option:selected').text();
} else {
getFieldValueReturnVal = '';
}
break;
case 'SPFieldLookup_Input':
getFieldValueReturnVal = thisField.find('input').val();
break;
case 'SPFieldLookupMulti':
lookupMulti = [];
thisField.find('select:last option').each(function (i, opt) {
const $opt = $(opt);
lookupMulti.push($opt.text());
});
if (multiValueJoinBy !== undefined && multiValueJoinBy !== '') {
getFieldValueReturnVal = lookupMulti.join(multiValueJoinBy);
} else {
getFieldValueReturnVal = lookupMulti;
}
break;
case 'SPFieldBoolean':
getFieldValueReturnVal = thisField.find('input').prop('checked') === true ? true : false;
break;
case 'SPFieldURL':
link = thisField.find('input:first').val() as string | undefined;
descr = thisField.find('input:last').val() as string | undefined;
getFieldValueReturnVal = '<a href="' + link + '">' + descr + '</a>';
break;
case 'SPFieldDateTime':
date = thisField.find('input:first').val() as string;
hour = '';
minutes = '';
AMPM = '';
if (date !== '') {
hourRaw = thisField.find('select:first option:selected').val() as string | undefined;
hour = hourRaw == null ? '' : ` ${hourRaw.match(/^\d+/)}:`;
AMPM = !hourRaw?.match(/AM|PM/) ? '' : ` ${hourRaw.match(/AM|PM/)}`;
minutesRaw = thisField.find('select:last option:selected').val() as string | undefined;
minutes = minutesRaw == null ? '' : minutesRaw;
if (!AMPM && hour.length === 3) {
hour = ` 0${hourRaw.match(/^\d+/)}:`;
}
}
getFieldValueReturnVal = date + hour + minutes + AMPM;
break;
case 'SPFieldNote':
getFieldValueReturnVal = thisField.find('textarea:first').val();
break;
case 'SPFieldNote_HTML':
if (browseris.ie5up && browseris.win32 && !IsAccessibilityFeatureEnabled()) {
if (thisField.find('iframe[class^="ms-rtelong"]').contents().find('body').html() !== '') {
getFieldValueReturnVal = thisField.find('iframe[class^="ms-rtelong"]').contents().find('body').html();
} else {
getFieldValueReturnVal = thisField.find('textarea:first').val();
}
} else {
getFieldValueReturnVal = thisField.find('textarea:first').val();
}
break;
case 'SPFieldNote_EHTML':
getFieldValueReturnVal = thisField.find('div[id$="TextField_inplacerte"]').html();
break;
case 'customHeading':
getFieldValueReturnVal = '';
break;
case 'SPFieldTaxonomyFieldType':
case 'SPFieldTaxonomyFieldTypeMulti':
getFieldValueReturnVal = [];
const t = new Microsoft.SharePoint.Taxonomy.ControlObject(thisField.find('div.ms-taxonomy')[0]);
$.each(t.getRawText().split(';'), function (i, v) {
getFieldValueReturnVal.push(v.split('|')[0]);
});
getFieldValueReturnVal = getFieldValueReturnVal.join(multiValueJoinBy !== undefined ? multiValueJoinBy : ', ');
break;
default:
getFieldValueReturnVal = 'Unknown fieldType: ' + fieldType;
}
return getFieldValueReturnVal;
}
}
function init_fields_v2() {
const res: Record<string, HTMLElement> = {};
$('td.ms-formbody').each(function () {
const myMatch = $(this)
.html()
.match(/FieldName="(.+)"\s+FieldInternalName="(.+)"\s+FieldType="(.+)"\s+/);
if (myMatch != null) {
// Display name
const disp = myMatch[1];
// FieldInternalName
const fin = myMatch[2];
// FieldType
let type = myMatch[3];
if (type === 'SPFieldNote') {
if ($(this).find('script').length > 0) {
type = type + '_HTML';
} else if ($(this).find('div[id$="TextField_inplacerte"]').length > 0) {
type = type + '_EHTML';
}
}
if (type === 'SPFieldLookup') {
if ($(this).find('input').length > 0) {
type = type + '_Input';
}
}
// HTML Calc
if (
type === 'SPFieldCalculated' &&
$(this)
.text()
.match(/(<([^>]+)>)/gi) !== null
) {
$(this).html($(this).text());
}
// Build object
res[fin] = this.parentNode as HTMLElement;
$(res[fin]).attr('FieldDispName', disp);
$(res[fin]).attr('FieldType', type);
}
});
return res;
}
export function getField(fin: string): HTMLElement {
if (!fields) fields = init_fields_v2();
return fields[fin];
}
export function getFields(): Record<string, HTMLElement> {
if (!fields) fields = init_fields_v2();
return fields;
}
const spjs = {
getField,
getFieldValue,
getFields,
utility,
};
export default spjs;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment