Created
July 17, 2025 11:09
-
-
Save viceice/88bcc43aed6660a650103ac428271218 to your computer and use it in GitHub Desktop.
happy-dom issue https://github.com/capricorn86/happy-dom/issues/1836
This file contains hidden or 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
| 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&lcid=1031&langid=1031&tz=00:59:59.9997740&ww=0111110&fdow=1&fwoy=0&hj=0&swn=false&minjday=109207&maxjday=2666269&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 | |
| > <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'); | |
| }); | |
| }); | |
| }); |
This file contains hidden or 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
| /* 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