1"use strict"; 2(self["__LOADABLE_LOADED_CHUNKS__"] = self["__LOADABLE_LOADED_CHUNKS__"] || []).push([[7715],{ 3 4/***/ 81220 5(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 6 7 8// EXPORTS 9__webpack_require__.d(__webpack_exports__, { 10 A: () => (/* binding */ AcademicManual_AcademicManual) 11}); 12 13// EXTERNAL MODULE: ./node_modules/react/index.js 14var react = __webpack_require__(29633); 15// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js 16var react_router = __webpack_require__(45666); 17// EXTERNAL MODULE: ./node_modules/prop-types/index.js 18var prop_types = __webpack_require__(86627); 19var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 20// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 21var styled_components_browser_esm = __webpack_require__(67780); 22// EXTERNAL MODULE: ./src/app/features/common/button/components.styled/Button.styled.js 23var Button_styled = __webpack_require__(86595); 24// EXTERNAL MODULE: ./src/app/theme/spacing.js 25var spacing = __webpack_require__(59778); 26;// ./src/app/features/AcademicManual/AcademicManual.styled.js 27 28 29 30const AcademicManualStyled = styled_components_browser_esm["default"].div` 31 display: flex; 32 flex-direction: column; 33 width: 100%; 34 35 .keyline { 36 display: block; 37 width: 100%; 38 height: 3px; 39 margin: ${spacing/* default */.A.spacing24} 0 ${spacing/* default */.A.spacing20} 0; 40 background-color: ${(p) => p.theme.colours.grey03}; 41 } 42 43 .keyline--thin { 44 height: 3px; 45 margin: ${spacing/* default */.A.spacing16} 0 ${spacing/* default */.A.spacing20} 0; 46 } 47 .list-item-container { 48 width: 100%; 49 } 50 .btn-container { 51 width: 100%; 52 ${Button_styled/* default */.A} { 53 margin-right: ${spacing/* default */.A.spacing8}; 54 } 55 margin-bottom: ${spacing/* default */.A.spacing32}; 56 } 57 @media screen and (max-width: ${(p) => p.theme.layout.breakpoints.small}px) { 58 ${Button_styled/* default */.A} { 59 width: 100%; 60 margin-bottom: ${spacing/* default */.A.spacing16}; 61 } 62 } 63`; 64 65// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules 66var common = __webpack_require__(70910); 67// EXTERNAL MODULE: ./src/app/core/util/hooks/useQuery.js 68var useQuery = __webpack_require__(47988); 69// EXTERNAL MODULE: ./src/app/features/listings/components/PanelList.js + 1 modules 70var PanelList = __webpack_require__(7943); 71// EXTERNAL MODULE: ./src/app/features/listings/components/StripeList.js + 2 modules 72var StripeList = __webpack_require__(98288); 73;// ./src/app/features/listings/components.styled/ArchiveListItem.styled.js 74 75 76const ArchiveListItemStyled = styled_components_browser_esm["default"].div` 77 display: flex; 78 flex-direction: row; 79 gap: ${spacing/* default */.A.spacing12}; 80 padding: ${spacing/* default */.A.spacing12} ${spacing/* default */.A.spacing16}; 81 .list-item--year { 82 display: block; 83 min-width: 112px; 84 color: ${(p) => p.theme.colours.bluePrimary}; 85 cursor: pointer; 86 &:hover { 87 color: ${(p) => p.theme.colours.blueSecondary}; 88 text-decoration: none; 89 } 90 &::before { 91 content: '\\e931'; 92 color: ${(p) => p.theme.colours.bluePrimary}; 93 font-family: ${(p) => p.theme.font.family.icon}; 94 text-decoration: underline; 95 margin-right: ${spacing/* default */.A.spacing16}; 96 &:hover { 97 color: ${(p) => p.theme.colours.blueSecondary}; 98 font-weight: 300; 99 text-decoration: none; 100 } 101 } 102 &:hover::before { 103 color: ${(p) => p.theme.colours.blueSecondary}; 104 font-weight: 300; 105 } 106 } 107 108 &:nth-child(odd) { 109 background: ${(p) => p.theme.colours.zebraStripeDark}; 110 } 111 112 &:nth-child(even) { 113 background: ${(p) => p.theme.colours.zebraStripeLight}; 114 } 115`; 116 117// EXTERNAL MODULE: ./src/app/core/util/getDocumentTitle.js 118var getDocumentTitle = __webpack_require__(98181); 119;// ./src/app/features/listings/components/ArchiveListItem.js 120 121 122 123 124function ArchiveListItem({ item }) { 125 const { year, document, simpleDescription } = item; 126 if (!document) return null; 127 return /* @__PURE__ */ react.createElement(ArchiveListItemStyled, null, /* @__P
127URE__ */ react.createElement( 128 "a", 129 { 130 href: document?.sys?.uri, 131 className: "list-item--year", 132 title: `Download academic manual archive year ${(0,getDocumentTitle/* default */.A)({ 133 ...document, 134 entryTitle: year.entryTitle 135 })}` 136 }, 137 year.entryTitle 138 ), /* @__PURE__ */ react.createElement("div", { className: "list-item--description" }, simpleDescription)); 139} 140ArchiveListItem.propTypes = { 141 item: (prop_types_default()).object 142}; 143/* harmony default export */ const components_ArchiveListItem = (ArchiveListItem); 144 145;// ./src/app/features/listings/components.styled/ArchiveList.styled.js 146 147 148const ArchiveListStyled = styled_components_browser_esm["default"].div` 149 display: flex; 150 flex-direction: column; 151 .archive-headers { 152 display: flex; 153 flex-direction: row; 154 padding-left: ${spacing/* default */.A.spacing32}; 155 margin-bottom: ${spacing/* default */.A.spacing16}; 156 font-family: ${(p) => p.theme.font.family.bold}; 157 &--year { 158 min-width: 112px; 159 } 160 } 161`; 162 163;// ./src/app/features/listings/components/ArchiveList.js 164 165 166 167 168function ArchiveList({ items }) { 169 return /* @__PURE__ */ react.createElement(ArchiveListStyled, null, /* @__PURE__ */ react.createElement("div", { className: "archive-headers" }, /* @__PURE__ */ react.createElement("div", { className: "archive-headers--year" }, "Year"), /* @__PURE__ */ react.createElement("div", { className: "archive-headers--description" }, "Description")), items.map((i, idx) => { 170 return /* @__PURE__ */ react.createElement(components_ArchiveListItem, { item: i, key: idx }); 171 })); 172} 173ArchiveList.propTypes = { 174 items: (prop_types_default()).array 175}; 176/* harmony default export */ const components_ArchiveList = (ArchiveList); 177 178// EXTERNAL MODULE: ./src/app/core/util/hooks/useDefaults.js + 1 modules 179var useDefaults = __webpack_require__(19225); 180;// ./src/app/features/AcademicManual/AcademicManual.js 181 182 183 184 185 186 187 188 189 190 191function AcademicManual({ manual }) { 192 const { chapters, furtherReading, relevantLinks, archive } = manual; 193 const { defaults } = (0,useDefaults/* default */.A)("siteConfiguration"); 194 const accYear = defaults?.currentAcademicYear?.entryTitle; 195 const query = (0,useQuery/* useQuery */.I)(); 196 const history = (0,react_router/* useHistory */.W6)(); 197 const view = query.get("view"); 198 const btnClickHandler = (view2) => { 199 return history.push(`?view=${view2}`); 200 }; 201 const active = view === "archive"; 202 return /* @__PURE__ */ react.createElement(AcademicManualStyled, null, /* @__PURE__ */ react.createElement("div", { className: "btn-container" }, /* @__PURE__ */ react.createElement( 203 common/* Button */.$n, 204 { 205 onClick: () => btnClickHandler("current"), 206 colour: !active ? "red" : "grey", 207 title: accYear, 208 as: "button" 209 }, 210 accYear 211 ), /* @__PURE__ */ react.createElement( 212 common/* Button */.$n, 213 { 214 onClick: () => btnClickHandler("archive"), 215 colour: active ? "red" : "grey", 216 title: "Archive", 217 as: "button" 218 }, 219 "Archive" 220 )), !active ? /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement("div", { className: "list-item-container" }, chapters?.length > 0 && /* @__PURE__ */ react.createElement(PanelList/* default */.A, { items: chapters })), /* @__PURE__ */ react.createElement("span", { className: "keyline keyline--thin" }), /* @__PURE__ */ react.createElement("div", { className: "list-item-container" }, furtherReading?.length > 0 && /* @__PURE__ */ react.createElement(PanelList/* default */.A, { items: furtherReading }))) : /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement("div", { className: "list-item-container" }, /* @__PURE__ */ react.createElement(components_ArchiveList, { items: archive })), /* @__PURE__ */ react.createElement("span", { className: "keyline keyline--thin" }), /* @__PURE__ */ react.createElement("div", { className: "list-item-container" }, /* @__PURE__ */ react.createElement(StripeList/* default */.A, { items: relevantLinks })))); 221} 222AcademicManual.propTypes = { 223 manual: (prop_types_default()).object 224}; 225/* harmony default export */ const AcademicManual_AcademicManual = (AcademicManual); 226 227
228/***/ }, 229 230/***/ 13837 231(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 232 233 234// EXPORTS 235__webpack_require__.d(__webpack_exports__, { 236 A: () => (/* binding */ components_JumpLinkDynamics) 237}); 238 239// EXTERNAL MODULE: ./node_modules/react/index.js 240var react = __webpack_require__(29633); 241// EXTERNAL MODULE: ./node_modules/prop-types/index.js 242var prop_types = __webpack_require__(86627); 243var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 244// EXTERNAL MODULE: ./node_modules/react-scroll/modules/index.js 245var modules = __webpack_require__(95687); 246// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 247var styled_components_browser_esm = __webpack_require__(67780); 248;// ./src/app/features/common/Link/components/JumpLinkDynamics.styled.js 249 250const JumpLinkDynamicsStyled = styled_components_browser_esm["default"].div` 251 font-size: 1.125rem; 252 line-height: 1; 253 254 ${(props) => { 255 if (props.bold) { 256 return (0,styled_components_browser_esm.css)` 257 a { 258 color: ${(p) => p.theme.colours.bluePrimary}; 259 font-family: ${(p) => p.theme.font.family.bold}; 260 text-decoration: none; 261 262 &:hover { 263 color: ${(p) => p.theme.colours.blueSecondary}; 264 text-decoration: underline; 265 cursor: pointer; 266 } 267 } 268 `; 269 } else { 270 return (0,styled_components_browser_esm.css)` 271 a { 272 color: ${(p) => p.theme.colours.bluePrimary}; 273 font-family: ${(p) => p.theme.font.family.regular}; 274 text-decoration: none; 275 276 &:hover { 277 color: ${(p) => p.theme.colours.blueSecondary}; 278 text-decoration: underline; 279 cursor: pointer; 280 } 281 } 282 `; 283 } 284}} 285`; 286/* harmony default export */ const JumpLinkDynamics_styled = (JumpLinkDynamicsStyled); 287 288;// ./src/app/features/common/Link/components/JumpLinkDynamics.js 289 290 291 292 293const JumpLinkDynamics = ({ linkText }) => { 294 return /* @__PURE__ */ react.createElement(JumpLinkDynamics_styled, { bold: true }, /* @__PURE__ */ react.createElement(modules/* Link */.N_, { to: "dynamicscrm", smooth: true, as: "link" }, linkText)); 295}; 296JumpLinkDynamics.propTypes = { 297 linkText: (prop_types_default()).string 298}; 299/* harmony default export */ const components_JumpLinkDynamics = (JumpLinkDynamics); 300 301 302/***/ }, 303 304/***/ 16014 305(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 306 307 308// EXPORTS 309__webpack_require__.d(__webpack_exports__, { 310 A: () => (/* binding */ callToActionSection) 311}); 312 313// EXTERNAL MODULE: ./node_modules/react/index.js 314var react = __webpack_require__(29633); 315// EXTERNAL MODULE: ./node_modules/prop-types/index.js 316var prop_types = __webpack_require__(86627); 317var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 318// EXTERNAL MODULE: ./node_modules/react-scroll/modules/index.js 319var modules = __webpack_require__(95687); 320// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 321var styled_components_browser_esm = __webpack_require__(67780); 322// EXTERNAL MODULE: ./src/app/features/common/button/components.styled/Button.styled.js 323var Button_styled = __webpack_require__(86595); 324// EXTERNAL MODULE: ./src/app/features/common/Heading/components.styled/Heading.styled.js 325var Heading_styled = __webpack_require__(21721); 326// EXTERNAL MODULE: ./src/app/features/common/paragraph/components.styled/Paragraph.styled.js 327var Paragraph_styled = __webpack_require__(66469); 328;// ./src/app/features/common/callToActionSection/components.styled/CallToActionSection.styled.js 329 330 331 332 333const CallToActionSectionStyled = styled_components_browser_esm["default"].div` 334 ${Heading_styled/* DynamicHeading */.G} { 335 line-height: 1.37; 336 } 337 338 ${Button_styled/* default */.A} { 339 width: 100%; 340 } 341 342 @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.medium}px) { 343 ${Button_styled/* default */.A} { 344 width: auto; 345 } 346 } 347 348 @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.large}px) { 349 ${Heading_styled/* DynamicHeading */.G} { 350 max-width: 80%; 351 } 352 353 ${Paragraph_styled/* ParagraphStyled */.y} { 354 max-width: 80%; 355 } 356 } 357`; 358/* harmony default export */ const CallToActionSection_styled = (CallToActionSectionStyled); 359 360// EXTERNAL MODULE: ./src/app/features/common/Heading/components/Heading.js 361var Heading = __webpack_require__(40789); 362// EXTERNAL MODULE: ./src/app/features/common/paragraph/components/Paragraph.js 363var Paragraph = __webpack_require__(52373); 364// EXTERNAL MODULE: ./src/app/features/common/button/components/Button.js 365var Button = __webpack_require__(51333); 366;// ./src/app/features/listings/listingFilters/components.styled/KeywordFilter.styled.js 367 368const KeywordFilterStyled = styled_components_browser_esm["default"].div` 369 margin-bottom: 2rem; 370`; 371/* harmony default export */ const KeywordFilter_styled = (KeywordFilterStyled); 372 373// EXTERNAL MODULE: ./src/app/features/common/SearchInputWithSubmit/components/SearchInputWithSubmit.js + 1 modules 374var SearchInputWithSubmit = __webpack_require__(51461); 375;// ./src/app/features/listings/listingFilters/components/KeywordFilter.js 376 377 378 379 380const KeywordFilter = ({ 381 placeholder, 382 term, 383 updateTerm, 384 targetUrl, 385 buttonLabel 386}) => { 387 const [value, setValue] = (0,react.useState)(term); 388 const handleSubmit = (e) => { 389 updateTerm(value); 390 e.preventDefault(); 391 }; 392 const handleOnChange = (e) => { 393 setValue(e.target.value); 394 }; 395 const newLocation = targetUrl ? `${targetUrl}${value}` : void 0; 396 const handleEnterSubmit = (e) => { 397 if (e.keyCode === 13) { 398 e.preventDefault(); 399 location.href = newLocation; 400 } 401 }; 402 return /* @__PURE__ */ react.createElement(KeywordFilter_styled, null, /* @__P
402URE__ */ react.createElement( 403 SearchInputWithSubmit/* default */.A, 404 { 405 placeholder, 406 value, 407 onChange: handleOnChange, 408 onSubmit: handleSubmit, 409 newLocation, 410 buttonLabel, 411 onKeyDown: handleEnterSubmit 412 } 413 )); 414}; 415KeywordFilter.propTypes = { 416 placeholder: (prop_types_default()).string, 417 term: (prop_types_default()).string, 418 updateTerm: (prop_types_default()).func.isRequired, 419 buttonLabel: (prop_types_default()).string, 420 targetUrl: (prop_types_default()).string 421}; 422KeywordFilter.defaultProps = { 423 placeholder: "", 424 buttonLabel: "", 425 targetUrl: "", 426 term: "", 427 updateTerm: () => { 428 } 429}; 430/* harmony default export */ const components_KeywordFilter = (KeywordFilter); 431 432// EXTERNAL MODULE: ./src/app/features/common/warning/components/Warning.js + 1 modules 433var Warning = __webpack_require__(2383); 434// EXTERNAL MODULE: ./src/app/core/util/hooks/useQuery.js 435var useQuery = __webpack_require__(47988); 436// EXTERNAL MODULE: ./src/app/features/common/dynamicsCRM/util.js 437var util = __webpack_require__(87800); 438;// ./src/app/features/common/callToActionSection/components/CallToActionSection.js 439 440 441 442 443 444 445 446 447 448 449 450const CallToActionSection = ({ className, callToActionSection }) => { 451 let targetUrl = "#geckoform"; 452 let targetText = "Sign up now"; 453 const query = (0,useQuery/* useQuery */.I)(); 454 const alpPrefix = (0,util/* utmToAlpPrefix */.R6)(query); 455 const scrollFunc = () => { 456 modules/* scroller */.XG.scrollTo(`${callToActionSection?.callToAction?.anchorTo}`, { 457 duration: 1500, 458 delay: 100, 459 smooth: true 460 //containerId: 'ContainerElementID', 461 //offset: 50, // Scrolls to element + 50 pixels down the page 462 }); 463 }; 464 const getCallToAction = () => { 465 if (callToActionSection?.callToAction != null) { 466 if (callToActionSection?.callToAction?.sys?.contentTypeId === "searchBar") { 467 return /* @__PURE__ */ react.createElement( 468 components_KeywordFilter, 469 { 470 targetUrl: callToActionSection.callToAction.targetUrl.indexOf("?") > 0 ? `${callToActionSection.callToAction.targetUrl}&${alpPrefix}` : `${callToActionSection.callToAction.targetUrl}?${alpPrefix}`, 471 placeholder: callToActionSection?.placeholder, 472 buttonLabel: callToActionSection?.buttonLabel 473 } 474 ); 475 } 476 if (callToActionSection?.callToAction?.sys?.contentTypeId === "link") { 477 targetUrl = callToActionSection?.callToAction?.url.indexOf("?") > 0 ? `${callToActionSection?.callToAction?.url}&${alpPrefix}` : `${callToActionSection?.callToAction?.url}?${alpPrefix}`; 478 targetText = callToActionSection?.callToAction?.entryTitle; 479 return /* @__PURE__ */ react.createElement(Button/* default */.A, { colour: "red", uri: targetUrl, title: targetText }); 480 } 481 if (callToActionSection?.callToAction?.sys?.contentTypeId === "anchorLink") { 482 targetText = callToActionSection?.callToAction?.entryTitle; 483 return /* @__PURE__ */ react.createElement(Button/* default */.A, { onClick: scrollFunc, colour: "red", title: targetText }); 484 } 485 return null; 486 } 487 if (callToActionSection.callToActionLink != null) { 488 targetUrl = callToActionSection.callToActionLink.url.indexOf("?") > 0 ? `${callToActionSection.callToActionLink.url}&${alpPrefix}` : `${callToActionSection.callToActionLink.url}?${alpPrefix}`; 489 targetText = callToActionSection.callToActionLink.entryTitle; 490 return /* @__PURE__ */ react.createElement(react.Fragment, null, /* @__PURE__ */ react.createElement(Button/* default */.A, { colour: "red", uri: targetUrl, title: targetText }), /* @__PURE__ */ react.createElement(Warning/* default */.A, null, "Please update this to use the new Call to action field")); 491 } 492 }; 493 return /* @__PURE__ */ react.createElement(CallToActionSection_styled, { className }, /* @__PURE__ */ react.createElement("section", null, callToActionSection.heading && /* @__PURE__ */ react.createElement(Heading/* default */.A, { level: "1" }, callToActionSection.heading), callToActionSection.text && /* @__PURE__ */ react.createElement(Paragraph/* default */.A, null, callToActionSection.text), getCallToAction())); 494}; 495CallToActionSection.propTypes = {
496 className: (prop_types_default()).string, 497 callToActionSection: (prop_types_default()).object 498}; 499CallToActionSection.defaultProps = { 500 className: "call-to-action-section", 501 callToActionSection: { 502 heading: "", 503 text: "" 504 } 505}; 506/* harmony default export */ const components_CallToActionSection = (CallToActionSection); 507 508;// ./src/app/features/common/callToActionSection/index.js 509 510/* harmony default export */ const callToActionSection = (components_CallToActionSection); 511 512 513/***/ }, 514 515/***/ 72034 516(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 517 518/* harmony export */ __webpack_require__.d(__webpack_exports__, { 519/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) 520/* harmony export */ }); 521/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29633); 522/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86627); 523/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); 524/* harmony import */ var _core_util_isClient__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74831); 525/* harmony import */ var _util_legacy__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40274); 526/* harmony import */ var _core_util_hooks_useQuery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(47988); 527 528 529 530 531 532const DynamicsCRMForm = ({ websiteID, formblockID, formType, formSubType }) => { 533 const query = (0,_core_util_hooks_useQuery__WEBPACK_IMPORTED_MODULE_4__/* .useQuery */ .I)(); 534 const [hostname, setHostname] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)( 535 "4369923a71f2455aae0eb1379e742e28.svc.dynamics.com" 536 ); 537 (0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => { 538 if ((0,_core_util_isClient__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .A)()) { 539 if (!window.location.href.toString().includes("kcl.ac.uk")) { 540 setHostname("d07ce24ceaa641548f81227082daa1a3.svc.dynamics.com"); 541 } 542 window?.MsCrmMkt && window.MsCrmMkt.MsCrmFormLoader.on( 543 "afterFormLoad", 544 () => (0,_util_legacy__WEBPACK_IMPORTED_MODULE_3__/* .afterFormLoadFunc */ .vH)(query) 545 ); 546 window?.MsCrmMkt && window.MsCrmMkt.MsCrmFormLoader.on( 547 "afterFormSubmit", 548 () => (0,_util_legacy__WEBPACK_IMPORTED_MODULE_3__/* .afterFormSubmitFunc */ .Fk)(formType, formSubType) 549 ); 550 } 551 }, [query]); 552 return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { id: "geckoform", "data-form-block-id": formblockID }
552), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement( 553 "script", 554 { 555 src: `https://mktdplp102cdn.azureedge.net/public/latest/js/form-loader.js?v=1.76.2008.0` 556 } 557 ), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { id: `d${websiteID}` }), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement( 558 "script", 559 { 560 src: `https://mktdplp102cdn.azureedge.net/public/latest/js/ws-tracking.js?v=1.76.2008.0` 561 } 562 ), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement( 563 "div", 564 { 565 className: "d365-mkt-config", 566 style: { display: "none" }, 567 "data-website-id": websiteID, 568 "data-hostname": hostname 569 } 570 )); 571}; 572DynamicsCRMForm.propTypes = { 573 websiteID: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 574 formblockID: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 575 formType: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 576 formSubType: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string) 577}; 578/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (DynamicsCRMForm); 579 580 581/***/ }, 582 583/***/ 7943 584(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 585 586 587// EXPORTS 588__webpack_require__.d(__webpack_exports__, { 589 A: () => (/* binding */ components_PanelList) 590}); 591 592// EXTERNAL MODULE: ./node_modules/react/index.js 593var react = __webpack_require__(29633); 594// EXTERNAL MODULE: ./node_modules/prop-types/index.js 595var prop_types = __webpack_require__(86627); 596var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 597// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 598var styled_components_browser_esm = __webpack_require__(67780); 599// EXTERNAL MODULE: ./src/app/features/common/Panel/components.styled/Panel.styled.js 600var Panel_styled = __webpack_require__(6137); 601// EXTERNAL MODULE: ./src/app/theme/spacing.js 602var spacing = __webpack_require__(59778); 603;// ./src/app/features/listings/components.styled/PanelList.styled.js 604 605 606 607const PanelListStyled = styled_components_browser_esm["default"].div` 608 display: flex; 609 flex-flow: row wrap; 610 flex-grow: 1; 611 row-gap: ${spacing/* default */.A.spacing24}; 612 justify-content: space-between; 613 width: 100%; 614 margin-bottom: ${spacing/* default */.A.spacing32}; 615 .panel-list--item { 616 max-width: 32%; 617 flex-grow: 1; 618 background-color: ${(p) => p.theme.colours.grey01}; 619 li { 620 margin-bottom: ${spacing/* default */.A.spacing12}; 621 a { 622 color: ${(p) => p.theme.colours.bluePrimary}; 623 font-family: ${(p) => p.theme.font.family.regular}; 624 font-weight: 400; 625 text-decoration: underline; 626 627 &:hover { 628 color: ${(p) => p.theme.colours.blueSecondary}; 629 text-decoration: underline; 630 } 631 632 &:visited { 633 color: ${(p) => p.theme.colours.bluePrimary}; 634 } 635 } 636 } 637 } 638 639 a.heading--link { 640 color: ${(p) => p.theme.colours.bluePrimary}; 641 font-family: ${(p) => p.theme.font.family.bold}; 642 font-weight: 400; 643 text-decoration: none; 644 645 &:hover { 646 color: ${(p) => p.theme.colours.blueSecondary}; 647 text-decoration: underline; 648 } 649 650 &:visited { 651 color: ${(p) => p.theme.colours.bluePrimary}; 652 } 653 } 654 655 ${Panel_styled/* default */.A} { 656 margin-bottom: 0; 657 height: 100%; 658 } 659 660 .text-center { 661 text-align: center; 662 } 663 664 .keyline { 665 display: block; 666 width: 100%; 667 height: 3px; 668 margin: ${spacing/* default */.A.spacing24} 0 ${spacing/* default */.A.spacing20} 0; 669 background-color: ${(p) => p.theme.colours.grey03}; 670 } 671 672 .keyline--thin { 673 height: 3px; 674 margin: ${spacing/* default */.A.spacing16} 0 ${spacing/* default */.A.spacing20} 0; 675 } 676 @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.medium}px) { 677 .panel-list--item { 678 width: 48%; 679 } 680 } 681 @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.large}px) { 682 .panel-list--item { 683 width: 30%; 684 } 685 } 686`; 687/* harmony default export */ const PanelList_styled = (PanelListStyled); 688 689// EXTERNAL MODULE: ./src/app/features/listings/components/PanelListItem.js 690var PanelListItem = __webpack_require__(73997); 691;// ./src/app/features/listings/components/PanelList.js 692 693 694 695 696const PanelList = ({ items }) => { 697 return /* @__PURE__ */ react.createElement(PanelList_styled, null, items.map((i, idx) => /* @__PURE__ */ react.createElement(PanelListItem/* default */.A, { key: idx, item: i, className: "panel-list--item" }))); 698}; 699PanelList.propTypes = { 700 items: (prop_types_default()).array 701}; 702/* harmony default export */ const components_PanelList = (PanelList); 703 704 705/***/ }, 706 707/***/ 73997 708(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 709 710/* harmony export */ __webpack_require__.d(__webpack_exports__, { 711/* harmony export */ A: () => (__WEBPACK_DEFAULT_EXPORT__) 712/* harmony export */ }); 713/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(29633); 714/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(86627); 715/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_1__); 716/* harmony import */ var _features_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70910); 717/* harmony import */ var _features_common_utils_getEntryLink__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(40153); 718 719 720 721 722const PanelListItem = ({ item, className }) => { 723 const { entryTitle, childEntries, entryDescription } = item; 724 return /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className }
724, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Panel */ .Zk, null, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("div", { className: "text-center" }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Heading */ .DZ, { level: 3, visualLevel: "heading5" }, " ", /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Link */ .N_, { uri: (0,_features_common_utils_getEntryLink__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .A)(item), className: "heading--link" }, entryTitle))), /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("span", { className: "keyline keyline--thin" }), childEntries ? /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("ul", null, childEntries?.map((entry) => { 725 const { entryTitle: entryTitle2, sys } = entry; 726 return sys.uri && /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement("li", { key: sys.id }, /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Link */ .N_, { uri: sys.uri }, entryTitle2)); 727 })) : /* @__PURE__ */ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_features_common__WEBPACK_IMPORTED_MODULE_2__/* .Paragraph */ .fz, { small: true }, entryDescription))); 728}; 729PanelListItem.propTypes = { 730 className: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 731 item: prop_types__WEBPACK_IMPORTED_MODULE_1___default().shape({ 732 entryTitle: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 733 entryDescription: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().string), 734 sys: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().object), 735 childEntries: (prop_types__WEBPACK_IMPORTED_MODULE_1___default().array) 736 }) 737}; 738/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PanelListItem); 739 740 741/***/ }, 742 743/***/ 98288 744(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 745 746 747// EXPORTS 748__webpack_require__.d(__webpack_exports__, { 749 A: () => (/* binding */ components_StripeList) 750}); 751 752// EXTERNAL MODULE: ./node_modules/react/index.js 753var react = __webpack_require__(29633); 754// EXTERNAL MODULE: ./node_modules/prop-types/index.js 755var prop_types = __webpack_require__(86627); 756var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 757// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 758var styled_components_browser_esm = __webpack_require__(67780); 759// EXTERNAL MODULE: ./src/app/theme/spacing.js 760var spacing = __webpack_require__(59778); 761;// ./src/app/features/listings/components.styled/StripeListItem.styled.js 762 763 764const StripeListItemStyled = styled_components_browser_esm["default"].div` 765 display: flex; 766 padding: ${spacing/* default */.A.spacing12} ${spacing/* default */.A.spacing16}; 767 flex-direction: column; 768 769 &:nth-child(odd) { 770 background: ${(p) => p.theme.colours.zebraStripeDark}; 771 } 772 773 &:nth-child(even) { 774 background: ${(p) => p.theme.colours.zebraStripeLight}; 775 } 776 777 &:last-of-type { 778 margin-bottom: ${spacing/* default */.A.spacing32}; 779 } 780 781 a { 782 color: ${(p) => p.theme.colours.bluePrimary}; 783 text-decoration: underline; 784 785 &:hover { 786 color: ${(p) => p.theme.colours.blueSecondary}; 787 text-decoration: none; 788 } 789 } 790 791 .title { 792 color: ${(p) => p.theme.colours.grey08}; 793 font-size: ${(p) => p.theme.font.size.px16}; 794 font-family: ${(p) => p.theme.font.family.regular}; 795 } 796 797 .text { 798 margin-top: ${spacing/* default */.A.spacing4}; 799 } 800 801 @media screen and (min-width: ${(p) => p.theme.layout.breakpoints.medium}px) { 802 .title { 803 font-size: ${(p) => p.theme.font.size.px16}; 804 line-height: 1.2; 805 } 806 } 807`; 808/* harmony default export */ const StripeListItem_styled = (StripeListItemStyled); 809 810// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules 811var common = __webpack_require__(70910); 812// EXTERNAL MODULE: ./src/app/features/common/utils/getEntryLink.js 813var getEntryLink = __webpack_require__(40153); 814;// ./src/app/features/listings/components/StripeListItem.js 815 816 817 818 819 820function StripeListItem({ item }) { 821 const prepItem = (i) => { 822 if ("type" in i && "value" in i) { 823 if (Array.isArray) 824 return { 825 ...i.value 826 }; 827 } else return i; 828 }; 829 const preppedItem = prepItem(item); 830 const { text, entryTitle } = preppedItem; 831 return /* @__PURE__ */ react.createElement(StripeListItem_styled, null, /* @__P
831URE__ */ react.createElement("div", { className: "title" }, /* @__PURE__ */ react.createElement(common/* Link */.N_, { uri: (0,getEntryLink/* default */.A)(preppedItem) }, entryTitle), " "), text && /* @__PURE__ */ react.createElement("div", { className: "text" }, text)); 832} 833StripeListItem.propTypes = { 834 item: (prop_types_default()).object 835}; 836/* harmony default export */ const components_StripeListItem = (StripeListItem); 837 838;// ./src/app/features/listings/components/StripeList.js 839 840 841 842function StripeList({ items }) { 843 return /* @__PURE__ */ react.createElement(react.Fragment, null, items?.length > 0 && items.map((i, idx) => { 844 return /* @__PURE__ */ react.createElement(components_StripeListItem, { item: i, key: idx }); 845 })); 846} 847StripeList.propTypes = { 848 items: (prop_types_default()).array 849}; 850/* harmony default export */ const components_StripeList = (StripeList); 851 852 853/***/ }, 854 855/***/ 8243 856(__unused_webpack_module, __webpack_exports__, __webpack_require__) { 857 858 859// EXPORTS 860__webpack_require__.d(__webpack_exports__, { 861 A: () => (/* binding */ components_PromoSection) 862}); 863 864// EXTERNAL MODULE: ./node_modules/react/index.js 865var react = __webpack_require__(29633); 866// EXTERNAL MODULE: ./node_modules/prop-types/index.js 867var prop_types = __webpack_require__(86627); 868var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types); 869// EXTERNAL MODULE: ./node_modules/styled-components/dist/styled-components.browser.esm.js + 7 modules 870var styled_components_browser_esm = __webpack_require__(67780); 871// EXTERNAL MODULE: ./src/app/theme/index.js 872var theme = __webpack_require__(49539); 873;// ./src/app/features/promoSection/components.styled/PromoSection.styled.js 874 875 876const PromoSectionStyled = styled_components_browser_esm["default"].div` 877 display: flex; 878 flex-flow: wrap; 879 flex-direction: row; 880 justify-items: center; 881 justify-content: center; 882 883 .section-heading { 884 color: ${(props) => props.promoTheme === "blue" ? theme/* default */.A.colours.white : theme/* default */.A.colours.black}; 885 text-align: center; 886 } 887`; 888/* harmony default export */ const PromoSection_styled = (PromoSectionStyled); 889 890// EXTERNAL MODULE: ./src/app/features/card/components/Card.js + 1 modules 891var Card = __webpack_require__(59313); 892// EXTERNAL MODULE: ./src/app/features/common/index.js + 24 modules 893var common = __webpack_require__(70910); 894// EXTERNAL MODULE: ./src/app/core/util/truncateString.js 895var truncateString = __webpack_require__(73243); 896// EXTERNAL MODULE: ./src/app/features/common/utils/getEntryLink.js 897var getEntryLink = __webpack_require__(40153); 898// EXTERNAL MODULE: ./src/app/core/util/hooks/useQuery.js 899var useQuery = __webpack_require__(47988); 900;// ./src/app/features/promoSection/components/PromoSection.js 901 902 903 904 905 906 907 908 909const PromoSection = ({ promoSection, className }) => { 910 const query = (0,useQuery/* useQuery */.I)(); 911 let promosToUse, hasPromoGroup = false, copyAndFilterArr, promoTheme; 912 promoSection.whiteTheme && promoSection.greyTheme && promoSection.blueTheme ? promoTheme = "white" : promoSection.whiteTheme && promoSection.greyTheme ? promoTheme = "white" : promoSection.greyTheme && promoSection.blueTheme ? promoTheme = "white" : promoSection.whiteTheme ? promoTheme = "white" : promoSection.greyTheme ? promoTheme = "grey" : promoSection.blueTheme ? promoTheme = "blue" : promoTheme = "white"; 913 promoSection.promos.forEach((promo) => { 914 if (promo.sys.contentTypeId == "promoGroup") { 915 hasPromoGroup = true; 916 } 917 }); 918 hasPromoGroup ? copyAndFilterArr = [...promoSection.promos].filter((promo) => { 919 return promo.sys.contentTypeId == "promoGroup"; 920 }) : promosToUse = promoSection.promos; 921 if (copyAndFilterArr !== void 0) 922 if (copyAndFilterArr.length >> 0) { 923 const copyAndFilterArrLength = copyAndFilterArr.length; 924 promosToUse = copyAndFilterArr[copyAndFilterArrLength - 1].promo; 925 } else { 926 promosToUse = promoSection.promos; 927 } 928 let mediumColWidth; 929 let largeColWidth; 930 const nrOfPromos = promosToUse?.length; 931 if (nrOfPromos == 1) { 932 mediumColWidth = 12; 933 } else if (nrOfPromos == 2) { 934 mediumColWidth = 6; 935 } else if (nrOfPromos == 3 || nrOfPromos == 5 || nrOfPromos == 6 || nrOfPromos == 9) { 936 mediumColWidth = 6; 937 largeColWidth = 4; 938 } else if (nrOfPromos == 4 || nrOfPromos == 7 || nrOfPromos == 8 || nrOfPromos == 10 || nrOfPromos == 11 || nrOfPromos == 12) { 939 mediumColWidth = 6; 940 largeColWidth = 3; 941 } 942 const cardsMap = promosToUse?.map((promo, idx) => { 943 let title, description, link, image, isEvent, isNews, publishDate, eventDate; 944 isEvent = promo.sys.contentTypeId === "events";
945 isNews = promo.sys.contentTypeId === "news"; 946 title = promo.promoTitle ? promo.promoTitle : promo.title ? promo.title : promo.entryTitle ? promo.entryTitle : null; 947 description = promo.promoDescription ? promo.promoDescription : promo.summary ? promo.summary : promo.description ? promo.description : promo.entryDescription ? promo.entryDescription : `Read more about ${title} from King's College London...`; 948 image = promo.featuredImage ? promo.featuredImage : promo.thumbnailImage ? promo.thumbnailImage : promo.entryThumbnail ? promo.entryThumbnail : promo.image ? promo.image : promo.thumbnail ? promo.thumbnail : promo.promoImage ? promo.promoImage : promo.courseImage ? promo.courseImage : null; 949 link = (0,getEntryLink/* default */.A)(promo, false, query); 950 if (isNews) { 951 publishDate = promo.publishDate ? promo.publishDate : promo.sys.version.published; 952 } 953 if (isEvent) { 954 eventDate = promo?.date?.from; 955 } 956 return /* @__PURE__ */ react.createElement( 957 common/* Column */.VP, 958 { 959 key: idx, 960 medium: mediumColWidth, 961 large: largeColWidth, 962 flexColumn: true 963 },
964 /* @__PURE__ */ react.createElement( 965 Card/* default */.A, 966 { 967 title, 968 description: (0,truncateString/* default */.A)(`${description}`, 75, "...", true), 969 link, 970 image, 971 isPromoSection: true, 972 promoTheme, 973 publishDate, 974 eventDate 975 } 976 ) 977 ); 978 }); 979 return /* @__PURE__ */ react.createElement(PromoSection_styled, { className, promoTheme }, promoSection.title !== null && /* @__PURE__ */ react.createElement(common/* Column */.VP, null, /* @__PURE__ */ react.createElement(common/* Heading */.DZ, { level: "2", className: "section-heading" }, promoSection.title)), cardsMap); 980}; 981PromoSection.propTypes = { 982 promoSection: (prop_types_default()).object, 983 className: (prop_types_default()).string 984}; 985/* harmony default export */ const components_PromoSection = (PromoSection); 986 987 988/***/ } 989 990}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.