@hmcts/ccd-case-ui-toolkit 7.3.99-innerhtml-security-update → 7.3.99
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, Injectable, DOCUMENT, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, Injector, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
2
|
+
import { Component, Input, EventEmitter, Output, NgModule, ViewEncapsulation, forwardRef, Pipe, ContentChildren, ViewChildren, Injectable, DOCUMENT, Inject, InjectionToken, Optional, ChangeDetectorRef, Directive, ViewChild, ChangeDetectionStrategy, SecurityContext, Injector, ViewContainerRef, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
|
|
3
3
|
import * as i5 from '@angular/common';
|
|
4
4
|
import { CommonModule, AsyncPipe, CurrencyPipe, formatDate } from '@angular/common';
|
|
5
5
|
import * as i1 from 'rpx-xui-translation';
|
|
@@ -31,7 +31,7 @@ import { MAT_LEGACY_DATE_LOCALE } from '@angular/material/legacy-core';
|
|
|
31
31
|
import * as i3 from '@hmcts/ccpay-web-component';
|
|
32
32
|
import { PaymentLibModule } from '@hmcts/ccpay-web-component';
|
|
33
33
|
import { v4 } from 'uuid';
|
|
34
|
-
import
|
|
34
|
+
import * as i1$5 from '@angular/platform-browser';
|
|
35
35
|
import * as i3$1 from 'ngx-editor';
|
|
36
36
|
import { Editor, NgxEditorModule } from 'ngx-editor';
|
|
37
37
|
import { nodes, marks } from 'ngx-editor/schema';
|
|
@@ -6308,7 +6308,7 @@ class FormValidatorsService {
|
|
|
6308
6308
|
// Matches: [text](url), , <img ...>, <a ...>...</a>
|
|
6309
6309
|
const inlineMarkdownPattern = /(?:!?\[[^\]]{0,500}\]\([^)]{0,500}\)|<(?:img\b[^>]{0,500}>|a\b[^>]{0,500}>[\s\S]*?<\/a>))/i;
|
|
6310
6310
|
// Matches: [text][id], ![alt][id], and the collapsed form [text][]
|
|
6311
|
-
const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\
|
|
6311
|
+
const referenceBoxPattern = /(!)?\[((?:[^[\]\\]|\\.){0,500})\]\[([^\]]{0,100})\](?!\s*\/)/;
|
|
6312
6312
|
// Matches: autolinks such as <http://example.com>
|
|
6313
6313
|
const autolinkPattern = /<(?:[A-Za-z][A-Za-z0-9+.-]*:[^ <>\n]*|[A-Za-z0-9.!#$%&'*+/=?^_`{|}~-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+)>/;
|
|
6314
6314
|
// Matches: bare www.example.com autolinks
|
|
@@ -26378,8 +26378,10 @@ function sanitiseRichTextHtml(value) {
|
|
|
26378
26378
|
}
|
|
26379
26379
|
|
|
26380
26380
|
class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
|
|
26381
|
-
|
|
26381
|
+
sanitizer;
|
|
26382
|
+
constructor(sanitizer) {
|
|
26382
26383
|
super();
|
|
26384
|
+
this.sanitizer = sanitizer;
|
|
26383
26385
|
}
|
|
26384
26386
|
sanitisedValue() {
|
|
26385
26387
|
const supportedHtml = sanitiseRichTextHtml(this.caseField.value || '');
|
|
@@ -26390,12 +26392,9 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
|
|
|
26390
26392
|
delete element.dataset.indent;
|
|
26391
26393
|
element.classList.add(`ccd-rich-text-indent-${indent}`);
|
|
26392
26394
|
});
|
|
26393
|
-
return
|
|
26394
|
-
ALLOWED_ATTR: ['align', 'class', 'start', 'type'],
|
|
26395
|
-
ALLOWED_TAGS: ['b', 'blockquote', 'br', 'em', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'li', 'ol', 'p', 'strong', 'u', 'ul']
|
|
26396
|
-
});
|
|
26395
|
+
return this.sanitizer.sanitize(SecurityContext.HTML, documentElement.body.innerHTML) || '';
|
|
26397
26396
|
}
|
|
26398
|
-
static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(); };
|
|
26397
|
+
static ɵfac = function ReadRichTextAreaFieldComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ReadRichTextAreaFieldComponent)(i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
|
|
26399
26398
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadRichTextAreaFieldComponent, selectors: [["ccd-read-rich-text-area-field"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 1, vars: 1, consts: [[1, "ccd-rich-text-area-read", 3, "innerHTML"]], template: function ReadRichTextAreaFieldComponent_Template(rf, ctx) { if (rf & 1) {
|
|
26400
26399
|
i0.ɵɵelement(0, "div", 0);
|
|
26401
26400
|
} if (rf & 2) {
|
|
@@ -26404,8 +26403,8 @@ class ReadRichTextAreaFieldComponent extends AbstractFieldReadComponent {
|
|
|
26404
26403
|
}
|
|
26405
26404
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadRichTextAreaFieldComponent, [{
|
|
26406
26405
|
type: Component,
|
|
26407
|
-
args: [{ selector: 'ccd-read-rich-text-area-field', template:
|
|
26408
|
-
}], () => [], null); })();
|
|
26406
|
+
args: [{ selector: 'ccd-read-rich-text-area-field', template: `<div class="ccd-rich-text-area-read" [innerHTML]="sanitisedValue()"></div>`, encapsulation: ViewEncapsulation.None, standalone: false, styles: ["@charset \"UTF-8\";.ccd-rich-text-area-read{font-size:14px;overflow-wrap:anywhere;white-space:pre-wrap;word-break:normal}.ccd-rich-text-area-read strong,.ccd-rich-text-area-read strong *,.ccd-rich-text-area-read b,.ccd-rich-text-area-read b *{font-weight:700}.ccd-rich-text-area-read strong u,.ccd-rich-text-area-read u strong,.ccd-rich-text-area-read b u,.ccd-rich-text-area-read u b{font-weight:700!important;text-decoration:underline}.ccd-rich-text-area-read p,.ccd-rich-text-area-read ul,.ccd-rich-text-area-read ol,.ccd-rich-text-area-read li{font-size:14px;margin-top:0;overflow-wrap:anywhere;word-break:normal}.ccd-rich-text-area-read p:empty:before{content:\"\\a0\"}.ccd-rich-text-area-read ul{list-style:disc outside;padding-left:25px}.ccd-rich-text-area-read ol{list-style:decimal outside;padding-left:25px}.ccd-rich-text-area-read ol[type=a]{list-style-type:lower-alpha}.ccd-rich-text-area-read ol[type=i]{list-style-type:lower-roman}.ccd-rich-text-area-read ol[type=i]>li::marker{content:\"(\" counter(list-item,lower-roman) \") \"}.ccd-rich-text-area-read li{display:list-item;margin-bottom:5px}.ccd-rich-text-area-read li>p{margin:0}.ccd-rich-text-area-read li>ul,.ccd-rich-text-area-read li>ol{margin-top:5px}.ccd-rich-text-area-read h1{font-size:20px;font-weight:700}.ccd-rich-text-area-read h2{font-size:18px;font-weight:700}.ccd-rich-text-area-read h3{font-size:16px;font-weight:700}.ccd-rich-text-area-read .ccd-rich-text-indent-1{margin-left:40px}.ccd-rich-text-area-read .ccd-rich-text-indent-2{margin-left:80px}.ccd-rich-text-area-read .ccd-rich-text-indent-3{margin-left:120px}.ccd-rich-text-area-read .ccd-rich-text-indent-4{margin-left:160px}.ccd-rich-text-area-read .ccd-rich-text-indent-5{margin-left:200px}.ccd-rich-text-area-read .ccd-rich-text-indent-6{margin-left:240px}\n"] }]
|
|
26407
|
+
}], () => [{ type: i1$5.DomSanitizer }], null); })();
|
|
26409
26408
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadRichTextAreaFieldComponent, { className: "ReadRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/read-rich-text-area-field.component.ts", lineNumber: 13 }); })();
|
|
26410
26409
|
|
|
26411
26410
|
const _c0$D = ["editorHost"];
|
|
@@ -26579,6 +26578,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
26579
26578
|
},
|
|
26580
26579
|
plugins: [
|
|
26581
26580
|
new Plugin({
|
|
26581
|
+
appendTransaction: (transactions, oldState, newState) => this.renumberContinuedOrderedLists(transactions, oldState, newState),
|
|
26582
26582
|
props: {
|
|
26583
26583
|
handlePaste: (_view, event) => this.handleEditorPaste(event),
|
|
26584
26584
|
handleDOMEvents: {
|
|
@@ -27062,6 +27062,71 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
27062
27062
|
? candidateOrder === adjacentOrder + adjacentList.childCount
|
|
27063
27063
|
: candidateOrder + candidateList.childCount === adjacentOrder;
|
|
27064
27064
|
}
|
|
27065
|
+
renumberContinuedOrderedLists(transactions, oldState, newState) {
|
|
27066
|
+
if (!transactions.some((transaction) => transaction.docChanged)) {
|
|
27067
|
+
return null;
|
|
27068
|
+
}
|
|
27069
|
+
const oldChildren = [];
|
|
27070
|
+
let oldPosition = 0;
|
|
27071
|
+
oldState.doc.forEach((node) => {
|
|
27072
|
+
oldChildren.push({ node, position: oldPosition });
|
|
27073
|
+
oldPosition += node.nodeSize;
|
|
27074
|
+
});
|
|
27075
|
+
const mapPosition = (position) => transactions.reduce((mappedPosition, transaction) => transaction.mapping.map(mappedPosition, 1), position);
|
|
27076
|
+
const effectiveOrders = new Map();
|
|
27077
|
+
let result = null;
|
|
27078
|
+
oldChildren.forEach(({ node: candidate, position: candidatePosition }, candidateIndex) => {
|
|
27079
|
+
if (candidate.type.name !== 'ordered_list') {
|
|
27080
|
+
return;
|
|
27081
|
+
}
|
|
27082
|
+
let previousIndex = candidateIndex - 1;
|
|
27083
|
+
while (previousIndex >= 0 &&
|
|
27084
|
+
this.isOrderedListContinuationSeparator(oldChildren[previousIndex].node, candidate)) {
|
|
27085
|
+
previousIndex--;
|
|
27086
|
+
}
|
|
27087
|
+
if (previousIndex < 0) {
|
|
27088
|
+
return;
|
|
27089
|
+
}
|
|
27090
|
+
const previous = oldChildren[previousIndex].node;
|
|
27091
|
+
const previousPosition = oldChildren[previousIndex].position;
|
|
27092
|
+
if (previous.type.name !== 'ordered_list' ||
|
|
27093
|
+
!this.hasMatchingListType(candidate, previous) ||
|
|
27094
|
+
candidate.attrs.indent !== previous.attrs.indent ||
|
|
27095
|
+
!this.isSequentialList(candidate, previous, 1)) {
|
|
27096
|
+
return;
|
|
27097
|
+
}
|
|
27098
|
+
const mappedPreviousPosition = mapPosition(previousPosition);
|
|
27099
|
+
const mappedCandidatePosition = mapPosition(candidatePosition);
|
|
27100
|
+
const newPrevious = newState.doc.nodeAt(mappedPreviousPosition);
|
|
27101
|
+
const newCandidate = newState.doc.nodeAt(mappedCandidatePosition);
|
|
27102
|
+
if (!newPrevious || !newCandidate ||
|
|
27103
|
+
newPrevious.type.name !== 'ordered_list' || newCandidate.type.name !== 'ordered_list' ||
|
|
27104
|
+
newPrevious.firstChild?.textContent !== previous.firstChild?.textContent ||
|
|
27105
|
+
newCandidate.firstChild?.textContent !== candidate.firstChild?.textContent ||
|
|
27106
|
+
!this.hasMatchingListType(newCandidate, newPrevious) ||
|
|
27107
|
+
newCandidate.attrs.indent !== newPrevious.attrs.indent) {
|
|
27108
|
+
return;
|
|
27109
|
+
}
|
|
27110
|
+
const previousOrder = effectiveOrders.get(previousPosition) ?? (Number(newPrevious.attrs.order) || 1);
|
|
27111
|
+
const expectedOrder = previousOrder + newPrevious.childCount;
|
|
27112
|
+
effectiveOrders.set(candidatePosition, expectedOrder);
|
|
27113
|
+
if (Number(newCandidate.attrs.order) === expectedOrder) {
|
|
27114
|
+
return;
|
|
27115
|
+
}
|
|
27116
|
+
result = (result || newState.tr).setNodeMarkup(mappedCandidatePosition, newCandidate.type, {
|
|
27117
|
+
...newCandidate.attrs,
|
|
27118
|
+
order: expectedOrder
|
|
27119
|
+
});
|
|
27120
|
+
});
|
|
27121
|
+
return result;
|
|
27122
|
+
}
|
|
27123
|
+
isOrderedListContinuationSeparator(node, candidate) {
|
|
27124
|
+
if (this.isEmptyParagraph(node) || this.isListSectionHeading(node)) {
|
|
27125
|
+
return true;
|
|
27126
|
+
}
|
|
27127
|
+
return this.isList(node) &&
|
|
27128
|
+
(Number(node.attrs.indent) || 0) > (Number(candidate.attrs.indent) || 0);
|
|
27129
|
+
}
|
|
27065
27130
|
hasListContinuation(list) {
|
|
27066
27131
|
return list.type.name === 'ordered_list' || Boolean(list.attrs.continuationOrder);
|
|
27067
27132
|
}
|
|
@@ -27327,7 +27392,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
27327
27392
|
this.removeUnsupportedMarkup(documentElement);
|
|
27328
27393
|
this.normaliseDateRangeSpacing(documentElement);
|
|
27329
27394
|
this.removeUnsupportedAttributes(documentElement);
|
|
27330
|
-
|
|
27395
|
+
const sanitisedValue = sanitiseRichTextDocument(documentElement);
|
|
27396
|
+
return this.hasMeaningfulRichTextContent(documentElement)
|
|
27397
|
+
? this.normalisePlainTextValue(sanitisedValue)
|
|
27398
|
+
: '';
|
|
27331
27399
|
}
|
|
27332
27400
|
normaliseRichTextValue(value) {
|
|
27333
27401
|
if (!value) {
|
|
@@ -27345,7 +27413,15 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
27345
27413
|
this.removeUnsupportedMarkup(documentElement);
|
|
27346
27414
|
this.normaliseDateRangeSpacing(documentElement);
|
|
27347
27415
|
this.removeUnsupportedAttributes(documentElement);
|
|
27348
|
-
|
|
27416
|
+
const sanitisedValue = sanitiseRichTextDocument(documentElement);
|
|
27417
|
+
return this.hasMeaningfulRichTextContent(documentElement)
|
|
27418
|
+
? this.normalisePlainTextValue(sanitisedValue)
|
|
27419
|
+
: '';
|
|
27420
|
+
}
|
|
27421
|
+
hasMeaningfulRichTextContent(documentElement) {
|
|
27422
|
+
const visibleText = (documentElement.body.textContent || '')
|
|
27423
|
+
.replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
|
|
27424
|
+
return visibleText.length > 0 || Boolean(documentElement.body.querySelector('hr'));
|
|
27349
27425
|
}
|
|
27350
27426
|
syncAccessibilityLater() {
|
|
27351
27427
|
setTimeout(() => this.syncAccessibilityState());
|
|
@@ -27458,13 +27534,31 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
27458
27534
|
}
|
|
27459
27535
|
this.isNormalisingValue = true;
|
|
27460
27536
|
try {
|
|
27461
|
-
this.richTextAreaControl.setValue(normalisedValue, {
|
|
27462
|
-
|
|
27537
|
+
this.richTextAreaControl.setValue(normalisedValue, {
|
|
27538
|
+
emitEvent: false,
|
|
27539
|
+
emitModelToViewChange: false
|
|
27540
|
+
});
|
|
27541
|
+
if (normalisedValue || this.editorHasMeaningfulRichTextContent()) {
|
|
27542
|
+
this.editor.setContent(normalisedValue || '');
|
|
27543
|
+
}
|
|
27463
27544
|
}
|
|
27464
27545
|
finally {
|
|
27465
27546
|
this.isNormalisingValue = false;
|
|
27466
27547
|
}
|
|
27467
27548
|
}
|
|
27549
|
+
editorHasMeaningfulRichTextContent() {
|
|
27550
|
+
const documentNode = this.editor.view.state.doc;
|
|
27551
|
+
const visibleText = documentNode.textContent.replace(/[\s\u00a0\u200b-\u200d\ufeff]/g, '');
|
|
27552
|
+
let hasHorizontalRule = false;
|
|
27553
|
+
documentNode.descendants((node) => {
|
|
27554
|
+
if (node.type.name === 'horizontal_rule') {
|
|
27555
|
+
hasHorizontalRule = true;
|
|
27556
|
+
return false;
|
|
27557
|
+
}
|
|
27558
|
+
return !hasHorizontalRule;
|
|
27559
|
+
});
|
|
27560
|
+
return visibleText.length > 0 || hasHorizontalRule;
|
|
27561
|
+
}
|
|
27468
27562
|
richTextRequiredValidator() {
|
|
27469
27563
|
return (control) => {
|
|
27470
27564
|
const textValue = this.htmlToText(control.value);
|
|
@@ -27478,8 +27572,9 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
27478
27572
|
};
|
|
27479
27573
|
}
|
|
27480
27574
|
htmlToText(value) {
|
|
27481
|
-
const
|
|
27482
|
-
|
|
27575
|
+
const container = document.createElement('div');
|
|
27576
|
+
container.innerHTML = value || '';
|
|
27577
|
+
return (container.textContent || '').replaceAll('\u00a0', ' ').trim();
|
|
27483
27578
|
}
|
|
27484
27579
|
isWordHtml(html) {
|
|
27485
27580
|
return /(class="?Mso|mso-|urn:schemas-microsoft-com:office:word|xmlns:o)/i.test(html);
|
|
@@ -28114,7 +28209,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28114
28209
|
}
|
|
28115
28210
|
return value
|
|
28116
28211
|
.replace(/!?\[([^\]]{0,500})\]\(([^)]{0,500})\)/g, (_match, text, url) => text || url)
|
|
28117
|
-
.replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\
|
|
28212
|
+
.replace(/!?\[((?:[^[\]\\]|\\.){0,500})\]\[[^\]]{0,100}\](?!\s*\/)/g, '$1');
|
|
28118
28213
|
}
|
|
28119
28214
|
unwrapElement(element) {
|
|
28120
28215
|
const parentNode = element.parentNode;
|
|
@@ -28133,6 +28228,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28133
28228
|
const state = {
|
|
28134
28229
|
listStack: [],
|
|
28135
28230
|
listParents: [],
|
|
28231
|
+
listRunDeclaredLevel: null,
|
|
28232
|
+
listRunVisualLevel: null,
|
|
28136
28233
|
resetListLevels: new Map(),
|
|
28137
28234
|
previousListId: null
|
|
28138
28235
|
};
|
|
@@ -28161,12 +28258,19 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28161
28258
|
resetWordListConversionState(state) {
|
|
28162
28259
|
state.listStack.length = 0;
|
|
28163
28260
|
state.listParents.length = 0;
|
|
28261
|
+
state.listRunDeclaredLevel = null;
|
|
28262
|
+
state.listRunVisualLevel = null;
|
|
28164
28263
|
state.resetListLevels.clear();
|
|
28165
28264
|
state.previousListId = null;
|
|
28166
28265
|
}
|
|
28167
28266
|
wordListRequestedLevel(paragraph, listId, wordListIndents, state) {
|
|
28168
28267
|
const declaredLevel = this.wordListDeclaredLevel(paragraph);
|
|
28169
|
-
|
|
28268
|
+
const visualLevel = this.wordListVisualLevel(paragraph, wordListIndents);
|
|
28269
|
+
if (state.listRunDeclaredLevel === null || state.listRunVisualLevel === null) {
|
|
28270
|
+
state.listRunDeclaredLevel = declaredLevel;
|
|
28271
|
+
state.listRunVisualLevel = visualLevel;
|
|
28272
|
+
}
|
|
28273
|
+
let requestedLevel = Math.max(1, declaredLevel - state.listRunDeclaredLevel + 1, visualLevel - state.listRunVisualLevel + 1);
|
|
28170
28274
|
const rememberedResetLevel = declaredLevel === 1 ? state.resetListLevels.get(listId) : null;
|
|
28171
28275
|
if (rememberedResetLevel) {
|
|
28172
28276
|
return Math.max(requestedLevel, rememberedResetLevel);
|
|
@@ -28187,7 +28291,8 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28187
28291
|
let currentList = state.listStack[stackIndex];
|
|
28188
28292
|
if (currentList?.tagName.toLowerCase() !== listType || currentList?.getAttribute('type') !== orderedListType ||
|
|
28189
28293
|
state.listParents[stackIndex] !== listParent) {
|
|
28190
|
-
|
|
28294
|
+
const rootIndent = level === 1 ? state.listRunVisualLevel - 1 : 0;
|
|
28295
|
+
currentList = this.createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent);
|
|
28191
28296
|
state.listStack[stackIndex] = currentList;
|
|
28192
28297
|
state.listParents[stackIndex] = listParent;
|
|
28193
28298
|
}
|
|
@@ -28195,15 +28300,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28195
28300
|
state.listParents.length = level;
|
|
28196
28301
|
return currentList;
|
|
28197
28302
|
}
|
|
28198
|
-
createWordList(documentElement, paragraph, listType, orderedListType, parentListItem) {
|
|
28303
|
+
createWordList(documentElement, paragraph, listType, orderedListType, parentListItem, rootIndent) {
|
|
28199
28304
|
const list = documentElement.createElement(listType);
|
|
28200
|
-
const listStart = this.wordListStart(paragraph);
|
|
28305
|
+
const listStart = this.wordListStart(paragraph, orderedListType);
|
|
28201
28306
|
if (listType === 'ol' && listStart > 1) {
|
|
28202
28307
|
list.setAttribute('start', listStart.toString());
|
|
28203
28308
|
}
|
|
28204
28309
|
if (orderedListType) {
|
|
28205
28310
|
list.setAttribute('type', orderedListType);
|
|
28206
28311
|
}
|
|
28312
|
+
if (rootIndent > 0) {
|
|
28313
|
+
list.dataset.indent = Math.min(6, rootIndent).toString();
|
|
28314
|
+
}
|
|
28207
28315
|
if (parentListItem) {
|
|
28208
28316
|
parentListItem.appendChild(list);
|
|
28209
28317
|
}
|
|
@@ -28262,11 +28370,10 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28262
28370
|
.find((element) => /mso-list:\s*Ignore/i.test(element.getAttribute('style') || ''));
|
|
28263
28371
|
return (markerElement ? markerElement.textContent : paragraph.textContent).trim();
|
|
28264
28372
|
}
|
|
28265
|
-
|
|
28266
|
-
const declaredLevel = this.wordListDeclaredLevel(paragraph);
|
|
28373
|
+
wordListVisualLevel(paragraph, wordListIndents) {
|
|
28267
28374
|
const indent = this.wordListIndent(paragraph);
|
|
28268
28375
|
const visualLevel = wordListIndents.indexOf(indent) + 1;
|
|
28269
|
-
return
|
|
28376
|
+
return visualLevel || 1;
|
|
28270
28377
|
}
|
|
28271
28378
|
wordListDeclaredLevel(paragraph) {
|
|
28272
28379
|
const match = (paragraph.getAttribute('style') || '').match(/mso-list:[^;]*\blevel(\d+)/i);
|
|
@@ -28287,9 +28394,18 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
28287
28394
|
const indent = Math.max(this.cssLengthToPixels(this.cssStyleLength(style, 'margin-left')), this.cssLengthToPixels(this.cssStyleLength(style, 'margin-inline-start')), this.cssLengthToPixels(this.cssStyleLength(style, 'mso-para-margin-left')), this.cssLengthToPixels(this.cssStyleLength(style, 'mso-margin-left-alt')), this.cssLengthToPixels(this.cssMarginLeftLength(style)));
|
|
28288
28395
|
return Math.round(indent);
|
|
28289
28396
|
}
|
|
28290
|
-
wordListStart(paragraph) {
|
|
28291
|
-
const match =
|
|
28292
|
-
|
|
28397
|
+
wordListStart(paragraph, orderedListType) {
|
|
28398
|
+
const match = /^\(?([a-z]+|\d+)[.)]/i.exec(this.wordListMarker(paragraph));
|
|
28399
|
+
if (!match) {
|
|
28400
|
+
return 1;
|
|
28401
|
+
}
|
|
28402
|
+
if (/^\d+$/.test(match[1])) {
|
|
28403
|
+
return Number(match[1]);
|
|
28404
|
+
}
|
|
28405
|
+
if (orderedListType === 'a') {
|
|
28406
|
+
return match[1].toLowerCase().split('').reduce((start, character) => (start * 26) + character.charCodeAt(0) - 96, 0);
|
|
28407
|
+
}
|
|
28408
|
+
return 1;
|
|
28293
28409
|
}
|
|
28294
28410
|
copyListItemContents(documentElement, paragraph, listItem) {
|
|
28295
28411
|
Array.prototype.slice.call(paragraph.childNodes).forEach((childNode) => {
|
|
@@ -29008,7 +29124,7 @@ class WriteRichTextAreaFieldComponent extends AbstractFieldWriteComponent {
|
|
|
29008
29124
|
type: ViewChild,
|
|
29009
29125
|
args: ['editorHost']
|
|
29010
29126
|
}] }); })();
|
|
29011
|
-
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteRichTextAreaFieldComponent, { className: "WriteRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/write-rich-text-area-field.component.ts", lineNumber:
|
|
29127
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WriteRichTextAreaFieldComponent, { className: "WriteRichTextAreaFieldComponent", filePath: "lib/shared/components/palette/rich-text-area/write-rich-text-area-field.component.ts", lineNumber: 139 }); })();
|
|
29012
29128
|
|
|
29013
29129
|
class ReadTextFieldComponent extends AbstractFieldReadComponent {
|
|
29014
29130
|
static ɵfac = /*@__PURE__*/ (() => { let ɵReadTextFieldComponent_BaseFactory; return function ReadTextFieldComponent_Factory(__ngFactoryType__) { return (ɵReadTextFieldComponent_BaseFactory || (ɵReadTextFieldComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadTextFieldComponent)))(__ngFactoryType__ || ReadTextFieldComponent); }; })();
|
|
@@ -31438,6 +31554,7 @@ function ManageCaseFlagsComponent_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
|
31438
31554
|
i0.ɵɵproperty("for", i0.ɵɵinterpolate1("flag-selection-", i_r4))("innerHTML", ctx_r0.sanitizeHtml(i0.ɵɵpipeBind1(3, 6, flagDisplay_r3)), i0.ɵɵsanitizeHtml);
|
|
31439
31555
|
} }
|
|
31440
31556
|
class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
31557
|
+
sanitizer;
|
|
31441
31558
|
formGroup;
|
|
31442
31559
|
flagsData;
|
|
31443
31560
|
caseTitle;
|
|
@@ -31452,8 +31569,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
31452
31569
|
selectedControlName = 'selectedManageCaseLocation';
|
|
31453
31570
|
excludedFlagStatuses = [CaseFlagStatus.INACTIVE, CaseFlagStatus.NOT_APPROVED];
|
|
31454
31571
|
cachedControls;
|
|
31455
|
-
constructor(multipageComponentStateService) {
|
|
31572
|
+
constructor(multipageComponentStateService, sanitizer) {
|
|
31456
31573
|
super(multipageComponentStateService);
|
|
31574
|
+
this.sanitizer = sanitizer;
|
|
31457
31575
|
}
|
|
31458
31576
|
ngOnInit() {
|
|
31459
31577
|
this.manageCaseFlagTitle = this.setManageCaseFlagTitle(this.displayContextParameter);
|
|
@@ -31703,9 +31821,9 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
31703
31821
|
}
|
|
31704
31822
|
// Ensure there is no dangerous HTML in the flag name or description that could lead to XSS vulnerabilities
|
|
31705
31823
|
sanitizeHtml(content) {
|
|
31706
|
-
return
|
|
31824
|
+
return this.sanitizer.sanitize(SecurityContext.HTML, content ?? '') ?? '';
|
|
31707
31825
|
}
|
|
31708
|
-
static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService)); };
|
|
31826
|
+
static ɵfac = function ManageCaseFlagsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ManageCaseFlagsComponent)(i0.ɵɵdirectiveInject(MultipageComponentStateService), i0.ɵɵdirectiveInject(i1$5.DomSanitizer)); };
|
|
31709
31827
|
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ManageCaseFlagsComponent, selectors: [["ccd-manage-case-flags"]], inputs: { formGroup: "formGroup", flagsData: "flagsData", caseTitle: "caseTitle", displayContextParameter: "displayContextParameter" }, outputs: { caseFlagStateEmitter: "caseFlagStateEmitter" }, standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 10, vars: 9, consts: [[3, "formGroup"], [1, "govuk-form-group", 3, "ngClass"], ["aria-describedby", "manage-case-flag-heading", 1, "govuk-fieldset"], [1, "govuk-fieldset__legend", "govuk-fieldset__legend--m"], ["id", "manage-case-flag-heading", 1, "govuk-fieldset__heading"], ["id", "manage-case-flag-not-selected-error-message", "class", "govuk-error-message", 4, "ngIf"], ["data-module", "govuk-radios", "id", "conditional-radios-list", 1, "govuk-radios", "govuk-radios--conditional"], ["class", "govuk-radios__item", 4, "ngFor", "ngForOf"], ["id", "manage-case-flag-not-selected-error-message", 1, "govuk-error-message"], [1, "govuk-visually-hidden"], [1, "govuk-radios__item"], ["type", "radio", 1, "govuk-radios__input", 3, "change", "id", "checked"], [1, "govuk-label", "govuk-radios__label", 3, "for", "innerHTML"]], template: function ManageCaseFlagsComponent_Template(rf, ctx) { if (rf & 1) {
|
|
31710
31828
|
i0.ɵɵelementContainerStart(0, 0);
|
|
31711
31829
|
i0.ɵɵelementStart(1, "div", 1)(2, "fieldset", 2)(3, "legend", 3)(4, "h1", 4);
|
|
@@ -31732,7 +31850,7 @@ class ManageCaseFlagsComponent extends AbstractJourneyComponent {
|
|
|
31732
31850
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ManageCaseFlagsComponent, [{
|
|
31733
31851
|
type: Component,
|
|
31734
31852
|
args: [{ selector: 'ccd-manage-case-flags', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ng-container [formGroup]=\"formGroup\">\n <div class=\"govuk-form-group\" [ngClass]=\"{'form-group-error': errorMessages.length > 0}\">\n <fieldset class=\"govuk-fieldset\" aria-describedby=\"manage-case-flag-heading\">\n <legend class=\"govuk-fieldset__legend govuk-fieldset__legend--m\">\n <h1 id=\"manage-case-flag-heading\" class=\"govuk-fieldset__heading\">\n {{manageCaseFlagTitle | rpxTranslate}}\n </h1>\n </legend>\n <div id=\"manage-case-flag-not-selected-error-message\" class=\"govuk-error-message\"\n *ngIf=\"manageCaseFlagSelectedErrorMessage\">\n <span class=\"govuk-visually-hidden\">{{'Error:' | rpxTranslate}}</span> {{manageCaseFlagSelectedErrorMessage | rpxTranslate}}\n </div>\n <div class=\"govuk-radios govuk-radios--conditional\" data-module=\"govuk-radios\" id=\"conditional-radios-list\">\n <div class=\"govuk-radios__item\" *ngFor=\"let flagDisplay of flagsDisplayData; index as i\">\n <input class=\"govuk-radios__input\" id=\"flag-selection-{{i}}\"\n type=\"radio\"\n [checked]=\"isSelected(flagDisplay)\"\n (change)=\"onFlagSelectionChange(flagDisplay)\"/>\n <label class=\"govuk-label govuk-radios__label\" for=\"flag-selection-{{i}}\" [innerHTML]=\"sanitizeHtml(flagDisplay | manageCaseFlagsLabelDisplay)\"></label>\n </div>\n </div>\n </fieldset>\n </div>\n</ng-container>", styles: [".flag-name-and-description{font-weight:700}\n"] }]
|
|
31735
|
-
}], () => [{ type: MultipageComponentStateService }], { formGroup: [{
|
|
31853
|
+
}], () => [{ type: MultipageComponentStateService }, { type: i1$5.DomSanitizer }], { formGroup: [{
|
|
31736
31854
|
type: Input
|
|
31737
31855
|
}], flagsData: [{
|
|
31738
31856
|
type: Input
|
|
@@ -34107,7 +34225,6 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
|
|
|
34107
34225
|
i0.ɵɵelementStart(4, "a", 9);
|
|
34108
34226
|
i0.ɵɵpipe(5, "rpxTranslate");
|
|
34109
34227
|
i0.ɵɵlistener("click", function ReadComplexFieldCollectionTableComponent_th_10_Template_a_click_4_listener($event) { const heading_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); ctx_r2.sortRowsByColumns(heading_r2); return i0.ɵɵresetView($event.preventDefault()); })("keyup.enter", function ReadComplexFieldCollectionTableComponent_th_10_Template_a_keyup_enter_4_listener() { const heading_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.sortRowsByColumns(heading_r2)); });
|
|
34110
|
-
i0.ɵɵtext(6);
|
|
34111
34228
|
i0.ɵɵelementEnd()();
|
|
34112
34229
|
} if (rf & 2) {
|
|
34113
34230
|
const heading_r2 = ctx.$implicit;
|
|
@@ -34115,9 +34232,8 @@ function ReadComplexFieldCollectionTableComponent_th_10_Template(rf, ctx) { if (
|
|
|
34115
34232
|
i0.ɵɵadvance(2);
|
|
34116
34233
|
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(3, 3, ctx_r2.columnsAllLabels[heading_r2].label));
|
|
34117
34234
|
i0.ɵɵadvance(2);
|
|
34235
|
+
i0.ɵɵproperty("innerHTML", ctx_r2.sortWidget(ctx_r2.columnsAllLabels[heading_r2]), i0.ɵɵsanitizeHtml);
|
|
34118
34236
|
i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(5, 5, "Sort " + ctx_r2.columnsAllLabels[heading_r2].label));
|
|
34119
|
-
i0.ɵɵadvance(2);
|
|
34120
|
-
i0.ɵɵtextInterpolate(ctx_r2.sortWidget(ctx_r2.columnsAllLabels[heading_r2]));
|
|
34121
34237
|
} }
|
|
34122
34238
|
function ReadComplexFieldCollectionTableComponent_ng_container_12_ng_container_2_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
34123
34239
|
i0.ɵɵelementStart(0, "div");
|
|
@@ -34327,11 +34443,15 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34327
34443
|
if (this.isHidden[row]) {
|
|
34328
34444
|
return 'assets/img/accordion-plus.png';
|
|
34329
34445
|
}
|
|
34330
|
-
|
|
34331
|
-
|
|
34446
|
+
else {
|
|
34447
|
+
if (this.isVerticleDataNotEmpty(row)) {
|
|
34448
|
+
return 'assets/img/accordion-minus.png';
|
|
34449
|
+
}
|
|
34450
|
+
else {
|
|
34451
|
+
this.isHidden[row] = true;
|
|
34452
|
+
return 'assets/img/accordion-plus.png';
|
|
34453
|
+
}
|
|
34332
34454
|
}
|
|
34333
|
-
this.isHidden[row] = true;
|
|
34334
|
-
return 'assets/img/accordion-plus.png';
|
|
34335
34455
|
}
|
|
34336
34456
|
/**
|
|
34337
34457
|
* Needs to be called before 'ccdFieldsFilter' pipe is used, as it needs a caseField value.
|
|
@@ -34356,7 +34476,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34356
34476
|
field_type: fieldType
|
|
34357
34477
|
});
|
|
34358
34478
|
}
|
|
34359
|
-
keepOriginalOrder = (a) => a.key;
|
|
34479
|
+
keepOriginalOrder = (a, b) => a.key;
|
|
34360
34480
|
sortRowsByColumns(column) {
|
|
34361
34481
|
const shouldSortInAscendingOrder = this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.UNSORTED
|
|
34362
34482
|
|| this.columnsHorizontalLabel[column].sortOrder === SortOrder$1.DESCENDING;
|
|
@@ -34399,7 +34519,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34399
34519
|
}
|
|
34400
34520
|
}
|
|
34401
34521
|
sortWidget(column) {
|
|
34402
|
-
return
|
|
34522
|
+
return ReadComplexFieldCollectionTableComponent.isSortAscending(column) ? '▼' : '▲';
|
|
34403
34523
|
}
|
|
34404
34524
|
populateHorizontalLabels(labelsHorizontal, allLabels, labelsVertical) {
|
|
34405
34525
|
for (const id of this.columns) {
|
|
@@ -34443,7 +34563,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34443
34563
|
return result;
|
|
34444
34564
|
}
|
|
34445
34565
|
static ɵfac = /*@__PURE__*/ (() => { let ɵReadComplexFieldCollectionTableComponent_BaseFactory; return function ReadComplexFieldCollectionTableComponent_Factory(__ngFactoryType__) { return (ɵReadComplexFieldCollectionTableComponent_BaseFactory || (ɵReadComplexFieldCollectionTableComponent_BaseFactory = i0.ɵɵgetInheritedFactory(ReadComplexFieldCollectionTableComponent)))(__ngFactoryType__ || ReadComplexFieldCollectionTableComponent); }; })();
|
|
34446
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldCollectionTableComponent, selectors: [["ccd-read-complex-field-collection-table"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 6, consts: [["showEmptyTd", ""], ["SimpleRow", ""], [1, "complex-panel", 3, "hidden"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex panel table", 1, "complex-panel-table"], ["scope", "col", 4, "ngFor", "ngForOf"], [4, "ngFor", "ngForOf"], ["scope", "col"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter"], [1, "new-table-row", "accordion-heading", 3, "keyup", "click"], [2, "float", "right"], ["href", "#", 3, "click"], ["alt", "accordion-img", 1, "accordion-image", 3, "src"], [3, "hidden"], [3, "colSpan"], ["aria-describedby", "complex panel table expanded", 1, "complex-panel-table"], [4, "ngIf", "ngIfElse"], [3, "caseField", "context"], ["class", "complex-panel-simple-field accordion-body", 3, "hidden", 4, "ngIf"], [3, "hidden", 4, "ngIf"], [1, "complex-panel-simple-field", "accordion-body", 3, "hidden"], ["class", "text-16", 4, "ngIf"], ["colspan", "2"], ["class", "complex-panel-compound-field", 3, "hidden", 4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], [1, "complex-panel-nested-field", 3, "hidden"], [4, "ngIf"]], template: function ReadComplexFieldCollectionTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
34566
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ReadComplexFieldCollectionTableComponent, selectors: [["ccd-read-complex-field-collection-table"]], standalone: false, features: [i0.ɵɵInheritDefinitionFeature], decls: 13, vars: 6, consts: [["showEmptyTd", ""], ["SimpleRow", ""], [1, "complex-panel", 3, "hidden"], [1, "complex-panel-title"], [1, "text-16"], ["aria-describedby", "complex panel table", 1, "complex-panel-table"], ["scope", "col", 4, "ngFor", "ngForOf"], [4, "ngFor", "ngForOf"], ["scope", "col"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter", "innerHTML"], [1, "new-table-row", "accordion-heading", 3, "keyup", "click"], [2, "float", "right"], ["href", "#", 3, "click"], ["alt", "accordion-img", 1, "accordion-image", 3, "src"], [3, "hidden"], [3, "colSpan"], ["aria-describedby", "complex panel table expanded", 1, "complex-panel-table"], [4, "ngIf", "ngIfElse"], [3, "caseField", "context"], ["class", "complex-panel-simple-field accordion-body", 3, "hidden", 4, "ngIf"], [3, "hidden", 4, "ngIf"], [1, "complex-panel-simple-field", "accordion-body", 3, "hidden"], ["class", "text-16", 4, "ngIf"], ["colspan", "2"], ["class", "complex-panel-compound-field", 3, "hidden", 4, "ngIf", "ngIfElse"], [1, "complex-panel-compound-field", 3, "hidden"], [1, "complex-panel-nested-field", 3, "hidden"], [4, "ngIf"]], template: function ReadComplexFieldCollectionTableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
34447
34567
|
i0.ɵɵelementStart(0, "div", 2)(1, "dl", 3)(2, "dt")(3, "span", 4);
|
|
34448
34568
|
i0.ɵɵtext(4);
|
|
34449
34569
|
i0.ɵɵpipe(5, "rpxTranslate");
|
|
@@ -34451,7 +34571,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34451
34571
|
i0.ɵɵelement(6, "dd");
|
|
34452
34572
|
i0.ɵɵelementEnd();
|
|
34453
34573
|
i0.ɵɵelementStart(7, "table", 5)(8, "tbody")(9, "tr");
|
|
34454
|
-
i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template,
|
|
34574
|
+
i0.ɵɵtemplate(10, ReadComplexFieldCollectionTableComponent_th_10_Template, 6, 7, "th", 6);
|
|
34455
34575
|
i0.ɵɵelement(11, "th");
|
|
34456
34576
|
i0.ɵɵelementEnd();
|
|
34457
34577
|
i0.ɵɵtemplate(12, ReadComplexFieldCollectionTableComponent_ng_container_12_Template, 15, 20, "ng-container", 7);
|
|
@@ -34468,7 +34588,7 @@ class ReadComplexFieldCollectionTableComponent extends AbstractFieldReadComponen
|
|
|
34468
34588
|
}
|
|
34469
34589
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ReadComplexFieldCollectionTableComponent, [{
|
|
34470
34590
|
type: Component,
|
|
34471
|
-
args: [{ selector: 'ccd-read-complex-field-collection-table', standalone: false, template: "<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label | rpxTranslate}}</span>\n <a href=\"#\"\n (click)=\"sortRowsByColumns(heading); $event.preventDefault()\"\n (keyup.enter)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [attr.aria-label]=\"'Sort ' + columnsAllLabels[heading].label | rpxTranslate\"\n
|
|
34591
|
+
args: [{ selector: 'ccd-read-complex-field-collection-table', standalone: false, template: "<div class=\"complex-panel\" [hidden]=\"caseField.hidden\">\n <dl class=\"complex-panel-title\">\n <dt><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></dt>\n <dd></dd>\n </dl>\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table\">\n <tbody>\n <!-- <COMPLEX table field header>-->\n <tr>\n <th *ngFor=\"let heading of columns\" scope=\"col\">\n <span class=\"text-16\">{{columnsAllLabels[heading].label | rpxTranslate}}</span>\n <a href=\"#\"\n (click)=\"sortRowsByColumns(heading); $event.preventDefault()\"\n (keyup.enter)=\"sortRowsByColumns(heading)\"\n class=\"sort-widget\"\n [attr.aria-label]=\"'Sort ' + columnsAllLabels[heading].label | rpxTranslate\"\n [innerHTML]=\"sortWidget(columnsAllLabels[heading])\"></a>\n </th>\n <th></th>\n </tr>\n <!-- </COMPLEX table field header>-->\n <ng-container *ngFor=\"let item of rows; let i = index;\">\n <!-- <COMPLEX table collapsed view>-->\n <tr class=\"new-table-row accordion-heading\" (keyup)=\"$event.key === 'Enter' ? (isHidden[i] = !isHidden[i]) : null\" (click)=\"isHidden[i] = !isHidden[i]\"\n [class.last-accordion]=\"isHidden[i]\">\n <ng-container *ngFor=\"let heading of columns\">\n <td class=\"text-16\">\n <div *ngIf=\"item[heading]; else showEmptyTd\">\n <ccd-field-read\n [caseField]=\"toCaseField(heading, item[heading].label, columnsHorizontalLabel[heading].type, item[heading])\"\n [context]=\"context\"></ccd-field-read>\n </div>\n <ng-template #showEmptyTd>\n <div> </div>\n </ng-template>\n </td>\n </ng-container>\n <td>\n <div style=\"float: right;\">\n <a href=\"#\" (click)=\"$event.preventDefault()\"> <img src=\"{{ getImage(i) }}\" alt=\"accordion-img\" class=\"accordion-image\"/></a>\n </div>\n </td>\n </tr>\n <!-- </COMPLEX table collapsed view>-->\n <!-- <COMPLEX table expanded view>-->\n <tr [hidden]=\"isHidden[i]\">\n <td [colSpan]=\"columns.length + 1\">\n <table class=\"complex-panel-table\" aria-describedby=\"complex panel table expanded\">\n <tbody>\n <ng-container\n *ngFor=\"let vLabel of columnsVerticalLabel | keyvalue: keepOriginalOrder | ccdCollectionTableCaseFieldsFilter: caseField: rows[i] | ccdReadFieldsFilter:true :undefined :true\">\n <!-- <COMPLEX table expandable body simple field>-->\n <tr class=\"complex-panel-simple-field accordion-body\" *ngIf=\"item[vLabel.id]\" [hidden]=\"vLabel.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{ vLabel.label | rpxTranslate }}</span></th>\n <td *ngIf=\"vLabel['type'] !== 'Complex'\" class=\"text-16\">\n <ccd-field-read [caseField]=\"toCaseField('', vLabel.label, vLabel.field_type, item[vLabel.id])\"\n [context]=\"context\"></ccd-field-read>\n </td>\n </tr>\n <!-- </COMPLEX table expandable body simple field>-->\n\n <!-- <COMPLEX table expandable body complex field>-->\n <tr *ngIf=\"vLabel['type'] === 'Complex' && addCaseFieldValue(vLabel, item[vLabel.id])\" [hidden]=\"vLabel.hidden\">\n <td colspan=\"2\">\n <ng-container *ngFor=\"let caseField of vLabel | ccdReadFieldsFilter:true :undefined :true\">\n <tr class=\"complex-panel-compound-field\" *ngIf=\"(caseField | ccdIsCompound); else SimpleRow\" [hidden]=\"caseField\">\n <td colspan=\"2\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n </tr>\n <ng-template #SimpleRow>\n <tr class=\"complex-panel-nested-field\" [hidden]=\"caseField.hidden\">\n <th scope=\"col\"><span class=\"text-16\">{{caseField.label | rpxTranslate}}</span></th>\n <td *ngIf=\"!item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <span class=\"text-16\"><ccd-field-read [caseField]=\"caseField\" [context]=\"context\"></ccd-field-read></span>\n </td>\n <td *ngIf=\"item[vLabel.id]?.hasOwnProperty('CaseReference')\">\n <ccd-read-case-link-field [caseField]=\"addCaseReferenceValue(caseField, item[vLabel.id].CaseReference)\" [context]=\"context\"></ccd-read-case-link-field>\n </td>\n </tr>\n </ng-template>\n </ng-container>\n </td>\n </tr>\n <!-- <COMPLEX table expandable body complex field>-->\n </ng-container>\n </tbody>\n </table>\n </td>\n </tr>\n <!-- </COMPLEX table expanded view>-->\n </ng-container>\n </tbody>\n </table>\n</div>\n", styles: [".complex-panel{margin:13px 0;border:1px solid #bfc1c3}.complex-panel .complex-panel-title{background-color:#dee0e2;padding:5px 5px 2px;border-bottom:1px solid #bfc1c3;display:block;color:#0b0c0c;font-family:nta,Arial,sans-serif;font-weight:700;text-transform:none;font-size:16px;line-height:1.25}@media(min-width:641px){.complex-panel .complex-panel-title{font-size:19px;line-height:1.3157894737}}.complex-panel .complex-panel-table>tbody>tr>th{vertical-align:top}.complex-panel .complex-panel-table>tbody>tr:last-child>th{border-bottom:none}.complex-panel .complex-panel-table th{padding-left:5px;font-weight:700;border-bottom:none}.complex-panel .complex-panel-table td{padding-left:5px;padding-top:0;padding-bottom:0;border-bottom:none}.complex-panel .new-table-row{border-top:1px solid #bfc1c3}.complex-panel .complex-panel-simple-field th{padding-left:5px;padding-top:0;padding-bottom:0;width:295px}.complex-panel .complex-panel-nested-field th{padding-left:33px;padding-top:0;padding-bottom:0;width:200px}.complex-panel .complex-panel-compound-field td{padding:5px;border-bottom:none}.sort-widget{cursor:pointer;text-decoration:none;color:#0b0c0c}.accordion-wrapper{margin-bottom:20px}.accordion-wrapper .heading-medium{margin:0}.accordion-wrapper .accordion-heading{border-top:1px solid #bfc1c3;padding-top:20px;padding-bottom:10px;height:20px;cursor:pointer}.accordion-wrapper .accordion-heading .accordion-image{width:25px;margin-right:20px}.accordion-wrapper .accordion-body{margin-top:20px;margin-right:20px}.accordion-wrapper .last-accordion{border-bottom:1px solid #bfc1c3;padding-bottom:30px}\n"] }]
|
|
34472
34592
|
}], null, null); })();
|
|
34473
34593
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ReadComplexFieldCollectionTableComponent, { className: "ReadComplexFieldCollectionTableComponent", filePath: "lib/shared/components/palette/complex/read-complex-field-collection-table.component.ts", lineNumber: 13 }); })();
|
|
34474
34594
|
|
|
@@ -45172,15 +45292,13 @@ function SearchResultComponent_table_0_th_11_div_5_Template(rf, ctx) { if (rf &
|
|
|
45172
45292
|
i0.ɵɵelementStart(0, "div", 28)(1, "a", 29);
|
|
45173
45293
|
i0.ɵɵpipe(2, "rpxTranslate");
|
|
45174
45294
|
i0.ɵɵlistener("click", function SearchResultComponent_table_0_th_11_div_5_Template_a_click_1_listener($event) { i0.ɵɵrestoreView(_r6); const col_r5 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); ctx_r0.sort(col_r5); return i0.ɵɵresetView($event.preventDefault()); })("keyup.enter", function SearchResultComponent_table_0_th_11_div_5_Template_a_keyup_enter_1_listener() { i0.ɵɵrestoreView(_r6); const col_r5 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.sort(col_r5)); });
|
|
45175
|
-
i0.ɵɵtext(3);
|
|
45176
45295
|
i0.ɵɵelementEnd()();
|
|
45177
45296
|
} if (rf & 2) {
|
|
45178
45297
|
const col_r5 = i0.ɵɵnextContext().$implicit;
|
|
45179
45298
|
const ctx_r0 = i0.ɵɵnextContext(2);
|
|
45180
45299
|
i0.ɵɵadvance();
|
|
45300
|
+
i0.ɵɵproperty("innerHTML", ctx_r0.sortWidget(col_r5), i0.ɵɵsanitizeHtml);
|
|
45181
45301
|
i0.ɵɵattribute("aria-label", i0.ɵɵpipeBind1(2, 2, "Sort " + col_r5.label));
|
|
45182
|
-
i0.ɵɵadvance(2);
|
|
45183
|
-
i0.ɵɵtextInterpolate(ctx_r0.sortWidget(col_r5));
|
|
45184
45302
|
} }
|
|
45185
45303
|
function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
|
|
45186
45304
|
const _r4 = i0.ɵɵgetCurrentView();
|
|
@@ -45189,7 +45307,7 @@ function SearchResultComponent_table_0_th_11_Template(rf, ctx) { if (rf & 1) {
|
|
|
45189
45307
|
i0.ɵɵtext(3);
|
|
45190
45308
|
i0.ɵɵpipe(4, "rpxTranslate");
|
|
45191
45309
|
i0.ɵɵelementEnd();
|
|
45192
|
-
i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template,
|
|
45310
|
+
i0.ɵɵtemplate(5, SearchResultComponent_table_0_th_11_div_5_Template, 3, 4, "div", 27);
|
|
45193
45311
|
i0.ɵɵelementEnd()();
|
|
45194
45312
|
} if (rf & 2) {
|
|
45195
45313
|
const col_r5 = ctx.$implicit;
|
|
@@ -45538,7 +45656,7 @@ class SearchResultComponent {
|
|
|
45538
45656
|
ngOnInit() {
|
|
45539
45657
|
if (this.preSelectedCases) {
|
|
45540
45658
|
for (const preSelectedCase of this.preSelectedCases) {
|
|
45541
|
-
if (this.selectedCases && !this.selectedCases.some(
|
|
45659
|
+
if (this.selectedCases && !this.selectedCases.some(aCase => aCase.case_id === preSelectedCase.case_id)) {
|
|
45542
45660
|
this.selectedCases.push(preSelectedCase);
|
|
45543
45661
|
}
|
|
45544
45662
|
}
|
|
@@ -45547,7 +45665,7 @@ class SearchResultComponent {
|
|
|
45547
45665
|
this.selection.emit(this.selectedCases);
|
|
45548
45666
|
}
|
|
45549
45667
|
ngOnChanges(changes) {
|
|
45550
|
-
if (changes
|
|
45668
|
+
if (changes['resultView']) {
|
|
45551
45669
|
this.hideRows = false;
|
|
45552
45670
|
this.sortParameters = undefined;
|
|
45553
45671
|
// Clone `resultView` to prevent sorting the external variable
|
|
@@ -45562,8 +45680,8 @@ class SearchResultComponent {
|
|
|
45562
45680
|
this.hydrateResultView();
|
|
45563
45681
|
this.draftsCount = this.draftsCount ? this.draftsCount : this.numberOfDrafts();
|
|
45564
45682
|
}
|
|
45565
|
-
if (changes
|
|
45566
|
-
this.selected.page = (changes
|
|
45683
|
+
if (changes['page']) {
|
|
45684
|
+
this.selected.page = (changes['page']).currentValue;
|
|
45567
45685
|
}
|
|
45568
45686
|
}
|
|
45569
45687
|
isTranslatable(col) {
|
|
@@ -45593,7 +45711,7 @@ class SearchResultComponent {
|
|
|
45593
45711
|
selectAll() {
|
|
45594
45712
|
if (this.allOnPageSelected()) {
|
|
45595
45713
|
// all cases already selected, so unselect all on this page
|
|
45596
|
-
this.resultView.results.forEach(
|
|
45714
|
+
this.resultView.results.forEach(c => {
|
|
45597
45715
|
this.selectedCases.forEach((s, i) => {
|
|
45598
45716
|
if (c.case_id === s.case_id) {
|
|
45599
45717
|
this.selectedCases.splice(i, 1);
|
|
@@ -45602,7 +45720,7 @@ class SearchResultComponent {
|
|
|
45602
45720
|
});
|
|
45603
45721
|
}
|
|
45604
45722
|
else {
|
|
45605
|
-
this.resultView.results.forEach(
|
|
45723
|
+
this.resultView.results.forEach(c => {
|
|
45606
45724
|
if (!this.isSelected(c) && this.canBeShared(c)) {
|
|
45607
45725
|
this.selectedCases.push(c);
|
|
45608
45726
|
}
|
|
@@ -45654,21 +45772,21 @@ class SearchResultComponent {
|
|
|
45654
45772
|
*/
|
|
45655
45773
|
// A longer term resolution is to move this piece of logic to the backend
|
|
45656
45774
|
hydrateResultView() {
|
|
45657
|
-
this.resultView.results.forEach(
|
|
45775
|
+
this.resultView.results.forEach(result => {
|
|
45658
45776
|
const caseFields = [];
|
|
45659
|
-
Object.keys(result.case_fields).forEach(
|
|
45777
|
+
Object.keys(result.case_fields).forEach(fieldId => {
|
|
45660
45778
|
const field = result.case_fields[fieldId];
|
|
45661
45779
|
caseFields.push(Object.assign(new CaseField(), {
|
|
45662
45780
|
id: fieldId,
|
|
45663
45781
|
label: null,
|
|
45664
45782
|
field_type: {},
|
|
45665
45783
|
value: field,
|
|
45666
|
-
display_context: null
|
|
45784
|
+
display_context: null,
|
|
45667
45785
|
}));
|
|
45668
45786
|
});
|
|
45669
45787
|
result.hydrated_case_fields = caseFields;
|
|
45670
45788
|
result.columns = {};
|
|
45671
|
-
this.resultView.columns.forEach(
|
|
45789
|
+
this.resultView.columns.forEach(col => {
|
|
45672
45790
|
result.columns[col.case_field_id] = this.buildCaseField(col, result);
|
|
45673
45791
|
});
|
|
45674
45792
|
});
|
|
@@ -45706,7 +45824,7 @@ class SearchResultComponent {
|
|
|
45706
45824
|
field_type: col.case_field_type,
|
|
45707
45825
|
value: result.case_fields[col.case_field_id],
|
|
45708
45826
|
display_context_parameter: col.display_context_parameter,
|
|
45709
|
-
display_context: col.display_context
|
|
45827
|
+
display_context: col.display_context,
|
|
45710
45828
|
});
|
|
45711
45829
|
}
|
|
45712
45830
|
getColumnsWithPrefix(col, result) {
|
|
@@ -45759,7 +45877,7 @@ class SearchResultComponent {
|
|
|
45759
45877
|
else {
|
|
45760
45878
|
condition = this.isSortAscending(column);
|
|
45761
45879
|
}
|
|
45762
|
-
return
|
|
45880
|
+
return condition ? '▼' : '▲';
|
|
45763
45881
|
}
|
|
45764
45882
|
activityEnabled() {
|
|
45765
45883
|
return this.activityService.isEnabled;
|
|
@@ -45768,13 +45886,19 @@ class SearchResultComponent {
|
|
|
45768
45886
|
if (col.case_field_id === '[CASE_REFERENCE]') {
|
|
45769
45887
|
return this.caseReferencePipe.transform(result.case_fields[col.case_field_id]);
|
|
45770
45888
|
}
|
|
45771
|
-
|
|
45772
|
-
if (col.id
|
|
45773
|
-
|
|
45889
|
+
else {
|
|
45890
|
+
if (col.id) {
|
|
45891
|
+
if (col.id === '[CASE_REFERENCE]') {
|
|
45892
|
+
return this.caseReferencePipe.transform(result.case_fields[col.id]);
|
|
45893
|
+
}
|
|
45894
|
+
else {
|
|
45895
|
+
return result.case_fields[col.id];
|
|
45896
|
+
}
|
|
45897
|
+
}
|
|
45898
|
+
else {
|
|
45899
|
+
return result.case_fields[col.case_field_id];
|
|
45774
45900
|
}
|
|
45775
|
-
return result.case_fields[col.id];
|
|
45776
45901
|
}
|
|
45777
|
-
return result.case_fields[col.case_field_id];
|
|
45778
45902
|
}
|
|
45779
45903
|
draftPrefixOrGet(col, result) {
|
|
45780
45904
|
return result.case_id.startsWith(DRAFT_PREFIX) ? DRAFT_PREFIX : this.hyphenateIfCaseReferenceOrGet(col, result);
|
|
@@ -45809,7 +45933,7 @@ class SearchResultComponent {
|
|
|
45809
45933
|
return currentPage > 1 ? this.draftsCount : 0;
|
|
45810
45934
|
}
|
|
45811
45935
|
numberOfDrafts() {
|
|
45812
|
-
return this.resultView.results.filter(
|
|
45936
|
+
return this.resultView.results.filter(_ => _.case_id.startsWith(DRAFT_PREFIX)).length;
|
|
45813
45937
|
}
|
|
45814
45938
|
goToCase(caseId) {
|
|
45815
45939
|
this.clickCase.emit({
|
|
@@ -45826,7 +45950,7 @@ class SearchResultComponent {
|
|
|
45826
45950
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
45827
45951
|
noop() { }
|
|
45828
45952
|
static ɵfac = function SearchResultComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || SearchResultComponent)(i0.ɵɵdirectiveInject(SearchResultViewItemComparatorFactory), i0.ɵɵdirectiveInject(AbstractAppConfig), i0.ɵɵdirectiveInject(ActivityService), i0.ɵɵdirectiveInject(CaseReferencePipe), i0.ɵɵdirectiveInject(PlaceholderService), i0.ɵɵdirectiveInject(BrowserService), i0.ɵɵdirectiveInject(SessionStorageService)); };
|
|
45829
|
-
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultComponent, selectors: [["ccd-search-result"]], inputs: { caseLinkUrlTemplate: "caseLinkUrlTemplate", jurisdiction: "jurisdiction", caseType: "caseType", caseState: "caseState", caseFilterFG: "caseFilterFG", resultView: "resultView", page: "page", paginationMetadata: "paginationMetadata", metadataFields: "metadataFields", selectionEnabled: "selectionEnabled", showOnlySelected: "showOnlySelected", preSelectedCases: "preSelectedCases", consumerSortingEnabled: "consumerSortingEnabled" }, outputs: { selection: "selection", changePage: "changePage", clickCase: "clickCase", sortHandler: "sortHandler" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [["case_reference", ""], [4, "ngIf"], [3, "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel", "pageChange", 4, "ngIf"], ["class", "notification", 4, "ngIf"], ["id", "search-result-heading__text", "tabindex", "-1", 1, "heading-h2"], ["class", "govuk-warning-text pagination-limit-warning", 4, "ngIf"], ["class", "pagination-top", 4, "ngIf"], ["class", "reset-selection", 4, "ngIf"], ["scope", "row"], ["class", "govuk-table__checkbox", 4, "ngIf"], ["class", "search-result-column-header", "scope", "col", 4, "ngFor", "ngForOf"], ["style", "width: 110px;", "scope", "col", 4, "ngIf"], [1, "govuk-warning-text", "pagination-limit-warning"], ["aria-hidden", "true", 1, "govuk-warning-text__icon"], [1, "govuk-warning-text__text"], [1, "govuk-warning-text__assistive"], [1, "pagination-top"], ["id", "search-result-summary__text", 1, "text-16"], [1, "govuk-!-font-weight-bold"], [1, "reset-selection"], ["href", "#", 1, "search-result-reset-link", 3, "click"], [1, "govuk-table__checkbox"], [1, "govuk-checkboxes__item"], ["id", "select-all", "name", "select-all", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "checked", "disabled"], ["for", "select-all", 1, "govuk-label", "govuk-checkboxes__label"], ["scope", "col", 1, "search-result-column-header"], [1, "search-result-column-label", 3, "click", "keyup"], ["class", "search-result-column-sort", 4, "ngIf"], [1, "search-result-column-sort"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter"], ["scope", "col", 2, "width", "110px"], [4, "ngFor", "ngForOf"], ["class", "govuk-table__checkbox", "scope", "col", 4, "ngIf"], ["class", "search-result-column-cell", "scope", "row", 4, "ngFor", "ngForOf"], ["scope", "col", 1, "govuk-table__checkbox"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "id", "name", "checked", "disabled"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], ["scope", "row", 1, "search-result-column-cell"], ["class", "govuk-link", 3, "routerLink", 4, "ngIf"], ["class", "text-16", 3, "visibility", 4, "ngIf"], [1, "govuk-link", 3, "routerLink"], ["class", "text-16", 4, "ngIf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute", 4, "ngIf", "ngIfElse"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute"], [3, "caseId", "displayMode"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "keyup", "id", "name", "checked", "disabled"], [3, "pageChange", "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], [1, "notification"]], template: function SearchResultComponent_Template(rf, ctx) { if (rf & 1) {
|
|
45953
|
+
static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: SearchResultComponent, selectors: [["ccd-search-result"]], inputs: { caseLinkUrlTemplate: "caseLinkUrlTemplate", jurisdiction: "jurisdiction", caseType: "caseType", caseState: "caseState", caseFilterFG: "caseFilterFG", resultView: "resultView", page: "page", paginationMetadata: "paginationMetadata", metadataFields: "metadataFields", selectionEnabled: "selectionEnabled", showOnlySelected: "showOnlySelected", preSelectedCases: "preSelectedCases", consumerSortingEnabled: "consumerSortingEnabled" }, outputs: { selection: "selection", changePage: "changePage", clickCase: "clickCase", sortHandler: "sortHandler" }, standalone: false, features: [i0.ɵɵNgOnChangesFeature], decls: 3, vars: 3, consts: [["case_reference", ""], [4, "ngIf"], [3, "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel", "pageChange", 4, "ngIf"], ["class", "notification", 4, "ngIf"], ["id", "search-result-heading__text", "tabindex", "-1", 1, "heading-h2"], ["class", "govuk-warning-text pagination-limit-warning", 4, "ngIf"], ["class", "pagination-top", 4, "ngIf"], ["class", "reset-selection", 4, "ngIf"], ["scope", "row"], ["class", "govuk-table__checkbox", 4, "ngIf"], ["class", "search-result-column-header", "scope", "col", 4, "ngFor", "ngForOf"], ["style", "width: 110px;", "scope", "col", 4, "ngIf"], [1, "govuk-warning-text", "pagination-limit-warning"], ["aria-hidden", "true", 1, "govuk-warning-text__icon"], [1, "govuk-warning-text__text"], [1, "govuk-warning-text__assistive"], [1, "pagination-top"], ["id", "search-result-summary__text", 1, "text-16"], [1, "govuk-!-font-weight-bold"], [1, "reset-selection"], ["href", "#", 1, "search-result-reset-link", 3, "click"], [1, "govuk-table__checkbox"], [1, "govuk-checkboxes__item"], ["id", "select-all", "name", "select-all", "type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "checked", "disabled"], ["for", "select-all", 1, "govuk-label", "govuk-checkboxes__label"], ["scope", "col", 1, "search-result-column-header"], [1, "search-result-column-label", 3, "click", "keyup"], ["class", "search-result-column-sort", 4, "ngIf"], [1, "search-result-column-sort"], ["href", "#", 1, "sort-widget", 3, "click", "keyup.enter", "innerHTML"], ["scope", "col", 2, "width", "110px"], [4, "ngFor", "ngForOf"], ["class", "govuk-table__checkbox", "scope", "col", 4, "ngIf"], ["class", "search-result-column-cell", "scope", "row", 4, "ngFor", "ngForOf"], ["scope", "col", 1, "govuk-table__checkbox"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "id", "name", "checked", "disabled"], [1, "govuk-label", "govuk-checkboxes__label", 3, "for"], ["scope", "row", 1, "search-result-column-cell"], ["class", "govuk-link", 3, "routerLink", 4, "ngIf"], ["class", "text-16", 3, "visibility", 4, "ngIf"], [1, "govuk-link", 3, "routerLink"], ["class", "text-16", 4, "ngIf"], [1, "text-16"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute", 4, "ngIf", "ngIfElse"], ["ccdLabelSubstitutor", "", 3, "caseField", "contextFields", "elementsToSubstitute"], [3, "caseId", "displayMode"], ["type", "checkbox", 1, "govuk-checkboxes__input", 3, "change", "keyup", "id", "name", "checked", "disabled"], [3, "pageChange", "visibilityLabel", "autoHide", "maxSize", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], [1, "notification"]], template: function SearchResultComponent_Template(rf, ctx) { if (rf & 1) {
|
|
45830
45954
|
i0.ɵɵtemplate(0, SearchResultComponent_table_0_Template, 16, 11, "table", 1)(1, SearchResultComponent_ccd_pagination_1_Template, 1, 6, "ccd-pagination", 2)(2, SearchResultComponent_div_2_Template, 4, 6, "div", 3);
|
|
45831
45955
|
} if (rf & 2) {
|
|
45832
45956
|
i0.ɵɵproperty("ngIf", ctx.hasResults() || ctx.hasDrafts());
|
|
@@ -45838,7 +45962,7 @@ class SearchResultComponent {
|
|
|
45838
45962
|
}
|
|
45839
45963
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SearchResultComponent, [{
|
|
45840
45964
|
type: Component,
|
|
45841
|
-
args: [{ selector: 'ccd-search-result', standalone: false, template: "<table *ngIf=\"hasResults() || hasDrafts()\">\n <caption>\n <h2 class=\"heading-h2\" id=\"search-result-heading__text\" tabindex=\"-1\">{{ (caseState ? 'Your cases' : 'Search result') | rpxTranslate}}</h2>\n\n <div class=\"govuk-warning-text pagination-limit-warning\" *ngIf=\"paginationLimitEnforced\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">{{'Warning' | rpxTranslate}}</span>\n {{'The total size of the result set is' | rpxTranslate}} {{paginationMetadata.totalResultsCount | number}}. {{'Only the first 10,000 records are available for display.' | rpxTranslate}}\n </strong>\n </div>\n\n <div *ngIf=\"(hasResults() || hasDrafts())\" class=\"pagination-top\">\n <output [attr.aria-label]=\"getTotalResults() + ' ' + ('results have been found' | rpxTranslate)\"></output>\n <span class=\"text-16\" id=\"search-result-summary__text\">{{'Showing' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getFirstResult() }}</span>\n {{'to' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getLastResult() }}</span>\n {{'of' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getTotalResults() }}</span> {{'results' | rpxTranslate}}</span>\n </div>\n <div *ngIf=\"(hasResults() || hasDrafts()) && selectionEnabled\" class=\"reset-selection\"\n [attr.aria-label]=\"'Reset selection' | rpxTranslate\">\n <span><a class=\"search-result-reset-link\" href=\"#\" (click)=\"clearSelection(); $event.preventDefault()\">{{'Reset case selection' | rpxTranslate}}</a></span>\n </div>\n </caption>\n <thead>\n <tr scope=\"row\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\" [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\" [attr.aria-labelledby]=\"'select-all'\">\n </label>\n </div>\n </td>\n <th *ngFor=\"let col of resultView.columns\" class=\"search-result-column-header\"\n [attr.aria-sort]=\"isSortAscending(col) === null ? null : (isSortAscending(col) ? 'ascending' : 'descending')\" scope=\"col\">\n <div>\n <div class=\"search-result-column-label\" (click)=\"sort(col)\" (keyup)=\"noop()\">\n {{ isTranslatable(col) ? (col.label | rpxTranslate) : col.label }}\n </div>\n <div *ngIf=\"comparator(col)\" class=\"search-result-column-sort\">\n <a (click)=\"sort(col); $event.preventDefault()\" (keyup.enter)=\"sort(col)\" class=\"sort-widget\" [attr.aria-label]=\"'Sort ' + col.label | rpxTranslate\" href=\"#\"
|
|
45965
|
+
args: [{ selector: 'ccd-search-result', standalone: false, template: "<table *ngIf=\"hasResults() || hasDrafts()\">\n <caption>\n <h2 class=\"heading-h2\" id=\"search-result-heading__text\" tabindex=\"-1\">{{ (caseState ? 'Your cases' : 'Search result') | rpxTranslate}}</h2>\n\n <div class=\"govuk-warning-text pagination-limit-warning\" *ngIf=\"paginationLimitEnforced\">\n <span class=\"govuk-warning-text__icon\" aria-hidden=\"true\">!</span>\n <strong class=\"govuk-warning-text__text\">\n <span class=\"govuk-warning-text__assistive\">{{'Warning' | rpxTranslate}}</span>\n {{'The total size of the result set is' | rpxTranslate}} {{paginationMetadata.totalResultsCount | number}}. {{'Only the first 10,000 records are available for display.' | rpxTranslate}}\n </strong>\n </div>\n\n <div *ngIf=\"(hasResults() || hasDrafts())\" class=\"pagination-top\">\n <output [attr.aria-label]=\"getTotalResults() + ' ' + ('results have been found' | rpxTranslate)\"></output>\n <span class=\"text-16\" id=\"search-result-summary__text\">{{'Showing' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getFirstResult() }}</span>\n {{'to' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getLastResult() }}</span>\n {{'of' | rpxTranslate}}\n <span class=\"govuk-!-font-weight-bold\">{{ getTotalResults() }}</span> {{'results' | rpxTranslate}}</span>\n </div>\n <div *ngIf=\"(hasResults() || hasDrafts()) && selectionEnabled\" class=\"reset-selection\"\n [attr.aria-label]=\"'Reset selection' | rpxTranslate\">\n <span><a class=\"search-result-reset-link\" href=\"#\" (click)=\"clearSelection(); $event.preventDefault()\">{{'Reset case selection' | rpxTranslate}}</a></span>\n </div>\n </caption>\n <thead>\n <tr scope=\"row\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-all\" name=\"select-all\" type=\"checkbox\" (change)=\"selectAll()\" [checked]=\"allOnPageSelected()\" [disabled]=\"!canAnyBeShared()\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-all\" [attr.aria-labelledby]=\"'select-all'\">\n </label>\n </div>\n </td>\n <th *ngFor=\"let col of resultView.columns\" class=\"search-result-column-header\"\n [attr.aria-sort]=\"isSortAscending(col) === null ? null : (isSortAscending(col) ? 'ascending' : 'descending')\" scope=\"col\">\n <div>\n <div class=\"search-result-column-label\" (click)=\"sort(col)\" (keyup)=\"noop()\">\n {{ isTranslatable(col) ? (col.label | rpxTranslate) : col.label }}\n </div>\n <div *ngIf=\"comparator(col)\" class=\"search-result-column-sort\">\n <a (click)=\"sort(col); $event.preventDefault()\" (keyup.enter)=\"sort(col)\" class=\"sort-widget\" [innerHTML]=\"sortWidget(col)\" [attr.aria-label]=\"'Sort ' + col.label | rpxTranslate\" href=\"#\"></a>\n </div>\n </div>\n </th>\n <th *ngIf=\"activityEnabled()\" style=\"width: 110px;\" scope=\"col\">​</th>\n </tr>\n </thead>\n\n <tbody>\n <!-- sorted by consumer -->\n <ng-container *ngIf=\"consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n <!-- sorted by toolkit -->\n <ng-container *ngIf=\"!consumerSortingEnabled\">\n <tr *ngFor=\"let result of resultView.results | ccdSortSearchResult : sortParameters | paginate: { itemsPerPage: paginationPageSize, currentPage: selected.page, totalItems: resultTotal }\">\n <td *ngIf=\"selectionEnabled\" class=\"govuk-table__checkbox\" scope=\"col\">\n <div class=\"govuk-checkboxes__item\">\n <input class=\"govuk-checkboxes__input\" id=\"select-{{ result.case_id }}\" name=\"select-{{ result.case_id }}\"\n type=\"checkbox\" (change)=\"changeSelection(result)\" [checked]=\"isSelected(result)\" [disabled]=\"!canBeShared(result)\" (keyup)=\"onKeyUp($event, result)\" />\n <label class=\"govuk-label govuk-checkboxes__label\" for=\"select-{{ result.case_id }}\" [attr.aria-labelledby]=\"'select-' + result.case_id\">\n </label>\n </div>\n </td>\n <td class=\"search-result-column-cell\" *ngFor=\"let col of resultView.columns; let colIndex = index\" scope=\"row\">\n\n <a *ngIf=\"colIndex == 0\" [routerLink]=\"prepareCaseLinkUrl(result.case_id)\"\n attr.aria-label=\"go to case with Case reference:{{ result.case_id | ccdCaseReference }}\" class=\"govuk-link\">\n <ng-container class=\"text-16\" *ngIf=\"!hideRows\">\n <ccd-field-read *ngIf=\"draftPrefixOrGet(col, result); else case_reference\"\n ccdLabelSubstitutor [caseField]=\"getColumnsWithPrefix(result.columns[col.case_field_id], result)\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n <ng-template #case_reference>{{result.case_id | ccdCaseReference}}</ng-template>\n </ng-container>\n </a>\n <div *ngIf=\"colIndex != 0\" class=\"text-16\" [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-field-read ccdLabelSubstitutor\n [caseField]=\"result.columns[col.case_field_id]\"\n [contextFields]=\"result.hydrated_case_fields\"\n [elementsToSubstitute]=\"['value']\"></ccd-field-read>\n </div>\n </td>\n <td *ngIf=\"activityEnabled()\">\n <div [style.visibility]=\"hideRows ? 'hidden' : 'visible'\">\n <ccd-activity [caseId]=\"result.case_id\" [displayMode]=\"ICON\"></ccd-activity>\n </div>\n </td>\n </tr>\n </ng-container>\n\n </tbody>\n</table>\n\n<ccd-pagination\n *ngIf=\"hasResults()\"\n (pageChange)=\"goToPage($event)\"\n [visibilityLabel]=\"hideRows ? 'hidden' : 'visible'\"\n [autoHide]=\"true\"\n [maxSize]=\"8\"\n [screenReaderPaginationLabel]=\"'Pagination'\"\n [screenReaderPageLabel]=\"page\"\n [screenReaderCurrentLabel]=\"'You\\'re on page'\"></ccd-pagination>\n\n<div *ngIf=\"!(hasResults() || hasDrafts())\" class=\"notification\"\n[attr.aria-describedby]=\"'No cases found. Try using different filters.' | rpxTranslate\">\n{{'No cases found. Try using different filters.' | rpxTranslate}}\n</div>\n", styles: ["table thead tr th{vertical-align:top}table tbody tr td{font-size:16px;word-wrap:break-word}table tbody tr td a{float:left}table .caseid-col{white-space:nowrap}.notification{text-align:center;padding:30px 0;margin-top:75px}a:hover{color:#005ea5}.search-result-reset-link{padding-right:15px;padding-left:15px}.search-result-column-header{width:unset;table-layout:normal}.search-result-column-header div{display:table-cell;width:auto}@media screen and (max-width:379px){.search-result-column-header div{display:block;float:right}}.search-result-column-label{font-size:16px;font-weight:700;word-wrap:break-word;cursor:pointer;padding-right:15px}.search-result-column-sort{font-size:16px}.sort-widget{cursor:pointer;text-decoration:none;color:#231f20}span.heading-medium{margin-top:-20px}.govuk-table__checkbox{vertical-align:middle;padding-left:3px}#search-result-heading__text:focus{outline:none}\n"] }]
|
|
45842
45966
|
}], () => [{ type: SearchResultViewItemComparatorFactory }, { type: AbstractAppConfig }, { type: ActivityService }, { type: CaseReferencePipe }, { type: PlaceholderService }, { type: BrowserService }, { type: SessionStorageService }], { caseLinkUrlTemplate: [{
|
|
45843
45967
|
type: Input
|
|
45844
45968
|
}], jurisdiction: [{
|