diff --git a/primo-explore/custom/src/css/custom1.css b/primo-explore/custom/src/css/custom1.css index d9efa01..732f6e8 100644 --- a/primo-explore/custom/src/css/custom1.css +++ b/primo-explore/custom/src/css/custom1.css @@ -1,1421 +1,1477 @@ /* Affichage des collections */ /* Supprime le chevauchement du titre */ prm-collection-gallery-header .collection-header-inner.has-transparent-topbar{ margin-top: 0px !important; } + /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /************************* Union View Package CSS *****************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /*************** Navigation ******************/ /*Font Navigation and buttons*/ #mainMenu > div > a, button#signInBtn, button#more-links-button, prm-topbar > div > prm-user-area-expandable > md-menu > button > span { font-size: small !important; font-weight: 500 !important; color: #111 !important; } /*hover effect Navigation and buttons*/ #mainMenu > div > a:hover, button#signInBtn:hover, prm-topbar > div > prm-user-area-expandable > md-menu > button:hover, button#more-links-button:hover, prm-search-bookmark-filter > a:hover, a#favorites-button:hover, a#search-button:hover, .md-button.button-as-link:hover:not([disabled]), .md-button.button-link:hover:not([disabled]), .md-button.button-link:focus:not([disabled]), prm-user-area-expandable .button-with-menu-arrow:hover .menu-arrow:hover:not([disabled]), button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:hover:not([disabled]), - button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:focus:not([disabled]) { + button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:focus:not([disabled]), + .md-button.md-lang-button:hover { background-color: #ddd !important; color: #111 !important; } /*remove capitalized text*/ .md-button { text-transform: none; } /*Menu button*/ button.button-with-menu-arrow.md-button.md-primoExplore-theme.md-ink-ripple:hover, button#signInBtn, .md-button.button-link, .md-button.button-as-link.link-alt-color, prm-icon md-icon, .section-title prm-icon, prm-icon.rotate-180, svg#chevron-up, span.user-name, span.menu-arrow, .md-button.button-as-link, #sidebar-trigger > prm-icon > md-icon { color: #111 !important; } /*hide hover effect on Library Logo*/ #banner > a.md-button.md-primoExplore-theme.md-ink-ripple:hover { background: none; } /*background buttons*/ prm-search-bookmark-filter .md-button { background-color: #fff !important; } /*hiding Refworks from the pulldown menu*/ .my-refworks-ctm, .my-refworks-separator-ctm { display: none; } /*switch to advanced search button*/ button.switch-to-advanced.zero-margin.button-with-icon.md-button.md-primoExplore-theme.md-ink-ripple { border-style: solid; border-width: 1px; border-radius: 5px; } .md-button.button-as-link { line-height: 36px; padding: 0 12px; } .md-button.md-primary:hover:not([disabled]), .md-button.md-primary:focus:not([disabled]), prm-favorites-labels .md-chips .md-chip.toggleable-chip:not(.chip-toggled-on) .md-chip-content:hover:not([disabled]), prm-favorites-labels .md-chips .md-chip:not(.chip-toggled-on) .md-chip-content:hover:not([disabled]), .bar prm-authentication .md-button:hover:not([disabled]), button.dismiss-alert-button:hover { color: #fff; background-color: #111; } +/*switch to simple search button*/ +button.switch-to-simple.zero-margin.button-with-icon.md-button.md-primoExplore-theme.md-ink-ripple { + border-color: #f1f1f1 !important; + border-radius: 5px; + border-width: 1px; + border: solid; +} + /*the main color border on mobile view*/ @media (max-width: 599px) { prm-topbar .top-nav-bar { border-bottom-style: solid; border-bottom-width: 8px; } } .md-button.button-as-link { line-height: 36px; padding: 0 6px; } .md-autocomplete-suggestions li { white-space: nowrap; } +/*Header menu*/ + +@media (max-width: 960px) { + prm-user-area-expandable button.user-button.user-menu-button.button-with-menu-arrow.md-button.md-primoExplore-theme.md-ink-ripple, prm-user-area-expandable-after { + display: none !important; + } + button#signInBtn { + display: block; + } + } + + primo-explore.logged-out prm-user-area-expandable md-menu { + display: none; + } + /*Header menu: switch language*/ + + bcu-lang-switch-component { + padding-right: 16px; + } + + bcu-lang-switch-component .md-button.md-lang-button { + height: 29px; + min-height: 29px; + margin: 15px 1px !important; + min-width: 29px; + width: 29px; + line-height: 23px; + text-transform: uppercase; + border: 1px solid transparent; + border-radius: 3px; + } + + bcu-lang-switch-component .md-button.md-lang-button.active { + border-color: rgba(19, 18, 18, 0.85); + } + + bcu-lang-switch-component a { + color: rgba(255, 255, 255, 0.85); + display: inline-block; + padding-bottom: 2px; + } + + bcu-lang-switch-component a:hover { + color: rgba(255, 255, 255, 0.85); + } /*************** Main Content ******************/ /*backgound of the Textboxes Homepage*/ prm-search > div > md-content, md-card.default-card._md.md-primoExplore-theme { background-color: #fff !important; border-radius: 3px; } /*first header of the Textboxes*/ .cardbox h1 { font-size: 48px; line-height: 56px; } /*second header of the Textboxes*/ .cardbox h2 { font-size: 32px; line-height: 36px; } /*third header of the Textboxes (if needed)*/ .cardbox h3 { font-size: 26px; line-height: 30px; } /*removes the upper and lower space in a list */ .cardbox ul, .cardbox ol { margin-top: 0px !important; margin-bottom: 0px !important; } /*links in the textboxes*/ md-card-content a, prm-service-details a { color: #222222 !important; } md-card-content a, prm-service-details a, div.courier-info > span a { text-decoration: underline !important; } md-card-content a:hover, prm-service-details a:hover { color: #111; background-color: rgba(47, 47, 47, 0.1) !important; } /*Responsive Video Frame*/ .resp-container { position: relative; overflow: hidden; padding-top: 56.25%; } .resp-iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } /*footer layout*/ md-card.prm-primary-bg.psfooter { margin: 16px 0 0 0; } /*footer layout*/ md-card.prm-primary-bg.psfooter-legal { margin: 1px 0 0 0; } /*Responsive footer layout*/ @media (min-width: 960px) { md-card-content.prm-primary-bg.layout-align-gt-sm-end-stretch.flex-gt-sm-70 { text-align: end; } } /*footer links*/ md-icon.ps_icon, a.ps_link { margin-right: 5%; text-decoration: underline; } /*md-icon.ps_icon:hover, a.ps_link:hover, a.ps_link.legal:hover, span.legal a:hover { background-color: rgba(61,110,148,.1) !important; }*/ /*footer text*/ md-card-content.prm-primary-bg { font-weight: 300; } /*links in the legal part of the footer*/ a.ps_link.legal, span.legal { font-size: 14px; font-weight: 300; } /************************************************************************************************ span.legal { color: #14413c; } */ span.legal > a { /*color: #14413c;*/ font-weight: 600; } /*main container width for footer positioning*/ prm-static.md-padding.flex { min-width: 100%; padding: 0; } /*mainly white background*/ .prm-primary-bg.prm-hue1, prm-atoz-search-bar.prm-hue1, prm-browse-search-bar.prm-hue1, prm-collection-gallery-header .prm-hue1.collection-header-inner, prm-newspapers-search-bar.prm-hue1, prm-search-bar.prm-hue1, prm-spinner.prm-hue1.overlay-cover.light-on-dark:after, prm-tags-search-bar.prm-hue1, prm-topbar .top-nav-bar, prm-tree-nav prm-spinner .prm-hue1.diamond { background-color: #fff !important; } /*font color on white background*/ .hoverable-over-dark, .md-button.button-over-dark, prm-main-menu[menu-type=full] .md-button.md-focused, prm-main-menu[menu-type=full] .md-button .md-input-container-dummy > .md-select-dummy:focus, prm-main-menu[menu-type=full] .md-button:focus, prm-main-menu[menu-type=full] .md-button:hover, prm-main-menu[menu-type=full] .md-button md-select:focus, prm-main-menu[menu-type=full] .overlay-menu-item.md-focused, prm-main-menu[menu-type=full] .overlay-menu-item .md-input-container-dummy > .md-select-dummy:focus, prm-main-menu[menu-type=full] .overlay-menu-item:focus, prm-main-menu[menu-type=full] .overlay-menu-item:hover, prm-main-menu[menu-type=full] .overlay-menu-item md-select:focus, prm-main-menu[menu-type=full] md-button:focus, prm-main-menu[menu-type=full] md-button:hover, prm-topbar .md-button, prm-user-area .md-button.user-menu-button, prm-user-area md-fab-toolbar ._md-fab-action-item .md-button, prm-user-area md-fab-toolbar ._md-fab-action-item md-input-container, prm-user-area md-fab-toolbar .md-fab-action-item .md-button, prm-user-area md-fab-toolbar .md-fab-action-item md-input-container { color: #222 !important; } /*************** Brief results ******************/ /*color of the Alertbar*/ .bar.alert-bar, .classic-input .search-scope, .prm-alert-bg { /*background-color: #8dd8d8 !important;*/ border: none !important; } /*backgound search results boxes*/ .list-item-wrapper { background-color: #f9f9f9; } /*Title color*/ prm-brief-result .item-title span { color: #333; } prm-brief-result .item-title span:hover { color: #111; background-color: rgba(47, 47, 47, 0.1) !important; } /*remove hover effect from title links*/ .md-button.arrow-link-button .button-content:focus, .md-button.arrow-link-button .button-content:hover, .md-button.arrow-link-button .hover.button-content, .md-button.arrow-link-button:focus .button-content, .md-button.arrow-link-button:hover .button-content, .recommendations-title.hover > span > span, .recommendations-title:hover > span > span, a.hover, a:focus, a:hover, prm-chapters-and-reviews md-card > .md-button:focus .item-title span, prm-chapters-and-reviews md-card > .md-button:hover .item-title span, prm-citation-trails-item.active-item md-card > .md-button:focus .item-title span, prm-citation-trails-item.active-item md-card > .md-button:hover .item-title span, prm-tags-list .md-chips .md-chip .md-chip-content:hover strong, prm-tags-list .md-chips md-chip .md-chip-content:hover strong, prm-tags-list md-chips .md-chip .md-chip-content:hover strong, prm-tags-list md-chips md-chip .md-chip-content:hover strong { box-shadow: none !important; } /*background color of bookmarked items*/ .list-item-wrapper .item-bookmarked, .list-item-wrapper .item-bookmarked:hover, .prm-highlight, .prm-highlight.prm-hue1, prm-breadcrumbs .md-chip.persistent-facet, prm-breadcrumbs .prm-hue1.md-chip.persistent-facet { background-color: #ddd !important; } /*hover effect on all Links*/ .md-button.arrow-link-button .button-content:focus, .md-button.arrow-link-button .button-content:hover, .md-button.arrow-link-button .hover.button-content, .md-button.arrow-link-button:focus .button-content, .md-button.arrow-link-button:hover .button-content, .prm-links-background.prm-hue-1, .recommendations-title.hover > span > span, .recommendations-title:hover > span > span, a.hover, a:focus, a:hover, prm-chapters-and-reviews md-card > .md-button:focus .item-title span, prm-chapters-and-reviews md-card > .md-button:hover .item-title span, prm-citation-trails-item.active-item md-card > .md-button:focus .item-title span, prm-citation-trails-item.active-item md-card > .md-button:hover .item-title span, prm-tags-list .md-chips .md-chip .md-chip-content:hover strong, prm-tags-list .md-chips md-chip .md-chip-content:hover strong, prm-tags-list md-chips .md-chip .md-chip-content:hover strong, prm-tags-list md-chips md-chip .md-chip-content:hover strong { color: #222 !important; } div.custom-links-container.layout-wrap.layout-align-sm-start-start.layout-align-center-start.layout-row > div > a:hover { background-color: #6b6b6b !important; } /*Facet titles*/ span.section-title-header:hover { color: #8a8a8a !important; } /*Facet "show more" button*/ .sidebar-section .md-button.button-as-link.link-alt-color:hover { background-color: rgba(17, 17, 17, 0.17) !important; } /*page select buttons*/ a.md-mini.md-button.md-primoExplore-theme.md-ink-ripple:hover { color: white !important; } /*underlined search results*/ /*.text-highlight, mark { box-shadow: inset 0 -0.15em 0 0 #8dd8d8; }*/ /*versions link and other*/ .getit, .md-button.arrow-link-button prm-search-result-frbr-line .button-content > prm-icon:first-child, .prm-notice, .status-maybe, .worldcat, [class*=_more], [class*=_unknown], [class*=check_], [class*=does_not_exist], [class*=may_], [class*=NFT], prm-search-result-frbr-line .md-button.arrow-link-button .button-content > prm-icon:first-child, prm-search-result-frbr-line a > prm-icon:first-child, prm-service-links a { color: #222 !important; } /*icon color and text color in request forms*/ .prm-primary-color, .request-form md-input-container label, .request-form md-input-container label:not(.md-no-float):not(._md-container-ignore), .request-form md-input-container md-select .md-select-value.md-select-placeholder, .request-form md-input-container .md-input-container-dummy > .md-select-dummy .md-select-value.md-select-placeholder, .request-form md-input-container md-select ._md-select-value._md-select-placeholder, .request-form md-input-container .md-input-container-dummy > .md-select-dummy ._md-select-value._md-select-placeholder, .result-item-actions .md-icon-button, .result-item-actions .more-options-button, prm-add-query-to-saved-searches .custom-button, prm-pre-filters md-input-container.is-active, .md-autocomplete-suggestions .suggestion-scope, md-tab-content .tab-content-header md-input-container md-select-value .md-text { color: #222 !important; } /*space between item details in Fullview*/ #item-details > div > div { margin-bottom: .8em !important; } /*Items expand*/ @media (max-width: 960px) { prm-location-items .md-list-item-text.layout-wrap.layout-row.flex { flex-direction: column; } prm-location-items h3, prm-location-items h4 { margin:10px 0 !important; } prm-location-items > md-list > md-list-item > div > div.md-list-item-text > div.weak-text > div > div > p { margin: 4px 18px !important; display: list-item; } prm-location-items > md-list > md-list-item > div > div > div.layout-wrap { flex-direction: row !important; justify-content: flex-start !important; max-width: 100% !important; } prm-location-items > md-list > md-list-item > div > div > div > div > prm-service-button > button { box-shadow: inset 0 -0.15em 0 0 #8dd8d8; } } /* Hide "search inside" for print journals */ .search-within-p-only { display:none } /*fullview background of the left part*/ .md-dialog-container.fixed-container { background-color: #444 !important; } /*background color of the signin window and the fullscreen navigation*/ md-backdrop._md-dialog-backdrop.md-opaque.md-primoExplore-theme { background-color: #1f1f1f !important; } /*text color of the signin window and the fullscreen navigation*/ prm-main-menu[menu-type=full] .md-button .md-headline, prm-main-menu[menu-type=full] .overlay-menu-item .md-headline, .light-on-dark-dialog .md-button.button-as-link, .light-on-dark-dialog .md-button.button-confirm, md-dialog.light-on-dark-dialog md-list md-list-item.list-login .md-button, md-dialog.light-on-dark-dialog a:hover { color: #fff !important; } /*hiding the Library Logo in the login window*/ .login-header { display: none !important; } /*login-box make arrows clickable*/ prm-union-catalog-login button.md-no-style.md-button.md-primoExplore-theme.md-ink-ripple { z-index: 100; } prm-login .md-button.md-no-style:hover { color:black; } .login-card md-list-item.login-brighter-dialog prm-login-item { width:100%; } prm-login .md-secondary-container md-icon.md-primoExplore-theme { position: absolute; margin: -27px 22px 0px -57px; } /*alertbar for the courier info*/ .courier-info { margin: 0px 8px; } .courier-info.bar.alert-bar { height: unset; margin: 6px 8px; padding: .5em .5em 0.25em; text-align: center; } /*Library info icon*/ prm-location-items-after > div > span > a > img { vertical-align: middle; max-width: 30px; margin: 4px 12px; } /*Library card Personal details display*/ #personalDetails > md-card-content > div { flex-flow: column; } #personalDetails .md-input-has-value.layout-column { min-width: 400px; } prm-personal-info-after { display: flex; } /******************************************************************************/ /************************************ Full display ****************************/ /******************************************************************************/ /*Back buttons*/ md-tabs.tabs-as-app .back-button, prm-location-holdings .md-button.button-as-link, prm-location-items .button-link { box-shadow: none; color: #111111 !important; background: rgba(17, 17, 17, 0.20) !important; line-height: 24px; border: 1px solid rgba(0, 0, 0, 0.59); } md-tabs.tabs-as-app:hover .back-button:hover, prm-location-holdings .md-button.button-as-link:hover:not([disabled]), prm-location-items .button-link:hover:not([disabled]) { color: #111111 !important; background-color: rgba(17, 17, 17, 0.10) !important; } /*Buttons margin*/ prm-request-services, prm-opac, prm-location-holdings .md-button.button-as-link { margin-top: 5px; } /* Locations filter by default; hide filter button */ prm-locations button[ng-if='$ctrl.displayFiltersButton && !$ctrl.locationsPrefilterActive']{ display: none !important; } prm-location-items button[ng-if='($ctrl.isFilter || $ctrl.isFiltered) && $ctrl.isAnyFilterFilled()']{ display: none !important; } /* Location filter "Clear" button */ prm-locations-filter .md-button.button-as-link:hover:not([disabled]) { background-color: rgba(17, 17, 17, 0.10) !important; } /*filter bar*/ prm-locations-filter md-select { margin-top:1px; } prm-location-items prm-service-button .md-button.button-as-link { padding:0 6px !important; box-shadow:none; line-height:28px; } /*FullView - Left Navigation */ prm-full-view .services-index-under{ min-width: 7em; } prm-full-view .services-index-under .md-button{ width: 100%; /* border: 1px solid #c3c3c3; */ margin: 1px 0!important; text-overflow: clip; padding-right: 0; white-space: normal; line-height: 20px; padding: 7px 5px; } prm-full-view .services-index-under .md-button span{ text-transform: none; } /*Full view Resource sharing */ #getit_link1_0 > div > prm-full-view-service-container > div.section-body > div { display: flex; flex-direction: column; } prm-opac { order: 1; } prm-alma-other-members { order: 2; display: grid; } alma-htgi-svc { order: 3; } primo-explore.logged-out alma-htgi-svc, primo-explore.alert alma-htgi-svc { order: 0 !important; } .medium-uppercase-bold { text-transform: none; font-size: 1em; } /*Full display Resource sharing expand section*/ prm-alma-other-units button.layout-fill, prm-alma-other-members button.layout-fill { height: auto; min-height: auto; } /* Full display sections order */ #full-view-container > *:first-child { display: flex; flex-direction: column; } #brief { order: 0 !important; margin-bottom: -40px; } #citationTrails { order: 1 !important; margin-bottom: -30px; } #searchWithinJournal { order: 2 !important; margin-bottom: -30px; } #getit_link1_0 { order: 3 !important; margin-bottom: -30px; } #getit_link1_1 { order: 4 !important; margin-bottom: -30px; } #action_list { order: 5 !important; margin-bottom: -30px; } #details { order: 6 !important; margin-bottom: -30px; } #links { order: 7 !important; margin-bottom: -30px; } #moreFromTheSameCourse { order: 8 !important; margin-bottom: -30px; } #moreFromTheSameCollection { order: 9 !important; margin-bottom: -30px; } #virtualBrowse { order: 10 !important; margin-bottom: -30px; } /* Change of links in left navigation bar ENG */ [aria-label="Top"] { order: 0 !important; } [aria-label="Citations"] { order: 1 !important; } [aria-label="Search inside"] { order: 2 !important; } [aria-label="View Online"] { order: 3 !important; } [aria-label="Loan and request options"] { order: 4 !important; } [aria-label="Send to"] { order: 5 !important; } [aria-label="Details"] { order: 6 !important; } [aria-label="Links"] { order: 7 !important; } [aria-label="Course"] { order: 8 !important; } [aria-label="Collection"] { order: 9 !important; } [aria-label="Virtual Browse"] { order: 10 !important; } /* Change of links in left navigation bar GER */ [aria-label="Top"] { order: 0 !important; } [aria-label="Literatur"] { order: 1 !important; } [aria-label="Suche innerhalb"] { order: 2 !important; } [aria-label="Online ansehen"] { order: 3 !important; } [aria-label="Ausleih- und Bestelloptionen"] { order: 4 !important; } [aria-label="Senden an"] { order: 5 !important; } [aria-label="Details"] { order: 6 !important; } [aria-label="Links"] { order: 7 !important; } [aria-label="Seminar"] { order: 8 !important; } [aria-label="Sammlung"] { order: 9 !important; } [aria-label="Virtuelles Regal"] { order: 10 !important; } /* Change of links in left navigation bar FRE */ [aria-label="Haut"] { order: 0 !important; } [aria-label="Citations"] { order: 1 !important; } [aria-label="Rechercher dans"] { order: 2 !important; } [aria-label="Consulter en ligne"] { order: 3 !important; } [aria-label="Options de prêt et de demande"] { order: 4 !important; } [aria-label="Envoyer vers"] { order: 5 !important; } [aria-label="Détails"] { order: 6 !important; } [aria-label="Liens"] { order: 7 !important; } [aria-label="Cours"] { order: 8 !important; } [aria-label="Collection"] { order: 9 !important; } [aria-label="Etagère virtuelle"] { order: 10 !important; } /* Change of links in left navigation bar ITA */ [aria-label="Top"] { order: 0 !important; } [aria-label="Citazioni"] { order: 1 !important; } [aria-label="Cerca in"] { order: 2 !important; } [aria-label="Visualizza online"] { order: 3 !important; } [aria-label="Opzioni di prestito e richiesta"] { order: 4 !important; } [aria-label="Invia a"] { order: 5 !important; } [aria-label="Dettagli"] { order: 6 !important; } [aria-label="Link"] { order: 7 !important; } [aria-label="Corso"] { order: 8 !important; } [aria-label="Collezione"] { order: 9 !important; } [aria-label="Scorri virtualmente"] { order: 10 !important; } /******************************************************************************/ /************************************ Help Page *******************************/ /******************************************************************************/ #help img { max-width: 100%; height: auto; } img.icon_up1 { width: 16px; float: right; margin: 13px 2px; } img.icon_up2 { width: 10px; float: right; margin: 4px; } a > h3:hover { background-color: #eee !important; } /******************************************************************************/ /************************************ Collections *****************************/ /******************************************************************************/ /*Collections navigation bar*/ prm-collection-navigation-breadcrumbs-item .md-button.button-as-link.link-alt-color { box-shadow: none; color: #ffffff !important; background: #1111117a !important; line-height: 24px; } prm-collection-navigation-breadcrumbs-item .md-button.button-as-link.link-alt-color:hover { color:#ffffff !important; background-color: #11111152 !important; } /******************************************************************************/ /****************** SLSP "special" external resources ***************************/ /******************************************************************************/ .slsp-archives md-list-item{ cursor: pointer; } .slsp-archives .md-list-item-inner span { padding-left: 2em; } .slsp-archives md-list md-list-item .md-button{ color: #3d6e94; font-size: 16px; } .slsp-archives md-list md-list-item .md-button:hover:not([disabled]), .slsp-archives md-list md-list-item .md-button:focus:not([disabled]) { background-color: transparent; color: #3d6e94; text-decoration: underline; } .slsp-archives-additional-hint{ justify-content: center; display: flex; padding: 1em; background-color: #f7eda3; border-color: #ede49e; margin-bottom: 1em; padding-left: 2em; box-shadow: 0 1px 0 0 rgb(0 0 0 / 3%), 0 5px 5px -3px rgb(0 0 0 / 7%); } /* mfa, tma */ .slsp-archives-hide alma-htgi-svc > * { display: none; } .slsp-archives-hide alma-htgi-svc-after { display: block; } /* hsa */ .slsp-archives-hide prm-alma-viewit > * { display: none; } .slsp-archives-hide prm-alma-viewit-after { display: block; } /* availability-line HSA, if no online resource */ prm-search-result-availability-line.slsp-hsa-no-online prm-icon{ display:none; } prm-search-result-availability-line.slsp-hsa-no-online .availability-status { color: gray; } + /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /********************** End of the Central Package CSS ************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /*************************** EPFL CUSTOM COLORS *******************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /* This file contains the EPFL part of the custom package. The SLSP part is in the custom_slsp.css file. */ /*****************This two entries are the background of the primary color*******************/ prm-primary-bg, prm-atoz-search-bar, prm-browse-search-bar, prm-collection-gallery-header .collection-header-inner, prm-search-bar, prm-newspapers-search-bar, prm-spinner.overlay-cover.light-on-dark:after, prm-tags-search-bar, prm-tree-nav prm-spinner .diamond, .prm-primary-bg, md-checkbox.md-checked .md-icon, md-tabs md-ink-bar, md-radio-button.md-checked .md-on, button.switch-to-simple, .md-button.button-confirm { background-color: #ff0000 !important; } /* Suppression configuration master template */ prm-request-services .md-button.button-as-link{ background-color: unset !important; } md-tabs.tabs-as-app .back-button { background-color: #777 !important; line-height: 24px !important; min-height: 24px !important; margin: 4px 0 !important; } @media (max-width: 599px) { prm-topbar .top-nav-bar { border-color: #ff0000 !important; } } /*.search-actions button{ background-color: #fff !important; color: #222; } */ /*****************This entry is the mouse over background of the links and buttons*******************/ md-card.prm-primary-bg.psfooter > md-card-content a:hover, md-icon.ps_icon:hover, a.ps_link:hover, a.ps_link.legal:hover, span.legal a:hover, button.switch-to-advanced:hover, button.switch-to-simple:hover, .md-button.button-confirm:hover { background-color: #ae0010 !important; } .md-button.button-as-link:hover:not([disabled]){ background-color: unset !important; } md-tabs.tabs-as-app .back-button:hover:not([disabled]){ background-color: #555 !important; } /*****************This two entries are the font color of the primary color*******************/ .prm-primary-bg, prm-atoz-search-bar, prm-browse-search-bar, prm-collection-gallery-header .collection-header-inner, prm-newspapers-search-bar, prm-spinner.overlay-cover.light-on-dark:after, prm-tags-search-bar, prm-tree-nav prm-spinner .diamond, .prm-primary-bg, md-checkbox.md-checked .md-icon:after, .md-button.switch-to-advanced, button.switch-to-simple, span.legal, span.legal > a, a.ps_link.legal, .ps_icon, md-card.prm-primary-bg.psfooter > md-card-content a, .md-button.button-confirm, md-tabs.tabs-as-app .back-button, prm-request-services .md-button.button-as-link { color: #fff !important; } button.switch-to-advanced.zero-margin.button-with-icon.md-button.md-primoExplore-theme.md-ink-ripple { border-color: #c1c1c1 !important; } /*****************This two entries are the background of the secondary color*******************/ .bar.alert-bar, .classic-input .search-scope, .prm-alert-bg { background-color: #ffcccc !important; } .text-highlight, mark { box-shadow: inset 0 -0.15em 0 0 #ff0000 ; } /*****************This entry is the font color of the secondary color*******************/ .bar.alert-bar, .classic-input .search-scope, .prm-alert-bg, .bar prm-authentication .md-button, button.dismiss-alert-button, div.courier-info > span a { color: #111111 !important; } /*********************************/ /* CSS pour les bases de données */ /*********************************/ prm-databases-categorize h2, prm-databases-categorize prm-tree-nav{ width: 220px; max-width: 220px; } @media only screen and (max-width: 1100px){ prm-databases-categorize h2, prm-databases-categorize prm-tree-nav{ width: 180px !important; max-width: 180px !important; } } /*****************Selected text color*******************/ ::selection { background: #ffbe8f; /* WebKit/Blink Browsers */ } ::-moz-selection { background: #ffbe8f; /* Gecko Browsers */ } /*****************This entry remove default color from various texts*******************/ md-dialog.light-on-dark-dialog .md-list[class$="-line"] md-list-item .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog .md-list[class$="-line"] md-list-item .md-list-item-text h3, md-dialog.light-on-dark-dialog .md-list[class$="-line"] md-list-item > .md-no-style .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog .md-list[class$="-line"] md-list-item > .md-no-style .md-list-item-text h3, md-dialog.light-on-dark-dialog .md-list md-list-item .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog .md-list md-list-item .md-list-item-text h3, md-dialog.light-on-dark-dialog .md-list md-list-item > .md-no-style .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog .md-list md-list-item > .md-no-style .md-list-item-text h3, md-dialog.light-on-dark-dialog md-list md-list-item .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog md-list md-list-item .md-list-item-text h3, md-dialog.light-on-dark-dialog md-list md-list-item > .md-no-style .md-list-item-text .list-item-title, md-dialog.light-on-dark-dialog md-list md-list-item > .md-no-style .md-list-item-text h3, md-button.arrow-link-button md-dialog.light-on-dark-dialog .button-content, md-dialog.light-on-dark-dialog .md-button.arrow-link-button .button-content, md-dialog.light-on-dark-dialog a{ color: #ffcccc !important; } /*Bouton pour confirmer une demande*/ prm-request button.md-button.button-confirm, span[translate="fulldisplay.locations.showmore"], .courier-info .button-confirm { background-color: #080 !important; border-radius: 2px; border-style: none; } prm-request button.md-button.button-confirm:hover, span[translate="fulldisplay.locations.showmore"]:hover, .courier-info .button-confirm:hover { background-color: #050 !important; } span[translate="fulldisplay.locations.showmore"]{ line-height: 24px !important; padding: 5px 8px; margin: 4px 0 !important; color: white; border-radius: 2px; } /* Suppression du fond du bouton + d'exemplaires */ prm-location-items .md-button.button-link:hover:not([disabled]){ background-color: transparent !important; border-style: none !important; } button[ng-hide="!$ctrl.currLoc.isMore"] { background-color: transparent !important; border-style: none !important; } /* Fix SLSP pour la couleur du bouton secondaire */ .bar prm-authentication .md-button:hover:not([disabled]), button.dismiss-alert-button:hover{ background-color:#ffdddd !important; border: 1px solid #ae0010; } /* Fix SLSP pour le bouton ""élargir" */ button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple{ background-color: #D3D3D3!important; } /*****************This entry remove default color from various forms*******************/ .md-input-color-underline, .new-result-item .list-item-count, .prm-secondary-bg.prm-hue1, md-input-container.empty-select-on-init:not(.md-input-focused) .md-input-container-dummy > .md-select-dummy md-select-value::after, md-input-container.empty-select-on-init:not(.md-input-focused) md-select md-select-value::after, md-input-container::after, md-progress-linear[md-mode="indeterminate"].header-progress-bar .prm-hue1.md-bar, md-radio-button.md-checked ._md-on, md-radio-button.md-checked .md-on, md-tabs md-ink-bar, prm-tags-list .md-chips ._md-chip-input-container::after, prm-tags-list .md-chips .md-chip-input-container::after, prm-tags-list md-chips ._md-chip-input-container::after, prm-tags-list md-chips .md-chip-input-container::after { background-color: #ff0000 !important; } md-card.psfooter, md-card.psfooter-legal, md-card.psfooter > md-card-content.prm-primary-bg, md-card.psfooter-legal > md-card-content.prm-primary-bg, md-card.prm-primary-bg.psfooter > md-card-content a:hover, md-card.prm-primary-bg.psfooter-legal > md-card-content a:hover{ background-color: #d6d6d6 !important; } md-card.psfooter md-card-content, md-card.psfooter-legal md-card-content, md-card.prm-primary-bg.psfooter > md-card-content a, md-card.prm-primary-bg.psfooter-legal > md-card-content a, md-card.prm-primary-bg.psfooter-legal span.legal { color: #3a3a3a !important; } md-card.prm-primary-bg.psfooter > md-card-content a:hover, md-card.prm-primary-bg.psfooter-legal > md-card-content a:hover { color: #ff0000 !important; } /* Navigation Links on fullview notices */ prm-full-view .services-index-under{ min-width: 7em; } prm-full-view .services-index-under .md-button{ background-color: white; width: 100%; border: 1px solid #c3c3c3; margin: 1px 0!important; text-overflow: clip; padding-right: 0; white-space: normal; line-height: 20px; padding: 5px; } prm-full-view .services-index-under .md-button span{ text-transform: none; } /* Couleur rouge pour les logos téléphone, mail, etc. */ .puce{ text-decoration: none !important; } .puce > span:first-child{ color: #ff0000; fill: #ff0000; } h1.md-headline{ font-size: 36px; line-height: 42px; } h2.md-headline{ font-size: 28px; line-height: 34px; } md-content.epfl-row { justify-content: center; } .epfl-row md-card-title{ flex: none; } .epfl-row md-card { height: 100%; } .epfl-social a{ text-decoration: none !important; } /* Augmente l'espace pour réduire la probabilité de clic sur le lien */ prm-login md-list md-list-item:first-child p[translate="parallel.login.description1"]{ margin-top:15px !important; } /* Réduit la taille du lien Alma */ prm-login md-list md-list-item:last-child { font-size: x-small !important; } /* Rendre les chevrons cliquables */ md-dialog>prm-login button.md-no-style.md-button.md-primoExplore-theme.md-ink-ripple{ z-index: 100; } /*********************************/ /* CSS pour le compte du lecteur */ /*********************************/ /* Liste des institutions sur le compte du lecteur */ /* Ajoute le rouge EPFL sur l'icône d'activité et sur l'institution sélectionnée*/ /* Egalement sur l'icône de l'alerte du tab du compte lecteur */ prm-account md-list-item.is-selected h3.institution-name, prm-account md-tab-item prm-icon[ng-if="$ctrl.messagesGeneralAlert"], prm-account md-list-item prm-icon { color: red !important; } /* Le fond gris englobe l'icône */ prm-account-overview .main-institution-list md-list-item:focus-within, prm-account-overview .main-institution-list md-list-item:hover { background-color: #3a3a3a !important; } .feedbacklink md-icon{ height: 20px; width: 20px; min-height: 20px; min-width: 20px; } prm-alma-viewit-after .bar{ height: auto; } /* Empêcher les retours à la ligne pour les cotes */ span[ng-if="$ctrl.location.callNumber"]{ white-space: nowrap } .btn-account { padding: 24px; } .btn-account md-card-content.bar{ margin: 0 0 12px 0!important; border: solid #ddd 1px !important; background-color: #fff !important; min-width: 100%; display: table; padding: 0 10px !important; margin: 0 0 12px 0 !important; } .btn-account a md-card-content.bar:hover{ background-color: #ddd !important; } .btn-account .md-subhead{ font-size: inherit; display: table-cell; vertical-align: middle; padding-left: 15px; box-sizing: border-box; } .btn-account .md-subhead{ min-height: 100%; } .btn-account prm-icon{ vertical-align: middle; margin-left: : 10px; width: 20px; height: 20px; display: table-cell; } /*****************This entry adapt the message fee*******************/ .feemsg { background-color: #ffcccc; border-radius: 3px; padding: 8px; } .feemsg>div { margin-left: 10px; } .bigfont { font-size: 20px; } /* Bouton de la recherche avancée */ .search-switch-buttons span{ font-variant: small-caps; font-size: 1.15em; } .search-switch-buttons button{ border: none !important; } /* Message d'alerte */ prm-search-bar>div { height: inherit !important; min-height: inherit !important; } prm-search-bar-after>div { background-color: #fff !important; margin-top: 20px; padding: 10px 15px; } prm-search-bar-after p { margin: 0 12px; } .info-symbol::before { content: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 34 34' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Crect fill='%234a90e2' width='34' height='34' rx='4'/%3E%3Cpath d='M17 25V15M17 13V9' stroke='%23FFF' stroke-width='4'/%3E%3C/g%3E%3C/svg%3E"); width: 24px; height: 24px; position: absolute; display: inline-block; top: 50%; left: .6rem; width: 1.6rem; height: 1.6rem; margin-top: -.8rem; } .info-symbol { position: relative; } .info-symbol div { margin-left: 50px; } prm-search-bar-after p { padding: .25em 0 .25em; margin: 0; } prm-search-bar-after a { color: black; text-decoration: underline; } /* Empêcher que le blanc de l'effet hover masque la notice */ prm-search-result-availability-line-after { z-index: 8; position: relative; } .pdf_btn prm-icon{ min-width: 22px; min-height: 22px; width: 20px; height: 20px; /*color: #ff2116;*/ } .pdf_btn { margin-top: 15px; } .pdf_btn a{ padding: 5px; border: 2px rgb(40, 167, 69) solid; background-color: rgba(40, 167, 69, .2); border-radius: 4px; color: rgb(58, 58, 58); } .pdf_btn:hover a{ background-color: rgba(40, 167, 69, .4); border-radius: 4px; color: black; } /* Lien vers les séries */ .link_gray{ color: gray !important; } /* Icône du lien direct vers les ebooks */ prm-search-result-availability-line-after prm-icon{color: rgba(58,58,58,.4) !important;} prm-search-result-availability-line-after md-icon{ height: 15px; width: 15px; min-height: 15px; min-width: 15px; margin-right: .35em; } /* Mise en évidence des boutons pour les demandes de service */ /* span[translate="AlmaRequest"] { text-decoration: underline #0B0 3px; padding: 2px 6px; } span[translate="AlmaRequest"]:hover{ background-color: #050 !important; text-decoration: none; color: white; border-radius: 2px; } */ /* span[translate="nui.request.request"]{ display: none; } */ /* Soulignement des boutons proposant un service */ prm-service-button button, .greenbutton { padding-left: 0px !important; padding-right: 0px !important; } prm-service-button button > span, .greenbutton>span { background-color: #080 !important; color: white !important; padding: 2px 6px; border-radius: 2px; } prm-service-button button > span:hover, .greenbutton>span:hover { background-color: #050 !important; } prm-location-items > md-list > md-list-item > div > div > div > div > prm-service-button > button { box-shadow: unset !important; } /* Alignement de l'intitulé "Demandes" */ prm-request-services h3.section-title{ top: 0px; } /* Alignement central des boutons de demande */ prm-request-services .labeled-block { align-items: center; } /* Suppression du sous-titre demande span[translate="nui.request.request"]{ display: none; }*/ /* Suppression du bouton PEB span[translate="AlmaResourceSharing"]{ display: none; } .links-block .separated-block-item::after{ content: none !important; } */ /* Crée la place pour le titre et le sous-titre */ prm-topbar { height: 150px !important; } prm-main-menu[menu-type="menu"], .top-nav-bar, prm-search-bookmark-filter { max-height: 60px !important; height: 60px !important; min-height: auto !important; } /* Mise en forme du titre et sous-titre */ .main-title{ padding: .85em; background-color: white; } .main-title h1{ font-size: 2em !important; margin-bottom: 0; } .main-title h1 > a{ color: black; } prm-main-menu[menu-type="menu"] #mainMenu>div { border-bottom: solid #ddd 1px; } .main-title h2{ font-size: 1.2em !important; font-weight: bold; } /* Adapte le sous-titre lorsque l'écran est relativement petit */ @media only screen and (max-width: 660px){ .main-title h2{ font-size: 1.1em !important; } } /* Menu sur les petits écrans */ prm-main-menu[menu-type="full"] .md-button .md-headline{ color: #ff9999 !important; } prm-main-menu .md-subhead{ display: none; } .__sm prm-main-menu[menu-type="full"] .settings-container + md-divider{ margin-top: 6em !important; } /* Menu sur grand écran */ prm-main-menu[menu-type="menu"] .button-over-dark, prm-topbar .md-button:not(.disable-hover){ color: #222 !important; } /* Petit triangle du menu */ prm-user-area-expandable .button-with-menu-arrow:hover .menu-arrow:hover:not([disabled]){ background-color: inherit; } prm-databases-categorize button.is-selected{ color: red !important; } prm-databases-categorize button:hover{ background-color: #aaa !important; color: inherit !important; } prm-databases-categorize button.is-selected:hover{ color: red !important; } prm-tree-nav md-list md-list-item::after{ opacity: 1 !important; } prm-tree-nav md-list md-list-item::after{ opacity: .3 !important; } prm-databases-categorize h2, prm-databases-categorize prm-tree-nav{ width: 220px; max-width: 220px; } @media only screen and (max-width: 1100px){ prm-databases-categorize h2, prm-databases-categorize prm-tree-nav{ width: 180px !important; max-width: 180px !important; } } diff --git a/primo-explore/custom/src/css/custom_slsp.css b/primo-explore/custom/src/css/custom_slsp.css index a033689..2f554db 100644 --- a/primo-explore/custom/src/css/custom_slsp.css +++ b/primo-explore/custom/src/css/custom_slsp.css @@ -1,837 +1,893 @@ + /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /************************* Union View Package CSS *****************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /*************** Navigation ******************/ /*Font Navigation and buttons*/ #mainMenu > div > a, button#signInBtn, button#more-links-button, prm-topbar > div > prm-user-area-expandable > md-menu > button > span { font-size: small !important; font-weight: 500 !important; color: #111 !important; } /*hover effect Navigation and buttons*/ #mainMenu > div > a:hover, button#signInBtn:hover, prm-topbar > div > prm-user-area-expandable > md-menu > button:hover, button#more-links-button:hover, prm-search-bookmark-filter > a:hover, a#favorites-button:hover, a#search-button:hover, .md-button.button-as-link:hover:not([disabled]), .md-button.button-link:hover:not([disabled]), .md-button.button-link:focus:not([disabled]), prm-user-area-expandable .button-with-menu-arrow:hover .menu-arrow:hover:not([disabled]), button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:hover:not([disabled]), - button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:focus:not([disabled]) { + button.item-expand-button.md-button.md-primoExplore-theme.md-ink-ripple:focus:not([disabled]), + .md-button.md-lang-button:hover { background-color: #ddd !important; color: #111 !important; } /*remove capitalized text*/ .md-button { text-transform: none; } /*Menu button*/ button.button-with-menu-arrow.md-button.md-primoExplore-theme.md-ink-ripple:hover, button#signInBtn, .md-button.button-link, .md-button.button-as-link.link-alt-color, prm-icon md-icon, .section-title prm-icon, prm-icon.rotate-180, svg#chevron-up, span.user-name, span.menu-arrow, .md-button.button-as-link, #sidebar-trigger > prm-icon > md-icon { color: #111 !important; } /*hide hover effect on Library Logo*/ #banner > a.md-button.md-primoExplore-theme.md-ink-ripple:hover { background: none; } /*background buttons*/ prm-search-bookmark-filter .md-button { background-color: #fff !important; } /*hiding Refworks from the pulldown menu*/ .my-refworks-ctm, .my-refworks-separator-ctm { display: none; } /*switch to advanced search button*/ button.switch-to-advanced.zero-margin.button-with-icon.md-button.md-primoExplore-theme.md-ink-ripple { border-style: solid; border-width: 1px; border-radius: 5px; } .md-button.button-as-link { line-height: 36px; padding: 0 12px; } .md-button.md-primary:hover:not([disabled]), .md-button.md-primary:focus:not([disabled]), prm-favorites-labels .md-chips .md-chip.toggleable-chip:not(.chip-toggled-on) .md-chip-content:hover:not([disabled]), prm-favorites-labels .md-chips .md-chip:not(.chip-toggled-on) .md-chip-content:hover:not([disabled]), .bar prm-authentication .md-button:hover:not([disabled]), button.dismiss-alert-button:hover { color: #fff; background-color: #111; } +/*switch to simple search button*/ +button.switch-to-simple.zero-margin.button-with-icon.md-button.md-primoExplore-theme.md-ink-ripple { + border-color: #f1f1f1 !important; + border-radius: 5px; + border-width: 1px; + border: solid; +} + /*the main color border on mobile view*/ @media (max-width: 599px) { prm-topbar .top-nav-bar { border-bottom-style: solid; border-bottom-width: 8px; } } .md-button.button-as-link { line-height: 36px; padding: 0 6px; } .md-autocomplete-suggestions li { white-space: nowrap; } +/*Header menu*/ + +@media (max-width: 960px) { + prm-user-area-expandable button.user-button.user-menu-button.button-with-menu-arrow.md-button.md-primoExplore-theme.md-ink-ripple, prm-user-area-expandable-after { + display: none !important; + } + button#signInBtn { + display: block; + } + } + + primo-explore.logged-out prm-user-area-expandable md-menu { + display: none; + } + /*Header menu: switch language*/ + + bcu-lang-switch-component { + padding-right: 16px; + } + + bcu-lang-switch-component .md-button.md-lang-button { + height: 29px; + min-height: 29px; + margin: 15px 1px !important; + min-width: 29px; + width: 29px; + line-height: 23px; + text-transform: uppercase; + border: 1px solid transparent; + border-radius: 3px; + } + + bcu-lang-switch-component .md-button.md-lang-button.active { + border-color: rgba(19, 18, 18, 0.85); + } + + bcu-lang-switch-component a { + color: rgba(255, 255, 255, 0.85); + display: inline-block; + padding-bottom: 2px; + } + + bcu-lang-switch-component a:hover { + color: rgba(255, 255, 255, 0.85); + } /*************** Main Content ******************/ /*backgound of the Textboxes Homepage*/ prm-search > div > md-content, md-card.default-card._md.md-primoExplore-theme { background-color: #fff !important; border-radius: 3px; } /*first header of the Textboxes*/ .cardbox h1 { font-size: 48px; line-height: 56px; } /*second header of the Textboxes*/ .cardbox h2 { font-size: 32px; line-height: 36px; } /*third header of the Textboxes (if needed)*/ .cardbox h3 { font-size: 26px; line-height: 30px; } /*removes the upper and lower space in a list */ .cardbox ul, .cardbox ol { margin-top: 0px !important; margin-bottom: 0px !important; } /*links in the textboxes*/ md-card-content a, prm-service-details a { color: #222222 !important; } md-card-content a, prm-service-details a, div.courier-info > span a { text-decoration: underline !important; } md-card-content a:hover, prm-service-details a:hover { color: #111; background-color: rgba(47, 47, 47, 0.1) !important; } /*Responsive Video Frame*/ .resp-container { position: relative; overflow: hidden; padding-top: 56.25%; } .resp-iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; border: 0; } /*footer layout*/ md-card.prm-primary-bg.psfooter { margin: 16px 0 0 0; } /*footer layout*/ md-card.prm-primary-bg.psfooter-legal { margin: 1px 0 0 0; } /*Responsive footer layout*/ @media (min-width: 960px) { md-card-content.prm-primary-bg.layout-align-gt-sm-end-stretch.flex-gt-sm-70 { text-align: end; } } /*footer links*/ md-icon.ps_icon, a.ps_link { margin-right: 5%; text-decoration: underline; } /*md-icon.ps_icon:hover, a.ps_link:hover, a.ps_link.legal:hover, span.legal a:hover { background-color: rgba(61,110,148,.1) !important; }*/ /*footer text*/ md-card-content.prm-primary-bg { font-weight: 300; } /*links in the legal part of the footer*/ a.ps_link.legal, span.legal { font-size: 14px; font-weight: 300; } /************************************************************************************************ span.legal { color: #14413c; } */ span.legal > a { /*color: #14413c;*/ font-weight: 600; } /*main container width for footer positioning*/ prm-static.md-padding.flex { min-width: 100%; padding: 0; } /*mainly white background*/ .prm-primary-bg.prm-hue1, prm-atoz-search-bar.prm-hue1, prm-browse-search-bar.prm-hue1, prm-collection-gallery-header .prm-hue1.collection-header-inner, prm-newspapers-search-bar.prm-hue1, prm-search-bar.prm-hue1, prm-spinner.prm-hue1.overlay-cover.light-on-dark:after, prm-tags-search-bar.prm-hue1, prm-topbar .top-nav-bar, prm-tree-nav prm-spinner .prm-hue1.diamond { background-color: #fff !important; } /*font color on white background*/ .hoverable-over-dark, .md-button.button-over-dark, prm-main-menu[menu-type=full] .md-button.md-focused, prm-main-menu[menu-type=full] .md-button .md-input-container-dummy > .md-select-dummy:focus, prm-main-menu[menu-type=full] .md-button:focus, prm-main-menu[menu-type=full] .md-button:hover, prm-main-menu[menu-type=full] .md-button md-select:focus, prm-main-menu[menu-type=full] .overlay-menu-item.md-focused, prm-main-menu[menu-type=full] .overlay-menu-item .md-input-container-dummy > .md-select-dummy:focus, prm-main-menu[menu-type=full] .overlay-menu-item:focus, prm-main-menu[menu-type=full] .overlay-menu-item:hover, prm-main-menu[menu-type=full] .overlay-menu-item md-select:focus, prm-main-menu[menu-type=full] md-button:focus, prm-main-menu[menu-type=full] md-button:hover, prm-topbar .md-button, prm-user-area .md-button.user-menu-button, prm-user-area md-fab-toolbar ._md-fab-action-item .md-button, prm-user-area md-fab-toolbar ._md-fab-action-item md-input-container, prm-user-area md-fab-toolbar .md-fab-action-item .md-button, prm-user-area md-fab-toolbar .md-fab-action-item md-input-container { color: #222 !important; } /*************** Brief results ******************/ /*color of the Alertbar*/ .bar.alert-bar, .classic-input .search-scope, .prm-alert-bg { /*background-color: #8dd8d8 !important;*/ border: none !important; } /*backgound search results boxes*/ .list-item-wrapper { background-color: #f9f9f9; } /*Title color*/ prm-brief-result .item-title span { color: #333; } prm-brief-result .item-title span:hover { color: #111; background-color: rgba(47, 47, 47, 0.1) !important; } /*remove hover effect from title links*/ .md-button.arrow-link-button .button-content:focus, .md-button.arrow-link-button .button-content:hover, .md-button.arrow-link-button .hover.button-content, .md-button.arrow-link-button:focus .button-content, .md-button.arrow-link-button:hover .button-content, .recommendations-title.hover > span > span, .recommendations-title:hover > span > span, a.hover, a:focus, a:hover, prm-chapters-and-reviews md-card > .md-button:focus .item-title span, prm-chapters-and-reviews md-card > .md-button:hover .item-title span, prm-citation-trails-item.active-item md-card > .md-button:focus .item-title span, prm-citation-trails-item.active-item md-card > .md-button:hover .item-title span, prm-tags-list .md-chips .md-chip .md-chip-content:hover strong, prm-tags-list .md-chips md-chip .md-chip-content:hover strong, prm-tags-list md-chips .md-chip .md-chip-content:hover strong, prm-tags-list md-chips md-chip .md-chip-content:hover strong { box-shadow: none !important; } /*background color of bookmarked items*/ .list-item-wrapper .item-bookmarked, .list-item-wrapper .item-bookmarked:hover, .prm-highlight, .prm-highlight.prm-hue1, prm-breadcrumbs .md-chip.persistent-facet, prm-breadcrumbs .prm-hue1.md-chip.persistent-facet { background-color: #ddd !important; } /*hover effect on all Links*/ .md-button.arrow-link-button .button-content:focus, .md-button.arrow-link-button .button-content:hover, .md-button.arrow-link-button .hover.button-content, .md-button.arrow-link-button:focus .button-content, .md-button.arrow-link-button:hover .button-content, .prm-links-background.prm-hue-1, .recommendations-title.hover > span > span, .recommendations-title:hover > span > span, a.hover, a:focus, a:hover, prm-chapters-and-reviews md-card > .md-button:focus .item-title span, prm-chapters-and-reviews md-card > .md-button:hover .item-title span, prm-citation-trails-item.active-item md-card > .md-button:focus .item-title span, prm-citation-trails-item.active-item md-card > .md-button:hover .item-title span, prm-tags-list .md-chips .md-chip .md-chip-content:hover strong, prm-tags-list .md-chips md-chip .md-chip-content:hover strong, prm-tags-list md-chips .md-chip .md-chip-content:hover strong, prm-tags-list md-chips md-chip .md-chip-content:hover strong { color: #222 !important; } div.custom-links-container.layout-wrap.layout-align-sm-start-start.layout-align-center-start.layout-row > div > a:hover { background-color: #6b6b6b !important; } /*Facet titles*/ span.section-title-header:hover { color: #8a8a8a !important; } /*Facet "show more" button*/ .sidebar-section .md-button.button-as-link.link-alt-color:hover { background-color: rgba(17, 17, 17, 0.17) !important; } /*page select buttons*/ a.md-mini.md-button.md-primoExplore-theme.md-ink-ripple:hover { color: white !important; } /*underlined search results*/ /*.text-highlight, mark { box-shadow: inset 0 -0.15em 0 0 #8dd8d8; }*/ /*versions link and other*/ .getit, .md-button.arrow-link-button prm-search-result-frbr-line .button-content > prm-icon:first-child, .prm-notice, .status-maybe, .worldcat, [class*=_more], [class*=_unknown], [class*=check_], [class*=does_not_exist], [class*=may_], [class*=NFT], prm-search-result-frbr-line .md-button.arrow-link-button .button-content > prm-icon:first-child, prm-search-result-frbr-line a > prm-icon:first-child, prm-service-links a { color: #222 !important; } /*icon color and text color in request forms*/ .prm-primary-color, .request-form md-input-container label, .request-form md-input-container label:not(.md-no-float):not(._md-container-ignore), .request-form md-input-container md-select .md-select-value.md-select-placeholder, .request-form md-input-container .md-input-container-dummy > .md-select-dummy .md-select-value.md-select-placeholder, .request-form md-input-container md-select ._md-select-value._md-select-placeholder, .request-form md-input-container .md-input-container-dummy > .md-select-dummy ._md-select-value._md-select-placeholder, .result-item-actions .md-icon-button, .result-item-actions .more-options-button, prm-add-query-to-saved-searches .custom-button, prm-pre-filters md-input-container.is-active, .md-autocomplete-suggestions .suggestion-scope, md-tab-content .tab-content-header md-input-container md-select-value .md-text { color: #222 !important; } /*space between item details in Fullview*/ #item-details > div > div { margin-bottom: .8em !important; } /*Items expand*/ @media (max-width: 960px) { prm-location-items .md-list-item-text.layout-wrap.layout-row.flex { flex-direction: column; } prm-location-items h3, prm-location-items h4 { margin:10px 0 !important; } prm-location-items > md-list > md-list-item > div > div.md-list-item-text > div.weak-text > div > div > p { margin: 4px 18px !important; display: list-item; } prm-location-items > md-list > md-list-item > div > div > div.layout-wrap { flex-direction: row !important; justify-content: flex-start !important; max-width: 100% !important; } prm-location-items > md-list > md-list-item > div > div > div > div > prm-service-button > button { box-shadow: inset 0 -0.15em 0 0 #8dd8d8; } } /* Hide "search inside" for print journals */ .search-within-p-only { display:none } /*fullview background of the left part*/ .md-dialog-container.fixed-container { background-color: #444 !important; } /*background color of the signin window and the fullscreen navigation*/ md-backdrop._md-dialog-backdrop.md-opaque.md-primoExplore-theme { background-color: #1f1f1f !important; } /*text color of the signin window and the fullscreen navigation*/ prm-main-menu[menu-type=full] .md-button .md-headline, prm-main-menu[menu-type=full] .overlay-menu-item .md-headline, .light-on-dark-dialog .md-button.button-as-link, .light-on-dark-dialog .md-button.button-confirm, md-dialog.light-on-dark-dialog md-list md-list-item.list-login .md-button, md-dialog.light-on-dark-dialog a:hover { color: #fff !important; } /*hiding the Library Logo in the login window*/ .login-header { display: none !important; } /*login-box make arrows clickable*/ prm-union-catalog-login button.md-no-style.md-button.md-primoExplore-theme.md-ink-ripple { z-index: 100; } prm-login .md-button.md-no-style:hover { color:black; } .login-card md-list-item.login-brighter-dialog prm-login-item { width:100%; } prm-login .md-secondary-container md-icon.md-primoExplore-theme { position: absolute; margin: -27px 22px 0px -57px; } /*alertbar for the courier info*/ .courier-info { margin: 0px 8px; } .courier-info.bar.alert-bar { height: unset; margin: 6px 8px; padding: .5em .5em 0.25em; text-align: center; } /*Library info icon*/ prm-location-items-after > div > span > a > img { vertical-align: middle; max-width: 30px; margin: 4px 12px; } /*Library card Personal details display*/ #personalDetails > md-card-content > div { flex-flow: column; } #personalDetails .md-input-has-value.layout-column { min-width: 400px; } prm-personal-info-after { display: flex; } /******************************************************************************/ /************************************ Full display ****************************/ /******************************************************************************/ /*Back buttons*/ md-tabs.tabs-as-app .back-button, prm-location-holdings .md-button.button-as-link, prm-location-items .button-link { box-shadow: none; color: #111111 !important; background: rgba(17, 17, 17, 0.20) !important; line-height: 24px; border: 1px solid rgba(0, 0, 0, 0.59); } md-tabs.tabs-as-app:hover .back-button:hover, prm-location-holdings .md-button.button-as-link:hover:not([disabled]), prm-location-items .button-link:hover:not([disabled]) { color: #111111 !important; background-color: rgba(17, 17, 17, 0.10) !important; } /*Buttons margin*/ prm-request-services, prm-opac, prm-location-holdings .md-button.button-as-link { margin-top: 5px; } /* Locations filter by default; hide filter button */ prm-locations button[ng-if='$ctrl.displayFiltersButton && !$ctrl.locationsPrefilterActive']{ display: none !important; } prm-location-items button[ng-if='($ctrl.isFilter || $ctrl.isFiltered) && $ctrl.isAnyFilterFilled()']{ display: none !important; } /* Location filter "Clear" button */ prm-locations-filter .md-button.button-as-link:hover:not([disabled]) { background-color: rgba(17, 17, 17, 0.10) !important; } /*filter bar*/ prm-locations-filter md-select { margin-top:1px; } prm-location-items prm-service-button .md-button.button-as-link { padding:0 6px !important; box-shadow:none; line-height:28px; } /*FullView - Left Navigation */ prm-full-view .services-index-under{ min-width: 7em; } prm-full-view .services-index-under .md-button{ width: 100%; /* border: 1px solid #c3c3c3; */ margin: 1px 0!important; text-overflow: clip; padding-right: 0; white-space: normal; line-height: 20px; padding: 7px 5px; } prm-full-view .services-index-under .md-button span{ text-transform: none; } /*Full view Resource sharing */ #getit_link1_0 > div > prm-full-view-service-container > div.section-body > div { display: flex; flex-direction: column; } prm-opac { order: 1; } prm-alma-other-members { order: 2; display: grid; } alma-htgi-svc { order: 3; } primo-explore.logged-out alma-htgi-svc, primo-explore.alert alma-htgi-svc { order: 0 !important; } .medium-uppercase-bold { text-transform: none; font-size: 1em; } /*Full display Resource sharing expand section*/ prm-alma-other-units button.layout-fill, prm-alma-other-members button.layout-fill { height: auto; min-height: auto; } /* Full display sections order */ #full-view-container > *:first-child { display: flex; flex-direction: column; } #brief { order: 0 !important; margin-bottom: -40px; } #citationTrails { order: 1 !important; margin-bottom: -30px; } #searchWithinJournal { order: 2 !important; margin-bottom: -30px; } #getit_link1_0 { order: 3 !important; margin-bottom: -30px; } #getit_link1_1 { order: 4 !important; margin-bottom: -30px; } #action_list { order: 5 !important; margin-bottom: -30px; } #details { order: 6 !important; margin-bottom: -30px; } #links { order: 7 !important; margin-bottom: -30px; } #moreFromTheSameCourse { order: 8 !important; margin-bottom: -30px; } #moreFromTheSameCollection { order: 9 !important; margin-bottom: -30px; } #virtualBrowse { order: 10 !important; margin-bottom: -30px; } /* Change of links in left navigation bar ENG */ [aria-label="Top"] { order: 0 !important; } [aria-label="Citations"] { order: 1 !important; } [aria-label="Search inside"] { order: 2 !important; } [aria-label="View Online"] { order: 3 !important; } [aria-label="Loan and request options"] { order: 4 !important; } [aria-label="Send to"] { order: 5 !important; } [aria-label="Details"] { order: 6 !important; } [aria-label="Links"] { order: 7 !important; } [aria-label="Course"] { order: 8 !important; } [aria-label="Collection"] { order: 9 !important; } [aria-label="Virtual Browse"] { order: 10 !important; } /* Change of links in left navigation bar GER */ [aria-label="Top"] { order: 0 !important; } [aria-label="Literatur"] { order: 1 !important; } [aria-label="Suche innerhalb"] { order: 2 !important; } [aria-label="Online ansehen"] { order: 3 !important; } [aria-label="Ausleih- und Bestelloptionen"] { order: 4 !important; } [aria-label="Senden an"] { order: 5 !important; } [aria-label="Details"] { order: 6 !important; } [aria-label="Links"] { order: 7 !important; } [aria-label="Seminar"] { order: 8 !important; } [aria-label="Sammlung"] { order: 9 !important; } [aria-label="Virtuelles Regal"] { order: 10 !important; } /* Change of links in left navigation bar FRE */ [aria-label="Haut"] { order: 0 !important; } [aria-label="Citations"] { order: 1 !important; } [aria-label="Rechercher dans"] { order: 2 !important; } [aria-label="Consulter en ligne"] { order: 3 !important; } [aria-label="Options de prêt et de demande"] { order: 4 !important; } [aria-label="Envoyer vers"] { order: 5 !important; } [aria-label="Détails"] { order: 6 !important; } [aria-label="Liens"] { order: 7 !important; } [aria-label="Cours"] { order: 8 !important; } [aria-label="Collection"] { order: 9 !important; } [aria-label="Etagère virtuelle"] { order: 10 !important; } /* Change of links in left navigation bar ITA */ [aria-label="Top"] { order: 0 !important; } [aria-label="Citazioni"] { order: 1 !important; } [aria-label="Cerca in"] { order: 2 !important; } [aria-label="Visualizza online"] { order: 3 !important; } [aria-label="Opzioni di prestito e richiesta"] { order: 4 !important; } [aria-label="Invia a"] { order: 5 !important; } [aria-label="Dettagli"] { order: 6 !important; } [aria-label="Link"] { order: 7 !important; } [aria-label="Corso"] { order: 8 !important; } [aria-label="Collezione"] { order: 9 !important; } [aria-label="Scorri virtualmente"] { order: 10 !important; } /******************************************************************************/ /************************************ Help Page *******************************/ /******************************************************************************/ #help img { max-width: 100%; height: auto; } img.icon_up1 { width: 16px; float: right; margin: 13px 2px; } img.icon_up2 { width: 10px; float: right; margin: 4px; } a > h3:hover { background-color: #eee !important; } /******************************************************************************/ /************************************ Collections *****************************/ /******************************************************************************/ /*Collections navigation bar*/ prm-collection-navigation-breadcrumbs-item .md-button.button-as-link.link-alt-color { box-shadow: none; color: #ffffff !important; background: #1111117a !important; line-height: 24px; } prm-collection-navigation-breadcrumbs-item .md-button.button-as-link.link-alt-color:hover { color:#ffffff !important; background-color: #11111152 !important; } /******************************************************************************/ /****************** SLSP "special" external resources ***************************/ /******************************************************************************/ .slsp-archives md-list-item{ cursor: pointer; } .slsp-archives .md-list-item-inner span { padding-left: 2em; } .slsp-archives md-list md-list-item .md-button{ color: #3d6e94; font-size: 16px; } .slsp-archives md-list md-list-item .md-button:hover:not([disabled]), .slsp-archives md-list md-list-item .md-button:focus:not([disabled]) { background-color: transparent; color: #3d6e94; text-decoration: underline; } .slsp-archives-additional-hint{ justify-content: center; display: flex; padding: 1em; background-color: #f7eda3; border-color: #ede49e; margin-bottom: 1em; padding-left: 2em; box-shadow: 0 1px 0 0 rgb(0 0 0 / 3%), 0 5px 5px -3px rgb(0 0 0 / 7%); } /* mfa, tma */ .slsp-archives-hide alma-htgi-svc > * { display: none; } .slsp-archives-hide alma-htgi-svc-after { display: block; } /* hsa */ .slsp-archives-hide prm-alma-viewit > * { display: none; } .slsp-archives-hide prm-alma-viewit-after { display: block; } /* availability-line HSA, if no online resource */ prm-search-result-availability-line.slsp-hsa-no-online prm-icon{ display:none; } prm-search-result-availability-line.slsp-hsa-no-online .availability-status { color: gray; } + /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ /********************** End of the Central Package CSS ************************/ /******************************************************************************/ /******************************************************************************/ /******************************************************************************/ diff --git a/primo-explore/custom/src/html/help/help_en.html b/primo-explore/custom/src/html/help/help_en.html index 192b2a0..13defa7 100644 --- a/primo-explore/custom/src/html/help/help_en.html +++ b/primo-explore/custom/src/html/help/help_en.html @@ -1,504 +1,518 @@ +

swisscovery Help Page

Introduction:

Dear User

Welcome to the swisscovery's help page.

swisscovery is the Swiss Library Service Platform Network (SLSP) discovery tool. In this page you will find useful information about how to use swisscovery and how the SLSP network is organized.

Attention: this help page has been created for the whole SLSP Network! This means that some services may not be available in this specific user interface. Please note that the start page or the record's full display may look different from institution to institution to what is showed in this help page.

Index

General

Online resources

Borrowing/ordering documents

Searching

Displaying the results

Questions?

-

General

+

General

-

SLSP: The Swiss Library Service Platfom

+

SLSP: The Swiss Library Service Platfom

The Swiss Library Service Platform, along with his subsidiary Consortium of Swiss Academic Libraries, with more than - 470 members, is the biggest network of academic and research libraries in Switzerland. Created by libraries, for libraries, it is a joint effort to provide a series of services at the entire country such as, a shared multilingual catalogue of scientific information, a unique representative for e-resources licensing and a performant courier network for physical items sharing. + 475 members, is the biggest network of academic and research libraries in Switzerland. Created by libraries, for libraries, it is a joint effort to provide a series of services at the entire country such as, a shared multilingual catalogue of scientific information, a unique representative for e-resources licensing and a performant courier network for physical items sharing.

SLSP represents an innovative and significant step forward in the digital evolution of scientific libraries in Switzerland. By managing the cloud-based Alma system, the organisation brings together scientific information stored in libraries across Switzerland. By making this information accessible and easily findable, SLSP contributes to scientific discovery and progress.

-

SLSP Network

+

SLSP Network

SLSP Network is divided in several "zones". SLSP itself manage the network zone (NZ) called swisscovery, while libraries have been distributed in 29 "institution zones" (IZ).

An institution zone (IZ) is a group of libraries that have similar needs. The IZ is a key component in the SLSP system and represents a division that enables synergies and increases efficiency. In SLSP we distinguish two types of institution zone: single entity zones and mixed entity zones.

In a single entity zone, most of libraries are legally related to one main entity (for instance a university). In a mixed entity zone, libraries are legally related to different entities (for instance they are grouped together due to geographical considerations)

To access the resources of SLSP members, users must access the users' interfaces called "views". In SLSP we have prepared a view for the Network Zone (NZ), a view for every Institution Zone (IZ) and several views for single libraries.

Every view has its specifics search scopes, which will return different results when used for the search. The swisscovery network zone contains all records coming from the SLSP libraries, some general external resource (for example e-rara data) and the CDI index. The institution zones views and the library views contain the local inventory of the institution zone / library, general and local external resources and the CDI index.

Central Discovery Index (CDI): is a central database of more than 3 billion of records such as: journals articles, e-books, dissertations, conference proceedings, etc.

- +

At the following link you can find the topology of the SLSP Network, comprehensive of the list of all SLSP member libraries divided per institution zone and the link to every existing view of our network. For every IZ and library you can find the address, the contact information and the services they provide.

-

Open an account

+

Open an account

To register with SLSP please first visit to: https://registration.slsp.ch

After starting the registration, you will be asked to login with a SWITCH edu-ID account. If you already have a SWITCH edu-ID account just login to proceed with the registration. If you don't have your password yet, there is a password reset link on the login page.

If you don't have a SWITCH edu-ID account yet, you can click on "Create account" on the login page.

Note: If you study at a university it is possible that you registered with SLSP previously. In this case a message will appear, and you will be forwarded to the view's login section.

-

Library card

+

Library card

With your library card you have access to a series of services, for instance, you can loan a physical item in a library.

If you already have a library card of the BibliOpass network you can optionally provide the library card number during the registration with SLSP or afterwards. Some campus / university / student cards are also valid as library card. Also, some universities will provide the library card number for their users. Which library card numbers are associated to an SLSP account, will be show during registration process with SLSP (see "Open an "account" chapter).

If you don't have a physical library card, you can ask your library to provide you with one.

-

How to Sign in and Sign out

+

How to Sign in and Sign out

In Swisscovery: click on "Sign in" - choose your institution zone - click on "SWITCH edu-ID" - enter your email address and password - click on "Login"

In an institution zone / library view: click on "Sign in" - click on "SWITCH edu-ID" - enter your email address and password - click on "Login"

- +

You need to be signed in to do the following:

  • Order documents (loan, digitization order, ILL)
  • View and control your loans and requests from libraries in the SLSP network.
  • Extend loan periods, cancel reservations
  • Save favorites
  • Save searches and set alerts
  • Change your language settings permanently

As a guest, your favorites, search requests and selected language can only be saved for the current browser session.

Sign out after a session to protect your account against access by other users.

NOTE:

To access online resources, it is not relevant to sign in.

Access to online resources often depends on whether your device is within the network of a licensing university and if you work for or study at this university. Some universities and libraries allow users to access online resources from outside their network using a proxy service. For more information concerning the conditions to access the online resources, you can consult the chapter "Online resources" of this help page, the Consortium's website or the website of the library which licenses for the respective resource.

These conditions aren't applied to the National licences (for more information see the corresponding chapter of this help page).

-

My Account

+

My Account

You must sign in to access your account. Once you did that, click on your name at the top right of the page, you will access to a menu containing some of the submenu of your account. To have full access at your data's account click on "My Account".

From this page you will be able to consult your loans, fees, reminders, requests, messages and many other functionalities.

NOTE: every institution zone has its own space, this means, for example, that if you loan a resource in the BCU Fribourg's institution zone and one at ETH Zürich's institution zone they are splitted in different pages, see below:

- +
-

Update your account

+

Update your account

-

To modify your address or other information of your account go to the My edu-ID page on https://eduid.ch/ and update your edu-ID account. If you want to manage your library card numbers, please go to https://registration.slsp.ch/register/library-card/

+

To modify your address or other information of your account go to the My edu-ID page on https://eduid.ch/ and update your edu-ID account. If you want to manage your library card numbers, please go to https://registration.slsp.ch/register/library-card/

-

Set language

+

Set language

-

To permanently save your language setting log in and select your account in the top right corner of the page. Under “My account” – “Personal details" change the settings in the box “Default interface language”. In alternative, you can change the language setting also in your SWITCH edu-ID account. This change also regulates the language in which the letters (emails) are sent.

+

To permanently change the language of the swisscovery user interface, log in and select your account in the top right corner of the page. Under “My account” – “Personal details" change the settings in the box “Default interface language”.

+

Please note: The language in which the letters (emails) are sent can only be adjusted in your SWITCH edu-ID account by changing the preferred language. +

-

Online resources

+

Online resources

-

Online resources

+

Online resources

All kinds of online resources offered by the participating libraries are indexed in the search: books, journals, databases, digitized photos, maps, manuscripts and other collection items. However, not all documents are freely accessible. Many documents are acquired with what is known as a licence and are only available in the network of the licensing university. With the aid of filters, you can narrow the search down to freely accessible (Online - Open Access) or licenced (Online) documents.

- +

For online resources, the "View Online" section in the full display provides information about the availability of the resource in your institution and in others IZs of the SLSP Network. To access the resource, - click on the icon + click on the icon

- +
-

Online services for university members

+

Online services for university members

In addition to Open Access documents, you can use your university's online services. E-journals, eBooks and databases are acquired with what are known as licences and the access is restricted exclusively to the network of the licensing institution (on campus). From outside the university, you can use VPN, Eduroam, EZProxy, etc. to access these documents. Please check your library or IT university's website for remote access information.

The "View Online" section provides available services for the resource at your institution and in other institution zones of the SLSP Network. Click on "Available online" - and the icon to get the full display view. + and the icon to get the full display view.

- - + +
-

Online services for people who are not members of a university

+

Online services for people who are not members of a university

In addition to Open Access and online resources under a national licence, you can also use the universities' licensed resources, albeit not from your own computer.

Academic e-journals, eBooks and databases are acquired with what are known as licences and the access is restricted exclusively to the network of the licensing institution (on campus). You can download and/or access the resources on premise of the licensing library.

Which libraries offer access to an online resource are displayed under locations:

- - + +
-

Open Access

+

Open Access

Open Access documents are freely accessible. These are journal articles or books on various platforms or in institutional repositories on the one hand and digitized documents from library holdings on the other. These documents are marked in the list of results.

- +
-

National licenses

+

National licenses

All people who reside in Switzerland have access to online resources under the national license. This requires a one-off free registration; further information is available at the address https://consortium.ch/zugriff/?lang=en . Resources available under a National licence are marked in bracket in the "Full text availability" section.

- +
-

Borrowing/requesting documents

+

Borrowing/requesting documents

-

Borrowing/requesting documents

+

Borrowing/requesting documents

Under "Get It" in the full display, you can see the libraries where the document is located and whether it is currently available.

Under "Other options" you can see if SLSP libraries from other IZs also have this item available.

- +

Select your desired request option: Request (physical item), Digitization (electronic or paper copy) or Resource Sharing. You must be signed in to place an order.

- +

If you select Request, you can request a physical item to pick-up at a library. You can also order some items per post. If this option is allowed, you can choose it by selecting your institution in the "Pick-up institution" field and Home Address in the "Pick-up location" field.

If you would like to get an electronic or paper copy of an article or chapter, click on Digitization and fill in the form with as much details as possible.

Note: These services may not be available in your IZ / library and may be subject to costs. For further information click here.

-

Extending loan periods

+

Extending loan periods

In My Account, you see your current loans and can renew them all or individually, provided this is permitted by the loan conditions.

- +

Note: The new loan period always runs as of immediately. If you renew a document yourself before the automatic loan period ends, the maximum possible loan period becomes shorter.

Note: Loan conditions may vary depending on the institutions and type of material.

-

List of previous loans

+

List of previous loans

In My Account, in every the "Loans" section of the IZs, you can see your active and previous loans.

- +

Note: In some institutions zones / libraries this option is not available due to cantonal privacy laws restrictions.

-

Searching

+

Searching

-

SLSP search profiles

+

swisscovery search profiles

-

SLSP operates with two standard search profiles that can be found in every view. The first is "swisscovery", the second is "My Library". This infographic explains where you search while using one of the two. In certain institution zones or library views it is possible to find additional custom search profiles created by the institution zone / library.

- -

My library: Includes the local inventory of the institution zone / library + external resources loaded in this institution zone (general and local) + CDI (CDI could also be used as a separate search profile). This search profile is always named after the institution.

-

All SLSP libraries: All records of the SLSP network + general external resources + CDI

-

Custom Search Profile: Some institution zones / libraries prepared their own search profiles including Custom Local Data Scope(s).

-

Central Discovery Index (CDI): Is a central database comprehensive of thousands of sources for a total of more than 3 billion of records such as: journals articles, e-books, dissertations, conference proceedings, patents, reports, government document, images and videos. Depending on the institution zone / library view, the CDI is searchable in the "My Library" search profile, in a separate search profile or both.

-

General External resources: swisscovery has been enriched by adding general electronic external resources. A detailed list of these resources is available here.

-

Local external resources: In addition to the general external resource, some institution zones also provide local external resource.

+

swisscovery operates with two standard search profiles that can be found in every view. The first is "swisscovery", the second is "My Library". This infographic explains where you search while using one of the two. In certain institution zones or library views it is possible to find additional custom search profiles created by the institution zone / library.

+
+

swisscovery:

+

Within the library platform swisscovery around 475 academic libraries from all over Switzerland have joined forces. The search portal of the same name allows users to search not only the physical media holdings, but also a wide range of electronic resources such as databases, newspapers, digital objects, articles and journals. Thanks to the central user account via the SWITCH edu-ID, this content from all libraries can not only be searched, but also borrowed, reserved, delivered nationwide via digitization order, courier or postal delivery, or accessed directly in full text online with just one registration.

+

My library:

+

You only want to search the holdings of your favorite local library? No problem, after conducting a search you will find filter options on the left to narrow down your results to a single library or a specific region, so that only results from their physical and electronic media collection are presented. In case some of the items are currently unavailable at your local library, you will find an information whether they can be retrieved from another library within the large swisscovery network in the detailed view of each result under "other loan and request options".

+

E-Resources:

+

In swisscovery you can find not only printed media, but also search for a wide array of open access and licensed digital media collections. All electronic databases, journals, daily newspapers, articles, film, and audio streaming services offered by swisscovery libraries can be searched and found here. Access to individual electronic resources may be restricted to members of a particular university or residents of a particular canton, depending on the license conditions of the provider. To have accurate information about what is available, it is recommended to login with your account in swisscovery.

+

Physical resources:

+

In swisscovery you can find all media, which the participating libraries have in their holdings on site. In addition to printed media such as books, magazines, and newspapers, this also includes other physical media such as images, film, and sound recordings, as well as precious manuscripts, old prints, letters, bequests, and maps.

+

Digital objects:

+

The valuable holdings from the swisscovery libraries with special and historical collections are extensively digitized, indexed and prepared for immediate online use. In addition to books, journals and newspapers, these may also include manuscripts, letters, old prints as well as archive holdings and bequests from platforms such as e-rara, e-manuscripta and e-codices, all of which can also be searched and accessed on swisscovery.

+

Consortium resources:

+

The consortium of Swiss university libraries acquires licenses for scientific resources (electronic journals, e-books and databases), which can also be searched on swisscovery. These include the so-called national licenses, which are available in full text not only to researchers, students and university staff, but also to all private users with permanent residence in Switzerland.

+

Institutional repositories:

+

Many universities make their researchers' and students' papers and theses freely available to the general and scientifically interested public in open access online repositories. These repositories are also searched in swisscovery and linked directly to the full text of the publication.

+

Full text articles and more (CDI):

+

The Central Discovery Index (CDI) is a search index and thus the elementary basis of index-based search engines such as Google. A search index can best be compared to a (very) long list that includes all the searchable content. In addition to descriptive information, such as the title or author of a work, this content can also include the full texts of complete books, databases, or journals. In the end, the search engine only searches this list and not the actual data source directly. This has enormous advantages: On the one hand, even with billions of recorded entries, a search of the entire database is possible in just a few seconds. On the other hand, these results can be sorted by "relevance" - results in which the search terms appear more frequently or in a more prominent position (e.g. in the title) are displayed before others with fewer matches. The Central Discovery Index is a search index aggregated by the provider Ex Libris / ProQuest. It contains complete articles from journals, book chapters, book reviews, research data, but also many film and audio documents. The total number of entries is well over 3 billion. The individual swisscovery libraries and regions can decide for themselves which of these contents they would like to have included in the swisscovery search by activating them. You can also select for yourself at any time next to the search line whether you want to perform a search "with" or "without CDI", if the search bandwidth in the Central Discovery Index seems too large to you.

+

Courier services and Interlibrary Loan:

+

If you have found a book you are interested in during your research in swisscovery, but you are not able to view or pick it up at the owning library, you have the possibility to have the book delivered directly to your home (CHF 12 / medium, depending on the user group) or to your preferred local library (CHF 6-12 / medium, depending on your user group). For all swisscovery libraries that are connected to the SLSP Courier, this is possible within 48 hours nationwide. In addition, it is also possible to have media from all libraries in Switzerland and abroad delivered by interlibrary loan. For this service, the delivering libraries charge different fees and the delivery usually takes longer.

-

Simple search

+

Simple search

The simple search enables a rapid access to the library resources.

- +
-

Advanced search

+

Advanced search

The search fields of the advanced search can be combined with AND, OR or NOT.

- +

In this example the search is limited to books in English that contain "mountain railway" in the title and Switzerland as a subject.

With the aid of the second (or third field), you can specify whether the search terms should be contained in the field or if it must correspond exactly at the search terms.

-
+

Here you can put a few words from the title, not necessarily in order

- +

Here you are looking for this exact title

- +

And here, you're looking for titles that start with the word "mountain"

-

Searching for a phrase

+

Searching for a phrase

If you would like to search for a phrase (word group), put it in quotation marks. You can combine phrases and words in a search:

- +

The results include documents that contain both the term "piz buin" and the aspect "mountain".

-

Searching with wildcards

+

Searching with wildcards

The asterisk * and the question mark ? can be used as wildcards for the search.

The asterisk * is used to replace zero, one or several characters:

- +

For example, it allow to searches for culture, cultures, cultural etc.

The asterisk * can also help to find different spellings:

- +

searches for yogurt, yoghurt, yogourt, yoghourt, etc.

The question mark ? is the wildcard for replacing one single character:

- +

searches for both woman and women.

You can also combine these two characters:

- +

You'll get results with yoghurt, yogurt, yoghurts or yogurts.

-

Using Boolean operators to expand or narrow a search

+

Using Boolean operators to expand or narrow a search

You can use the Boolean operators AND, OR and NOT. These must be written in capital letters.

Without operators, the search terms are automatically combined with AND. In other words, all search terms must appear in the results.

OR

At least one of the search terms linked with OR must appear in the results. For example, use OR to combine related terms in order to expand the search to several terms (synonyms, different spellings):

- +

NOT

The search term excluded with NOT must not appear in the results. In other words, NOT enables words or phrases to explicitly be excluded.

NOTE: The Boolean operator NOT is available only in the simple search

- +

The results include documents that contain the phrases "climate change", but not "global warming".

-

My Favorites

+

My Favorites

In "My Favorites", you can save titles that you find during your search. Long-term saving is only possible if you are signed in. As a guest, the favorites are only at your disposal during the current browser session.

If you click on the pin icon - of a title, the title is added to your favorites; the pin icon changes to - . If you click on - , the title is removed from the favorites. + of a title, the title is added to your favorites; the pin icon changes to + . If you click on + , the title is removed from the favorites.

You can access your collection of favorites via the pin icon - at the top right of the page. + at the top right of the page.

You can remove or export individual titles from your favorites list. Highlight one or several titles and use the symbols at the top of the page in order to delete them, add labels, export them to reference management programs, print them or send them via email:

- +

In order to view the details of a title, click on the title.

You will also find the search history for the current session in "My favorites".

-

Search history

+

Search history

The searches from the current session are recorded in your favorites under "Search history".

You reach it directly via the icon - at the top right of the page. + at the top right of the page.

- +
-

Saving and managing searches

+

Saving and managing searches

If you are signed in, you can save searches permanently. To do so, click on "Save query" above the list of results:

- +

NOTE: The "Save query" option is only displayed if you are signed in and have submitted a search.

When saving your query, you can receive email notifications when there is an update to the query. To activate this service a message will appear automatically at the top of the page.

-
- +
+

The saved searches are stored in "My Favorites" - in the tab "Saved searches". + in the tab "Saved searches".

- +

You can perform the search again by clicking it. You can set up a notification (by RSS or email) using the symbols on the right to keep you informed of newly added documents that match you search.

-

Displaying the results

+

Displaying the results

-

Narrowing down results

+

Narrowing down results

Filtering terms are proposed on the left-hand column which enable you to narrow down your search results:

- +

Clicking on "Books" limits the list of results to the 4'075 books found.

In order to exclude a term, click on the red symbol on the right next to the term.

- +

With "Show more", you can display additional terms and refine the search by including or excluding several terms.

Example: Narrow down the results to "dissertations", "videos" and "audios".

- +

In order to remove one filter, click on the x. "Reset filters" removes all filters.

- +

A new search entry automatically removes all filters. However, you can retain a filter for the duration of the browser session by selecting it and then clicking on the lock symbol. To remove this filter, click on the lock again.

- +
-

List of results: sorting

+

List of results: sorting

By default, the results are sorted by relevance. You can also sort them by date, author and title.

- +
-

List of results: versions

+

List of results: versions

If a work is available in several versions (i.e. in different editions or prints), click on the icon, the title or "See all versions" to list all the versions.

- +

You can return to the list of results by closing the list of versions under "Active filters".

- +
-

Viewing individual titles

+

Viewing individual titles

When you click on a title, you can select the following actions:

- +

Top: go back at the top of the page

Loan and request options: view locations, place orders for loans, reservations or photocopies.

Send to: export title information to reference management program, export citation, create permalink to result, print or send title by email. Export actions can be applied in bulk up to 50 records.

Details: further information on the title.

Links: links to table of contents, to earlier/later title, to all volumes of a series.

Virtual browse: you can see a library shelf in relation to the selected record so that you may find other items that are related to their search.

Questions?

- -

Contact information

-
-

For any question, doubt, comment or request don't hesitate to contact us

+ +

Contact information

+
+

For further questions please contact your library directly.

+
- - -
+
diff --git a/primo-explore/custom/src/html/help/help_fr.html b/primo-explore/custom/src/html/help/help_fr.html index 6293226..fc28351 100644 --- a/primo-explore/custom/src/html/help/help_fr.html +++ b/primo-explore/custom/src/html/help/help_fr.html @@ -1,499 +1,514 @@ +

swisscovery Help Page

- +

Introduction:

Cher usager,

Bienvenue sur la page d'aide de swisscovery.

Swisscovery est l'outil de découverte de Swiss Library Service Platform Network (SLSP). Sur cette page, vous trouverez des informations utiles sur la manière d'utiliser swisscovery et sur l'organisation du réseau de SLSP.

Attention: cette page d'aide a été créée pour l'ensemble du réseau SLSP! Cela signifie que certains services peuvent ne pas être disponibles dans cette interface usager spécifique. Veuillez noter que la page d'accueil ou l'affichage complet de la notice peut varier d'une institution à l'autre par rapport à ce qui est présenté ici.

Index

Général

Ressources en ligne

Emprunter/demander des documents

Rechercher

Afficher les résultats

Des questions?

-

Général

+

Général

-

SLSP: Swiss Library Service Platform

+

SLSP: Swiss Library Service Platform

-

Swiss Library Service Platform ainsi que sa filiale, le Consortium des bibliothèques universitaires suisses, comptant plus de 470 membres, est le plus large réseau de bibliothèques de recherche universitaires de Suisse. Créé par des bibliothèques pour les bibliothèques, il s'agit d'un effort conjoint visant à offrir un panel de services dans tout le pays tels qu'un catalogue multilingue partagé d'informations scientifiques, une représentation unique de l'octroi de licences pour les ressources électroniques et un réseau performant de navettes dans le cadre du partage des exemplaires physiques.

+

Swiss Library Service Platform ainsi que sa filiale, le Consortium des bibliothèques universitaires suisses, comptant plus de 475 membres, est le plus large réseau de bibliothèques de recherche universitaires de Suisse. Créé par des bibliothèques pour les bibliothèques, il s'agit d'un effort conjoint visant à offrir un panel de services dans tout le pays tels qu'un catalogue multilingue partagé d'informations scientifiques, une représentation unique de l'octroi de licences pour les ressources électroniques et un réseau performant de navettes dans le cadre du partage des exemplaires physiques.

SLSP représente une avancée novatrice et significative dans l'évolution numérique des bibliothèques scientifiques en Suisse. En gérant le système basé dans le cloud Alma, l'organisation rassemble les informations scientifiques conservées dans les bibliothèques sur tout le territoire. En rendant ces informations accessibles et faciles à trouver, SLSP contribue à la découverte et au progrès scientifiques.

-

Réseau SLSP

+

Réseau SLSP

Le réseau SLSP est divisé en plusieurs «zones». SLSP gère la zone réseau (NZ) appelée swisscovery, tandis que les bibliothèques ont été réparties en 29 "zones institutionnelles" (IZ).

Une zone institutionnelle (IZ) est un groupe de bibliothèques ayant des besoins similaires. L'IZ est un élément-clé du système SLSP, il permet des associations et accroît l'efficacité. Au sein de SLSP, nous distinguons deux types de zone institutionnelles: les zones à entité unique et les zones à entité mixte.

Dans une zone à entité unique, les bibliothèques sont liées à une entité principale d'un point de vue juridique (par exemple une Université). Dans une zone à entité mixte, les bibliothèques sont liées à différentes entités juridiques (elles sont par exemple groupées ensemble pour des considérations d'ordre géographique).

Pour accéder aux ressources des membres de SLSP, les usagers doivent accéder aux interfaces usagers appelées «vues». Au sein de SLSP, nous avons préparé une vue pour la Zone réseau (NZ), une vue pour la Zone institutionnelle (IZ) et plusieurs vues pour les bibliothèques individuelles.

Chaque vue dispose de domaines de recherche spécifiques qui donneront des résultats différents lors de la recherche. La zone réseau swisscovery comprend l'ensemble des notices des bibliothèques SLSP, certaines ressources externes générales (par exemple la base de données e-rara) et l'index CDI (Central Discovery Index). Les vues des zones institutionnelles et les vues des bibliothèques contiennent l'inventaire local de la zone institutionnelle / bibliothèque, des ressources externes générales et locales ainsi que l'index CDI.

Central Discovery Index (CDI): il s'agit d'une base de données centralisée comportant plus de 3 milliards de notices telles que: articles de périodiques, e-books, thèses, comptes rendus de conférences, etc.

- +

En cliquant sur le lien suivant, vous trouvez la topologie du réseau de la SLSP, une liste détaillée de l'ensemble des bibliothèques membres, organisée par zone institutionnelle ainsi que le lien vers chaque vue existante de notre réseau. Vous y trouvez l'adresse, les coordonnées et les services proposés par chaque IZ et bibliothèque.

-

Créer un compte

+

Créer un compte

Pour s'enregistrer sur SLSP, rendez-vous d'abord sur: https://registration.slsp.ch

Au début de l'enregistrement, il vous est demandé de vous connecter avec un compte SWITCH edu-ID. Si vous avez déjà un compte SWITCH edu-ID, connectez-vous pour procéder à l'enregistrement. Si vous n'avez pas encore de mot de passe, un lien sur la page de connexion vous permet de le réinitialiser.

Si vous n'avez pas encore de compte SWITCH edu-ID, cliquez sur "Créer un compte" sur la page de connexion.

Remarque: Si vous étudiez dans une Université, il est possible que vous soyez déjà enregistré(e) sur SLSP auparavant. Si tel est le cas, un message apparaîtra et vous serez redirigé(e) vers la page de connexion.

-

Carte de bibliothèque

+

Carte de bibliothèque

Avec votre carte de bibliothèque, vous avez accès à tout un panel de services, vous pouvez par exemple emprunter un exemplaire physique dans une bibliothèque.

Si vous possédez déjà une carte de bibliothèque du réseau BibliOpass, vous pouvez éventuellement indiquer ce numéro de carte lors de l'enregistrement sur la SLSP ou ultérieurement. Certaines cartes de campus / d'Université / d'étudiant peuvent également faire office de carte de bibliothèque. De même, certaines Universités fourniront le numéro de carte de bibliothèque à leurs utilisateurs. Les numéros de carte de bibliothèque associés à un compte SLSP seront affichés pendant le processus d'enregistrement sur SLSP (voir le chapitre "Créer un compte").

Si vous ne possédez pas de carte de bibliothèque, vous pouvez demander à votre bibliothèque de vous en fournir une.

-

Comment s'identifier et se déconnecter

+

Comment s'identifier et se déconnecter

Dans swisscovery: cliquez sur «S'identifier» - choisissez votre zone institutionnelle - cliquez sur «SWITCH edu-ID» - entrez votre adresse e-mail et votre mot de passe - cliquez sur «Connexion»

Dans la vue de votre zone institutionnelle / bibliothèque: cliquez sur «S'identifier» -- cliquez sur «SWITCH edu-ID» - entrez votre adresse e-mail et votre mot de passe - cliquez sur «Connexion»

- +

Vous devez être connecté(e) pour procéder aux actions suivantes:

  • Demander des documents (prêt, demande de numérisation, prêt entre bibliothèques)
  • Afficher et surveiller vos prêts et demandes en provenance de bibliothèques du réseau de SLSP.
  • Prolonger un délai de prêt, annuler des réservations
  • Sauvegarder vos favoris
  • Enregistrer les requêtes et activer des notifications
  • Modifier la langue de manière définitive

En tant qu'invité, vos favoris, demandes de recherche et la langue sélectionnée ne peuvent être enregistrés que pour la session de navigation courante.

Déconnectez-vous après une session pour protéger votre compte d'un éventuel accès par d'autres usagers.

NOTE:

Certaines ressources en ligne sont accessibles sans identification, mais pour accéder à l'ensemble des ressources disponibles selon votre institution, il est utile de s'identifier.

L'accès aux ressources en ligne dépend souvent de votre affiliation à une Haute Ecole octroyant des licences, p. ex. en tant qu'étudiant ou que chercheur. Certaines Hautes Ecoles autorisent les usagers à accéder aux ressources en ligne à distance (remote access). Pour plus d'informations sur les conditions d'accès aux ressources en ligne, vous pouvez consulter le chapitre «Ressources en ligne» sur cette page d'aide, le Consortium's website ou le site Web de la bibliothèque.

Ces conditions ne s'appliquent pas aux licences nationales (pour plus d'informations, voir le chapitre correspondant sur cette page d'aide).

-

Mon compte

+

Mon compte

Vous devez vous identifier pour accéder à votre compte. Une fois identifié(e), cliquez sur votre nom situé en haut à droite de la page. Vous accédez à un menu contenant certains des sous-menus de votre compte. Pour avoir un accès complet aux données de votre compte, cliquez sur «Mon compte».

Depuis cette page, vous serez en mesure de consulter vos prêts, demandes, amendes, messages ainsi que bien d'autres fonctionnalités.

NOTE: Chaque zone institutionnelle dispose de son propre espace. Cela signifie que si vous empruntez une ressource à la zone institutionnelle « EPF Lausanne » par exemple, et une autre à la zone institutionnelle « ETH Zurich », vos emprunts sont répartis sur des pages différentes, voir ci-dessous:

- +
-

Mettre à jour votre compte

+

Mettre à jour votre compte

Pour modifier votre adresse ou toute autre information concernant votre compte, allez sur la page Mon edu-ID sur https://eduid.ch/ et mettez à jour votre compte edu-ID. Veuillez noter que les modifications effectuées sur «Mon compte» dans swisscovery ou dans les zones institution seront écrasées par les informations provenant d'edu-ID. Si vous souhaitez gérer vos numéros de carte de bibliothèque, allez sur https://registration.slsp.ch/register/library-card/

-

Définir la langue

+

Définir la langue

-

Pour sauvegarder de façon permanente votre préférence de langue, connectez-vous pour ouvrir votre compte, en haut à droite de la page. Dans « Mon compte » - « Informations personnelles" modifiez les paramètres de langue dans la case "Langue de l'interface par défaut". Alternativement, vous pouvez modifier le paramètre de langue dans votre compte SWITCH edu-ID. Ce changement règle également la langue dans laquelle les lettres (courriels) sont envoyées.

+

Pour changer de manière permanente votre langue préférée dans swisscovery, connectez-vous à votre compte en haut à droite de la page. Dans "Mon compte" - "Informations personnelles", sélectionnez la langue désirée dans l'encadré "Langue de l'interface par défaut". +

+

Attention, la langue dans laquelle les lettres (emails) sont envoyées ne peut uniquement être changée dans votre compte SWITCH edu-ID. +

-

Ressources en ligne

+

Ressources en ligne

- -

Ressources en ligne

+

Ressources en ligne

Lors d'une recherche, l'ensemble des ressources proposées par les bibliothèques participantes sont indexées: livres, périodiques, bases de données, photos numérisées, cartes, manuscrits et autres objets. Toutefois, tous les documents ne sont pas en libre accès. De nombreux documents nécessitent une licence et ne sont disponibles que dans le réseau de l'Université qui possède la licence. l'aide de filtres, vous pouvez restreindre la recherche aux documents sous licence et en libre-accès (Online) ou sélectionner uniquement les documents en libre accès (Online - Open Access).

- +

- Pour les ressources en ligne, la section «Consulter en ligne» dans l'affichage complet donne des informations sur la disponibilité de la ressource dans votre institution et dans d'autres IZ du réseau de SLSP. Pour accéder à la ressource, cliquez sur l'icône + Pour les ressources en ligne, la section «Consulter en ligne» dans l'affichage complet donne des informations sur la disponibilité de la ressource dans votre institution et dans d'autres IZ du réseau de SLSP. Pour accéder à la ressource, cliquez sur l'icône

- +
-

Ressources en ligne pour les membres des Universités

+

Ressources en ligne pour les membres des Universités

Outre les documents en libre-accès (Open Access), vous pouvez utiliser les services en ligne de votre Université. Les périodiques électroniques, e-books et bases de données sont acquises via des licences et l'accès est limité exclusivement au réseau de l'institution licenciée licences (sur le campus). En dehors de l'Université, vous pouvez utiliser un accès VPN, Eduroam, EZProxy, etc. pour accéder à ces documents. Veuillez consulter le site du service informatique de votre bibliothèque ou Université pour obtenir plus d'informations sur l'accès à distance.

- La section «Consulter en ligne» indique les services disponibles pour les ressources dans votre institution et dans d'autres zones institutionnelles du réseau de SLSP. Cliquez sur «Disponible en ligne» et sur l'icône pour obtenir l'affichage complet. + La section «Consulter en ligne» indique les services disponibles pour les ressources dans votre institution et dans d'autres zones institutionnelles du réseau de SLSP. Cliquez sur «Disponible en ligne» et sur l'icône pour obtenir l'affichage complet.

- - + +
-

Ressources en ligne pour les personnes qui ne sont pas membres d'une Université

+

Ressources en ligne pour les personnes qui ne sont pas membres d'une Université

Outre les ressources en libre accès (Open Access) et les ressources en ligne sous licence nationale, vous pouvez utiliser les ressources sous licence des Universités à condition d'être dans leurs locaux.

Les périodiques électroniques, e-books et bases de données universitaires sont acquises via des licences et l'accès est limité exclusivement au réseau de l'institution licenciée (sur le campus). Vous pouvez ainsi télécharger et/ou avoir accès aux ressources dans les locaux de la bibliothèque.

Les bibliothèques donnant accès à une ressource en ligne sont affichées dans localisations:

- - + +
-

Open Access

+

Open Access

Les documents « Open Access » sont libres d'accès. Il s'agit d'une part d'articles de périodiques ou d'e-books sur différentes plateformes ou dans des répertoires institutionnels, et d'autre part de documents numérisés des bibliothèques. Ces documents sont indiqués dans la liste de résultats avec une icône « open access ».

- +
-

Licences nationales

+

Licences nationales

Toute personne résidant en Suisse a accès aux licences nationales. Cela requiert un enregistrement unique gratuit; vous trouvez plus d'informations sur https://consortium.ch/zugriff/?lang=en . Veuillez noter que pour l'enregistrement destiné à l'accès aux licences nationales, il est possible d'utiliser le même edu-ID que pour swisscovery. Les ressources disponibles sous licences nationales sont indiquées entre parenthèses dans la section «Disponibilité du texte intégral».

- +
-

Emprunter/demander des documents

+

Emprunter/demander des documents

-

Emprunter/demander des documents

+

Emprunter/demander des documents

Sous «Obtenir» dans l'affichage complet, vous pouvez voir les bibliothèques où se trouve le document et s'il est disponible. La livraison d'un exemplaire vers une bibliothèque de retrait peut être payante.

Sous «Autres options» , vous pouvez voir si des bibliothèques d'autres zones institutionnelles SLSP possèdent également cet exemplaire.

- +

Sélectionnez l'option de demande que vous souhaitez: Demander (exemplaire physique/réservation) ou Numérisation (exemplaire électronique ou papier). Vous devez être connecté(e) pour effectuer une demande.

- +

Si vous sélectionnez Demander, vous pouvez demander un exemplaire physique à retirer dans une bibliothèque. Vous pouvez également demander certains exemplaires via le service d'accès par navette (service payant). Si cette option est proposée, vous pouvez l'utiliser en sélectionnant votre institution dans le champ «institution de retrait» et l'adresse de votre domicile dans le champ «lieu de retrait».

Si vous souhaitez obtenir un exemplaire électronique ou papier d'un article ou d'un chapitre, cliquez sur Numérisation et remplissez le formulaire avec autant d'informations que possible.

Note:Ces services ne sont pas nécessairement disponibles dans votre IZ / bibliothèque et peuvent être payants. Pour plus d'informations, cliquez ici.

-

Prolonger les périodes de prêt

+

Prolonger les périodes de prêt

Dans Mon compte, vous pouvez voir vos prêts en cours et les renouveler tous ou individuellement sous réserve que les conditions du prêt le permettent.

- +

Note: les conditions de prêt peuvent varier en fonction des institutions et du type de matériel.

-

Historique des prêts passés

+

Historique des prêts passés

Dans Mon compte, dans la section «Prêts» des IZ, vous pouvez voir vos prêts en cours et passés.

- +

Note: dans certaines zones institutionnelles / bibliothèques, cette option n'est pas disponible en raison de restrictions imposées par la loi cantonale sur la protection de la vie privée.

-

Rechercher

+

Rechercher

-

Profils de recherche de SLSP

+

Profils de recherche de swisscovery

-

SLSP fonctionne avec deux profils de recherche standards disponibles dans toutes les vues. Le premier s'intitule « Toutes les bibliothèques SLSP » et le second « Ma bibliothèque ». Ce schéma explique dans quelle zone est effectuée votre recherche lorsque vous utilisez l'un ou l'autre. Dans certaines zones institutionnelles ou vues de bibliothèque, il est possible d'avoir des profils de recherche supplémentaires personnalisés créés par la zone institutionnelle / bibliothèque.

- -

Ma bibliothèque: Inclut l'inventaire local de la zone institutionnelle / bibliothèque + les sources de données externes téléchargées dans cette zone institutionnelles (sources de données générales et sources de données locales ou répertoires institutionnels) + le Central Discovery Index (le CDI peut également être utilisé comme profil de recherche distinct). Ce profil de recherche porte toujours le nom de l'institution.

-

swisscovery: inclut l'ensemble des notices du réseau SLSP + les sources de données externes générales + le Central Discovery Index

-

Profil de recherche personnalisé: certaines zones institutionnelles / bibliothèques ont créé leurs propres profils de recherche, y compris des profils de recherche limités à des données locales.

-

Central Discovery Index (CDI): est une base de données centralisée comportant des milliers de ressources pour un total de 3 milliards de notices telles que: articles de revues, e-books, thèses, comptes rendus de conférences, brevets, rapports, documents gouvernementaux, images, vidéos, etc. Suivant la vue zone institutionnelle / bibliothèque, il est possible de chercher dans le CDI par le profil de recherche «Ma bibliothèque», par un profil de recherche distinct ou par les deux profils

-

Ressources externes générales: swisscovery s'est vu doté de ressources électroniques externes générales, en particulier de répertoires institutionnelles.

-

Ressources externes locales: outre les ressources externes générales, certaines zones institutionnelles proposent également des ressources externes locales.

+

swisscovery fonctionne avec deux profils de recherche standards disponibles dans toutes les vues. Le premier s'intitule « swisscovery » et le second « Ma bibliothèque ». Ce schéma explique dans quelle zone est effectuée votre recherche lorsque vous utilisez l'un ou l'autre. Dans certaines zones institutionnelles ou vues de bibliothèque, il est possible d'avoir des profils de recherche supplémentaires personnalisés créés par la zone institutionnelle / bibliothèque.

+
+

swisscovery:

+

Environ 475 bibliothèques académiques suisses se sont regroupées sur la plateforme nationale de biblio-thèques swisscovery. Le portail de recherche du même nom vous permet d’effectuer une recherche dans le répertoire des ressources physiques, ainsi que dans un vaste éventail de ressources électroniques telles que bases de données, journaux, objets numériques, articles et revues spécialisées. Grâce au compte utilisateur centralisé accessible via SWITCH edu-ID, il vous est non seulement possible, moyennant un enregistrement unique, de rechercher ces contenus auprès de toutes les bibliothèques, mais également de les emprunter directement en émettant une demande via un formulaire de numérisation, de vous les faire livrer dans tout le pays par navette ou envoi postal ou encore de les consulter directement ligne et en texte intégral.

+

Ma bibliothèque:

+

Vous souhaitez consulter uniquement le répertoire de votre bibliothèque locale préférée? Aucun problème: après une recherche, vous trouvez, sur la partie de gauche, des filtres permettant de restreindre les résultats à une bibliothèque ou à une région déterminée. Vous pourrez alors consulter uniquement les ressources physiques et électroniques qui s’y trouvent. Si certaines ressources ne sont pas disponibles ou consultables à l’endroit souhaité, vous verrez apparaître dans la vue détaillée de chaque résultat, sous «Options de prêt et de demande», des informations indiquant si ces ressources sont disponibles dans une autre bibliothèque du grand réseau swisscovery.

+

Ressources électroniques:

+

swisscovery vous permet de rechercher des médias imprimés mais aussi et surtout des ressources numé-riques. L’ensemble des bases de données électroniques, revues, journaux, articles et offres de streaming vidéo et audio proposé par les bibliothèques participantes swisscovery peut y être consulté et trouvé. En fonction des conditions de licence du prestataire, l’accès à certaines ressources peut être restreint aux membres d’une certaine Haute école ou aux habitants et habitantes d’un certain canton. Pour savoir préci-sément à quels contenus vous avez accès, nous vous conseillons de vous connecter à swisscovery avec votre compte personnel.

+

Titres physiques:

+

Dans swisscovery, vous pouvez consulter toutes les ressources disponibles physiquement dans les biblio-thèques participantes: imprimés tels que livres, revues et journaux, autres ressources physiques tels qu’images, enregistrements vidéo et sonores ainsi qu’un certain nombre de manuscrits précieux, imprimés anciens, lettres, legs et cartes.

+

Objets numériques:

+

Les fonds précieux des bibliothèques swisscovery disposant de collections historiques uniques et spéciales font tout particulièrement l’objet de numérisation, catalogage et préparation minutieuse pour une utilisa-tion immédiate en ligne. Il peut s’agir de livres, revues et journaux, mais également de manuscrits, lettres, imprimés anciens ou encore d’archives ou legs provenant de plateformes telles qu’e-rara, e-manuscripta et e-codices, que vous pouvez rechercher et consulter dans swisscovery.

+

Ressources du Consortium:

+

Le Consortium des bibliothèques universitaires suisses acquiert des licences pour ressources scientifiques (revues électroniques, e-books et bases de données) qui peuvent aussi être recherchées dans swisscovery. Il peut s’agir notamment de licences nationales qui peuvent être consultées en texte intégral, non seulement par toutes les personnes affiliées aux Hautes écoles, mais également par tous les utilisateurs et utilisatrices privés ayant leur domicile fixe en Suisse.

+

Répertoires institutionnels:

+

De nombreuses Hautes écoles mettent gratuitement à la disposition de toute personne intéressée par la science, dans des recueils en ligne, les travaux de recherche et de Bachelor de leurs chercheurs et cher-cheuses, étudiants et étudiantes, publiés en Open Access. Ces recueils sont également parcourus par le mo-teur de recherche de swisscovery avec un lien systématique vers le texte intégral de la publication.

+

Articles en texte intégral et plus (CDI):

+

Le Central Discovery Index (CDI) est un index de recherche et constitue donc la base élémentaire des mo-teurs de recherche basés sur les index tels que Google par exemple les emploie. Un index de recherche est en quelque sorte une (très) longue liste de tous les contenus à parcourir. + Outre les informations descriptives, telles que le titre ou l'auteur_e d'une œuvre, ce contenu peut également inclure le texte intégral de livres entiers, de bases de données ou de revues. Dans les faits, c’est toujours cette liste que le moteur de recherche parcourt directement, et non la source de données effective. Cela offre d’énormes avantages, notamment celui de pouvoir effectuer rapidement une recherche dans l’ensemble du répertoire de données, même s’il existe des milliards d’entrées répertoriées. Cela permet aussi de trier ces résultats par «pertinence» – les résultats où les termes recherchés apparaissant plus fréquem-ment ou en bonne position (p. ex. dans le titre) sont affichés avant d’autres ayant moins de concordances. Le Central Discovery Index est un index de recherche réalisé par le prestataire Ex Libris / ProQuest, qui con-tient notamment des articles complets de revues spécialisées, des chapitres et des critiques de livres, des données de recherche, mais aussi de nombreuses vidéos et documents audio. Son volume dépasse large-ment les 3 milliards d’entrées. Les différentes bibliothèques swisscovery peuvent décider lesquels de ces contenus elles souhaitent intégrer dans la recherche de swisscovery, par activation individuelle. À tout mo-ment, si l’ampleur de la recherche dans le Central Discovery Index vous paraît trop importante, vous pouvez également sélectionner vous-même, à côté de la ligne de recherche, si vous souhaitez effectuer une re-cherche «avec» ou «sans CDI».

+

Courier services and Interlibrary Loan:

+

Si vous avez trouvé un livre intéressant lors de votre recherche dans swisscovery, mais que vous n’avez pas la possibilité de le consulter ou d’aller le chercher à la bibliothèque qui le possède, vous pouvez vous le faire livrer directement à votre domicile (CHF 12/média, selon le groupe d’utilisateurs) ou à la bibliothèque affiliée que vous souhaitez (CHF 6-12/média, selon le groupe d’utilisateurs). Le délai de livraison est de 48 h dans toute la Suisse pour toutes les bibliothèques swisscovery affiliées au service SLSP Courier. Vous avez d’autre part la possibilité de vous faire livrer des médias de toute bibliothèque de Suisse ou de l’étranger en faisant une demande de prêt entre bibliothèques (PEB). Les bibliothèques qui procèdent à l’envoi facturent différents frais pour ce service, et la livraison prend généralement plus de temps.

-

Recherche simple

+

Recherche simple

La recherche simple permet d'accéder rapidement aux ressources de la bibliothèque.

- +
-

Recherche avancée

+

Recherche avancée

Les champs de recherche de la recherche avancée peuvent être combinés avec ET, OU ou SAUF.

- +

Dans cet exemple, la recherche est limitée aux livres en anglais qui contiennent «mountain railway» dans leur titre et qui ont pour sujet la Suisse.

Avec l'aide du deuxième (ou troisième) champ, vous pouvez choisir entre «contient», «est(exact)» ou «commence par» pour spécifier si les termes de la recherche doivent être contenus dans le champ, si l'élément doit correspondre exactement aux termes de la recherche ou s'il doit commencer par un terme spécifique.

Ici vous pouvez mettre quelques mots du titre, pas nécessairement dans l'ordre

-
+

Là, vous recherchez ce titre exact

- +

Et là, vous recherchez des titres qui commencent par le mot « mountain »

- +
-

Rechercher une expression

+

Rechercher une expression

Si vous souhaitez rechercher une expression précise (groupe de mots), mettez-la entre guillemets. Vous pouvez associer expressions et mots dans une recherche.

- +

Les résultats incluent des documents qui contiennent à la fois l'expression exacte «piz buin» et le sujet «mountain».

-

Rechercher avec des caractères génériques

+

Rechercher avec des caractères génériques

L'astérisque * et le point d'interrogation ? peuvent être utilisés comme caractères génériques (ou caractères de remplacement) pour la recherche:

L'astérisque * sert à remplacer zéro, un ou plusieurs caractères:

- +

Permet de rechercher culture, cultures, cultural etc.

L'astérisque * peut également aider à trouver différentes orthographes:

- +

Recherche yogurt, yoghurt, yogourt, yoghourt, etc.

Le point d'interrogation ? est le caractère de remplacement pour un seul caractère:

- +

Recherche à la fois woman et women.

Vous pouvez également combiner ces deux caractères:

- +

Vous obtiendrez des résultats avec yoghurt, yogourt, yohurts ou yogourts

-

Utiliser les opérateurs booléens pour étendre ou restreindre une recherche

+

Utiliser les opérateurs booléens pour étendre ou restreindre une recherche

Vous pouvez utiliser les opérateurs booléens ET, OU et SAUF. Ils doivent être écrits en majuscules.

Sans indication spécifique, les termes de la recherche sont automatiquement associés avec ET. En d'autres termes, tous les termes de la recherche doivent apparaître dans les résultats.

OU

Au moins l'un des termes de recherche relié avec OU doit apparaître dans les résultats. Par exemple, utilisez OU pour associer des termes liés afin d'étendre la recherche à plusieurs termes (synonymes, orthographes différentes):

- +

SAUF

Le terme de la recherche exclu avec SAUF ne doit pas apparaître dans les résultats. Autrement dit, SAUF permet d'exclure explicitement des mots ou des expressions.

- +

Les résultats seront des documents qui contiennent l'expression «climate change», mais pas «global warming».

-

Mes favoris

+

Mes favoris

Dans «Mes Favoris», vous pouvez enregistrer les titres que vous trouvez pendant votre recherche. Vous ne pouvez les enregistrer sur le long terme que si vous vous êtes identifié(e). En tant qu'invité, le contenu des favoris n'est disponible que durant la session de navigation en cours.

Si vous cliquez sur l'icône épingle - d'un titre, celui-ci est ajouté à vos favoris; l'icône épingle se transforme alors en - . Si vous cliquez à nouveau sur - , le titre est retiré de vos favoris. + d'un titre, celui-ci est ajouté à vos favoris; l'icône épingle se transforme alors en + . Si vous cliquez à nouveau sur + , le titre est retiré de vos favoris.

Vous pouvez accéder à votre liste de favoris via l'icône épingle - situé en haut à droite de la page. + situé en haut à droite de la page.

Vous pouvez retirer ou exporter des titres individuels depuis votre liste de favoris. Surlignez un ou plusieurs titres et utilisez les symboles situés en haut de la page pour les retirer, ajouter des libellés, les exporter vers des outils de gestion des références, les imprimer ou les envoyer par e-mail:

- +

Afin de voir les détails d'une notice, cliquez sur le titre en question.

Vous trouvez également l'historique de recherche pour la session de navigation en cours dans «Mes favoris».

-

Historique de recherche

+

Historique de recherche

Les recherches de la session de navigation en cours sont enregistrées dans vos favoris dans «Historique de recherche».

Vous pouvez y accéder directement via l'icône - situé en haut à droite de la page. + situé en haut à droite de la page.

- +
-

Enregistrer et gérer les recherches

+

Enregistrer et gérer les recherches

Si vous vous êtes identifié (e), vous pouvez enregistrer vos recherches de manière permanente. Pour cela, cliquez sur «Enregistrer la requête» situé au-dessus de la liste de résultats:

- +

NOTE: L'option «Enregistrer la requête» s'affiche uniquement si vous vous êtes identifié(e) et si vous avez lancé une recherche

Lors de l'enregistrement de la requête, un message apparaît en haut de la page vous permettant de recevoir des notifications par e-mail lorsque la requête est mise à jour. Cliquez sur ce message pour activer les notifications.

-
- +
+

Les recherches enregistrées sont conservées dans «Mes Favoris» - dans l'onglet «Recherches sauvegardées». + dans l'onglet «Recherches sauvegardées».

- +

Vous pouvez lancer à nouveau la même recherche en cliquant sur les termes de la requête. Vous pouvez configurer une notification (par RSS ou par e-mail) en utilisant les symboles situés à droite pour vous tenir informé(e) des derniers documents ajoutés qui correspondent à vos critères de recherche.

-

Afficher les résultats

+

Afficher les résultats

-

Réduire le nombre de résultats

+

Réduire le nombre de résultats

Le filtre par termes est proposé dans la colonne de gauche, il vous permet de réduire le nombre de résultats dans votre recherche:

- +

Cliquer sur «Articles» réduit la liste de résultats aux articles trouvés.

Afin d'exclure un terme, cliquez sur le symbole rouge situé à côté du terme sur la droite.

- +

«Voir plus» permet d'afficher des termes supplémentaires et d'affiner la recherche en incluant ou en excluant plusieurs termes.

Exemple: Réduisez la recherche à «Articles de journal», «Comptes rendus» et «Livres».

- +

Pour supprimer un filtre, cliquez sur la croix X située à côté du terme. «Réinitialiser les filtres» permet de supprimer tous les filtres.

- +

La saisie d'une nouvelle recherche supprime automatiquement tous les filtres. Toutefois, vous pouvez conserver un filtre pendant toute la durée de la session de navigation en le sélectionnant puis en cliquant sur le symbole cadenas. Pour supprimer ce filtre, cliquez à nouveau sur le cadenas.

- +
-

Liste de résultats: tri

+

Liste de résultats: tri

Par défaut, les résultats sont triés par pertinence. Vous pouvez les trier par date, titre ou auteur.

- +
-

Liste de résultats: versions

+

Liste de résultats: versions

Si un travail est disponible en plusieurs versions (c'est-à-dire en plusieurs éditions ou réimpressions), cliquez sur l'icône, le titre ou «Voir toute les versions» pour obtenir la liste de toutes les versions.

- +

Vous pouvez revenir à la liste des résultats en fermant la liste des versions dans «Filtres activés».

- +
-

Afficher des titres individuels

+

Afficher des titres individuels

Lorsque vous cliquez sur un titre, vous pouvez sélectionner les actions suivantes:

- +

Haut: revenir en haut de la page

Option de prêt et de demande: afficher les localisations, faire des demandes de prêt, des réservations ou des copies.

Envoyer vers: eexporter les informations sur un titre vers un programme de gestion des références, exporter des citations, créer un lien permanent vers le résultat, imprimer ou envoyer par e-mail. Les actions d'exportation peuvent s'appliquer à un groupe comportant jusqu'à 50 notices.

Détails: informations détaillées sur le titre.

Liens: liens vers la table des matières, vers un titre antérieur/ultérieur, vers l'ensemble des volumes d'une série.

Étagère virtuelle: vous pouvez voir un rayon de la bibliothèque en lien avec la notice sélectionnée

Des questions?

- -

Informations de contact

-
-

N'hésitez pas à prendre contact avec nous pour toute question, hésitation, commentaire ou requête.

- -
+ +

Informations de contact

+
+

Pour toute autre question, veuillez contacter directement votre bibliothèque.

+
diff --git a/primo-explore/custom/src/js/briefview/collection_link.controller.js b/primo-explore/custom/src/js/briefview/collection_link.controller.js index b1c339a..8967ed5 100644 --- a/primo-explore/custom/src/js/briefview/collection_link.controller.js +++ b/primo-explore/custom/src/js/briefview/collection_link.controller.js @@ -1,36 +1,36 @@ -module.exports = ['$filter', '$http', 'userService', function($filter, $http, userService) { +module.exports = ['$filter', '$http', function($filter, $http) { this.parentCtrl = this.afterCtrl.parentCtrl; var vm = this // Obtenir l'url d'une série. vm.get_collection_url = function(){ if (vm.hasOwnProperty('collection_url')){ return vm.collection_url; } try { var series = vm.parentCtrl.result.pnx.display.series; if (!Array.isArray(series)) {throw new Error('Notice without series');} } catch (e) { return null; } for (const serie of series){ var m = serie.match(/\$\$Q(.*)\$\$Z(99\d{16})/); if (m){ if (!vm.parentCtrl.$stateParams.lang) { var lang = ''; } else { var lang = `&lang=${vm.parentCtrl.$stateParams.lang}`; } vm.collection_title = m[1]; vm.collection_url = `${ window.location.origin }/discovery/fulldisplay?vid=${ vm.parentCtrl.$stateParams.vid }&tab=${ vm.parentCtrl.$stateParams.tab }&docid=alma${ m[2] }&context=${ vm.parentCtrl.$stateParams.context }${ lang }`; return vm.collection_url; } } } // console.log(vm); }] diff --git a/primo-explore/custom/src/js/briefview/pdf_article_link.controller.js b/primo-explore/custom/src/js/briefview/pdf_article_link.controller.js index c7f4449..4ed4f5c 100644 --- a/primo-explore/custom/src/js/briefview/pdf_article_link.controller.js +++ b/primo-explore/custom/src/js/briefview/pdf_article_link.controller.js @@ -1,81 +1,81 @@ -module.exports = ['$filter', '$http', 'userService', function($filter, $http, userService) { +module.exports = ['$filter', '$http', 'slspIllSigninOrderLoggedOutService', function($filter, $http, slspIllSigninOrderLoggedOutService) { this.parentCtrl = this.afterCtrl.parentCtrl; var vm = this // Extrait le DOI brut depuis une chaîne de caractères function parse_doi(txt){ var re = /10\.\d{4,9}\/[-._;()/:A-Z0-9]+/i; var m = txt.match(re); if (m){ return m[0] } } /* Teste si l'utilisateur est sur le range EPFL afin de décider s'il faut faut ou non afficher le lien direct */ - vm.is_epfl_IP = userService.isEpflIP(); + vm.is_epfl_IP = slspIllSigninOrderLoggedOutService.isEpflIP(); vm.get_doi = function(){ if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){ var pnx = vm.parentCtrl.result.pnx; // Recherche dans la section addata if ('addata' in pnx && 'doi' in pnx.addata && parse_doi(pnx.addata.doi[0]) && pnx.control.hasOwnProperty('recordtype') && pnx.control.recordtype[0]==='article') { return parse_doi(pnx.addata.doi[0]) } // Recherche dans la section display if ('display' in pnx && 'identifier' in pnx.display) { for (const identifier of pnx.display.identifier){ if (parse_doi(identifier)){ return parse_doi(identifier) } } } } } vm.check_doi = function(){ if (!vm.hasOwnProperty('doi')){ if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){ if (vm.get_doi()){ vm.doi = vm.get_doi(); vm.set_url_pdf() } else { vm.doi = null; } } } if (vm.hasOwnProperty('pdf_link')) { return true } return false } vm.set_url_pdf = function(){ var url = `https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/${vm.doi}?access_token=adc54dee-c6a6-4b99-a917-2ed400f1f2d3`; $http({ method: 'GET', url: url }).then(function successCallback(response) { // console.log(response); if (response.status === 200) { try{ var pdf_link = response.data.data.fullTextFile; } catch(e){ var pdf_link = ''; } if (pdf_link.length > 0) { vm.pdf_link = pdf_link; } } // console.log(vm.pdf_link); }, function errorCallback(response) { vm.doi = null; }); } // console.log(vm); }] diff --git a/primo-explore/custom/src/js/briefview/publisher_link.controller.js b/primo-explore/custom/src/js/briefview/publisher_link.controller.js index 6f71ea9..09e3031 100644 --- a/primo-explore/custom/src/js/briefview/publisher_link.controller.js +++ b/primo-explore/custom/src/js/briefview/publisher_link.controller.js @@ -1,92 +1,92 @@ -module.exports = ['$filter', '$http', 'userService', '$element', function($filter, $http, userService, $element) { +module.exports = ['$filter', '$http', 'slspIllSigninOrderLoggedOutService', '$element', function($filter, $http, slspIllSigninOrderLoggedOutService, $element) { this.parentCtrl = this.afterCtrl.parentCtrl; var vm = this - // Utilise le service du module \js\slsp\slsp-ill-signin-order-logged-out\js\epfl-ill-signin-order-logged-out.module.js - vm.is_epfl_IP = userService.isEpflIP(); + // Utilise le service du module \js\slsp\slsp-ill-signin-order-logged-out\js\epfl-ill-signin-order-logged-out.module.js + vm.is_epfl_IP = slspIllSigninOrderLoggedOutService.isEpflIP(); // Vérifie si une ressource vient de CDI. L'attribut reste PC comme dans Primo Central l'ancien système. vm.is_pc = function(){ return vm.parentCtrl.result.context === 'PC'; } // Vérifie si le record est de type livre. Le lien direct vers l'éditeur est pertinent dans ce cas. vm.is_ebook = function(){ if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){ return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('book')!==-1; } else if (vm.parentCtrl.result.pnx.display.hasOwnProperty('type')){ return vm.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf('book')!==-1; } else { return false; } } // Vérifie si la ressource est un article. Le lien direct vers l'éditeur est pertinent pour les articles. vm.is_article = function(){ if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){ return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('article')!==-1; } else { return false; } } // Vérifie si le PNX est chargé vm.is_data_available = function(){ return vm.parentCtrl.result && vm.parentCtrl.result.pnx && vm.parentCtrl.result.delivery; } // Vérifie si un accès fulltext est disponible vm.is_fulltext = function(){ let availability = vm.parentCtrl.result.delivery.availability return availability.indexOf('fulltext')!==-1 || availability.indexOf('not_restricted')!==-1; } // Supprime le lien original vm.suppress_original_link = function(){ $element[0].parentElement.parentElement.children[0].replaceWith(''); } /* Définit l'url de l'éditeur si celle-ci est disponible à la place de l'affichage de la notice détaillée. La fonction retourne true si l'url est modifiée */ vm.is_publisher_url = function(){ /* L'url n'est modifié que pour les ebooks et les articles. De plus, il faut être dans le range IP de l'EPFL */ if (!vm.checked && vm.is_data_available() && vm.is_epfl_IP && (vm.is_ebook() || vm.is_article())) { // L'adresse du service est différente selon que la ressource est dans cdi ou non (vm.is_pc()) if (!vm.parentCtrl.isFullView && vm.is_fulltext() && vm.is_pc()){ vm.checked = true; /* Les données ne contiennent pas des informations détaillées avec le lien direct. Il faut donc utiliser un service pour obtenir ces données. */ let url = `${ window.location.origin }/primaws/rest/pub/pcDelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`; $http.post(url, {doc:vm.parentCtrl.result}).then((e) => { vm.publisher_url = e.data.delivery.electronicServices[0].serviceUrl; vm.suppress_original_link(); }); } else if (!vm.parentCtrl.isFullView && vm.is_fulltext() && !vm.is_pc()){ vm.checked = true; let url = `${ window.location.origin }/primaws/rest/pub/edelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`; $http.post(url, {doc:vm.parentCtrl.result}).then((e) => { vm.publisher_url = e.data.electronicServices[0].serviceUrl; vm.suppress_original_link(); }) /* Dans la vue détaillée, l'url est accessible sans avoir à interroger le service */ } else if (vm.parentCtrl.isFullView && vm.parentCtrl.result.delivery.GetIt1 && typeof(vm.parentCtrl.result.delivery.GetIt1)==='object') { vm.checked = true; let rank = vm.parentCtrl.result.delivery.availability.indexOf('not_restricted') if (rank !== -1) { vm.publisher_url = vm.parentCtrl.result.delivery.GetIt1[0].links[rank].link; vm.suppress_original_link(); } } else if (!vm.is_fulltext()){ vm.checked = true; } } return vm.hasOwnProperty('publisher_url'); } // console.log('Publisher_link:'); // console.log(vm); // console.log('---------------'); }] diff --git a/primo-explore/custom/src/js/custom.js b/primo-explore/custom/src/js/custom.js index 5ba377f..62651d0 100644 --- a/primo-explore/custom/src/js/custom.js +++ b/primo-explore/custom/src/js/custom.js @@ -1,2 +1,2 @@ -!function l(o,s,a){function c(t,e){if(!s[t]){if(!o[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(p)return p(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[t]={exports:{}};o[t][0].call(i.exports,function(e){return c(o[t][1][e]||e)},i,i.exports,l,o,s,a)}return s[t].exports}for(var p="function"==typeof require&&require,e=0;e\n \n \n '}},{}],2:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./collection_link.controller.js"),template:'
\r\n {{ \'seriesLink\' | customTranslate }} {{$ctrl.collection_title}}
\r\n
\r\n'}},{"./collection_link.controller.js":3}],3:[function(e,t,r){"use strict";t.exports=["$filter","$http","userService",function(e,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var a=this;a.get_collection_url=function(){if(a.hasOwnProperty("collection_url"))return a.collection_url;try{var e=a.parentCtrl.result.pnx.display.series;if(!Array.isArray(e))throw new Error("Notice without series")}catch(e){return null}var t=!0,r=!1,n=void 0;try{for(var i,l=e[Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var o=i.value.match(/\$\$Q(.*)\$\$Z(99\d{16})/);if(o){if(a.parentCtrl.$stateParams.lang)s="&lang="+a.parentCtrl.$stateParams.lang;else var s="";return a.collection_title=o[1],a.collection_url=window.location.origin+"/discovery/fulldisplay?vid="+a.parentCtrl.$stateParams.vid+"&tab="+a.parentCtrl.$stateParams.tab+"&docid=alma"+o[2]+"&context="+a.parentCtrl.$stateParams.context+s,a.collection_url}}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}}}]},{}],4:[function(e,t,r){"use strict";var n=angular.module("briefviewModule",["angularLoad"]);n.component("prmSearchResultAvailabilityLineAfter",e("./availabilityline.component.js")),n.component("prmPdfArticleLink",e("./pdf_article_link.component.js")),n.component("prmPublisherLink",e("./publisher_link.component.js")),n.component("prmCollectionLink",e("./collection_link.component.js"))},{"./availabilityline.component.js":1,"./collection_link.component.js":2,"./pdf_article_link.component.js":5,"./publisher_link.component.js":7}],5:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./pdf_article_link.controller.js"),template:'
\r\n {{ \'pdfAccess\' | customTranslate }}\r\n
\r\n'}},{"./pdf_article_link.controller.js":6}],6:[function(e,t,r){"use strict";t.exports=["$filter","$http","userService",function(e,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var s=this;function a(e){var t=e.match(/10\.\d{4,9}\/[-._;()/:A-Z0-9]+/i);if(t)return t[0]}s.is_epfl_IP=r.isEpflIP(),s.get_doi=function(){if(s.parentCtrl.hasOwnProperty("result")&&s.parentCtrl.result.hasOwnProperty("pnx")){var e=s.parentCtrl.result.pnx;if("addata"in e&&"doi"in e.addata&&a(e.addata.doi[0])&&e.control.hasOwnProperty("recordtype")&&"article"===e.control.recordtype[0])return a(e.addata.doi[0]);if("display"in e&&"identifier"in e.display){var t=!0,r=!1,n=void 0;try{for(var i,l=e.display.identifier[Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var o=i.value;if(a(o))return a(o)}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}}}},s.check_doi=function(){return s.hasOwnProperty("doi")||s.parentCtrl.hasOwnProperty("result")&&s.parentCtrl.result.hasOwnProperty("pnx")&&(s.get_doi()?(s.doi=s.get_doi(),s.set_url_pdf()):s.doi=null),!!s.hasOwnProperty("pdf_link")},s.set_url_pdf=function(){var e="https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/"+s.doi+"?access_token=adc54dee-c6a6-4b99-a917-2ed400f1f2d3";t({method:"GET",url:e}).then(function(e){if(200===e.status){try{var t=e.data.data.fullTextFile}catch(e){t=""}0\r\n
\r\n\r\n'}},{"./publisher_link.controller.js":8}],8:[function(e,t,r){"use strict";var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.exports=["$filter","$http","userService","$element",function(e,n,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var i=this;i.is_epfl_IP=t.isEpflIP(),i.is_pc=function(){return"PC"===i.parentCtrl.result.context},i.is_ebook=function(){return i.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")?-1!==i.parentCtrl.result.pnx.control.recordtype[0].indexOf("book"):!!i.parentCtrl.result.pnx.display.hasOwnProperty("type")&&-1!==i.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf("book")},i.is_article=function(){return!!i.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")&&-1!==i.parentCtrl.result.pnx.control.recordtype[0].indexOf("article")},i.is_data_available=function(){return i.parentCtrl.result&&i.parentCtrl.result.pnx&&i.parentCtrl.result.delivery},i.is_fulltext=function(){var e=i.parentCtrl.result.delivery.availability;return-1!==e.indexOf("fulltext")||-1!==e.indexOf("not_restricted")},i.suppress_original_link=function(){r[0].parentElement.parentElement.children[0].replaceWith("")},i.is_publisher_url=function(){if(!i.checked&&i.is_data_available()&&i.is_epfl_IP&&(i.is_ebook()||i.is_article()))if(!i.parentCtrl.isFullView&&i.is_fulltext()&&i.is_pc()){i.checked=!0;var e=window.location.origin+"/primaws/rest/pub/pcDelivery/"+i.parentCtrl.result.pnx.control.recordid[0]+"?vid="+i.parentCtrl.$stateParams.vid;n.post(e,{doc:i.parentCtrl.result}).then(function(e){i.publisher_url=e.data.delivery.electronicServices[0].serviceUrl,i.suppress_original_link()})}else if(i.parentCtrl.isFullView||!i.is_fulltext()||i.is_pc())if(i.parentCtrl.isFullView&&i.parentCtrl.result.delivery.GetIt1&&"object"===l(i.parentCtrl.result.delivery.GetIt1)){i.checked=!0;var t=i.parentCtrl.result.delivery.availability.indexOf("not_restricted");-1!==t&&(i.publisher_url=i.parentCtrl.result.delivery.GetIt1[0].links[t].link,i.suppress_original_link())}else i.is_fulltext()||(i.checked=!0);else{i.checked=!0;var r=window.location.origin+"/primaws/rest/pub/edelivery/"+i.parentCtrl.result.pnx.control.recordid[0]+"?vid="+i.parentCtrl.$stateParams.vid;n.post(r,{doc:i.parentCtrl.result}).then(function(e){i.publisher_url=e.data.electronicServices[0].serviceUrl,i.suppress_original_link()})}return i.hasOwnProperty("publisher_url")}}]},{}],9:[function(e,t,r){"use strict";angular.module("customTranslateFilter",[]).filter("customTranslate",["$translate",function(r){return function(e){var t={costWarningScan:{fr:'Service payant: les collaborateurs et les étudiants de l’EPFL peuvent bénéficier de ce service gratuitement, en utilisant le formulaire:',en:'Fee-based service: EPFL employees and students can benefit from this service free of charge by using the form:',de:'Kostenpflichtiger Service: Mitarbeitern und Studenten der EPFL steht dieser Dienst über das Fernleihe-Formular gratis zur Verfügung.',it:'Servizio a pagamento: I dipendenti e gli studenti dell\'EPFL possono usufruire gratuitamente di questo servizio utilizzando il modulo:'},costWarningScanEPFL:{fr:"Service gratuit pour les collaborateurs et les étudiants EPFL.",en:"Free of charge for EPFL staff and students.",de:"Service für Mitarbeiter und Studenten der EPFL kostenlos",it:"Servizio gratuito per i dipendenti e gli studenti dell’EPFL."},costWarningNetworkLoan:{fr:"Service gratuit en cas de retrait à la Bibliothèque de l’EPFL.",en:"Free of charge if withdrawal at the EPFL Library.",de:"Service bei Abholung in der EPFL-Bibliothek kostenlos.",it:"Servizio gratuito in caso di ritiro alla Biblioteca dell’EPFL"},costWarningPEB:{fr:"Service gratuit pour les collaborateurs et les étudiants de l’EPFL. Avant de passer une commande d’un document physique via le prêt entre bibliothèques, merci de vous assurer que ce document n'est pas disponible dans d’autres bibliothèques du réseau SLSP dans swisscovery.",en:"Free of charge for EPFL staff and students. Before placing an order for a physical document via the interlibrary loan, please make sure that this document is not available in other SLSP network libraries on swisscovery.",de:"Kostenloser Service für Mitarbeiter und Studenten der EPFL. Bevor Sie ein Medium über die Fernleihe bestellen, vergewissern Sie sich bitte zunächst in swisscovery, dass es nicht in einer anderen Bibliothek des SLSP-Netzwerks verfügbar ist.",it:"Servizio gratuito per i dipendenti e gli studenti dell’EPFL. Prima di ordinare un documento cartaceo tramite il prestito interbibliotecario, assicuratevi che questo documento non sia disponibile in altre biblioteche della rete SLSP in swisscovery."},mainTitle:{fr:"Catalogue BEAST",en:"BEAST discovery tool",de:"BEAST Wissensportal",it:"Catalogo BEAST"},subTitle:{fr:"Le point d'accès à toutes les ressources de la Bibliothèque de l'EPFL",en:"The access portal to all the resources of the EPFL Library",de:"Der Zugangspunkt zu allen Ressourcen der EPFL Bibliothek",it:"Il punto d’accesso a tutte le risorse della Biblioteca dell’EPFL"},switchEduID:{fr:"Modifier vos informations personnelles sur",en:"Change your personal data on",de:"Ändern Sie Ihre persönlichen Daten auf",it:"Modifica i tuoi dati personali sul"},illButton:{fr:"Prêt entre bibliothèques (PEB)",en:"Inter Library Loan (ILL)",de:"Fernleihe",it:"Prestito interbibliotecario"},feedbackLink:{fr:"Signaler un problème d'accès",en:"Report an access problem",de:"Zugriffsproblem melden",it:"Segnalare un problema di accesso"},vpnMSG:{fr:'Les ressources électroniques sont accessibles depuis tous les postes de l’EPFL, et à distance via le VPN EPFL.',en:'Electronic resources are accessible from all EPFL workstations, and remotely via the EPFL VPN.',de:'Elektronische Informationsressourcen sind an allen EPFL-Arbeitsplätzen und per EPFL VPN abrufbar.',it:'Le risorse elettroniche sono accessibili da tutte le postazioni di lavoro dell\'EPFL e a distanza tramite VPN EPFL.'},feedbackLinkMSG:{fr:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",en:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",de:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",it:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored."},pdfAccess:{fr:"Accès direct au pdf",en:"Direct access to the pdf",de:"Direct access to the pdf",it:"Direct access to the pdf"},seriesLink:{fr:"Collection :",en:"Serie:",de:"Serie:",it:"Serie:"}};return["en","fr","it","de"].includes(r.use())?t[e][r.use()]:t[e].fr}}])},{}],10:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},template:'
\n
'}},{}],11:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./epfl_almaviewit.controller.js"),template:'\r\n\r\n\r\n'}},{"./epfl_almaviewit.controller.js":12}],12:[function(e,t,r){"use strict";t.exports=["$filter","userService",function(e,t){this.parentCtrl=this.afterCtrl.parentCtrl;var r=this;if(r.get_txt=function(){return e("customTranslate")("vpnMSG")},r.feedbackLink="",r.is_epfl_IP=!1,r.no_report_link=!1,r.parentCtrl.item.pnx.addata.openaccess&&"true"===r.parentCtrl.item.pnx.addata.openaccess[0]&&(r.no_report_link=!0),r.parentCtrl.item.pnx.addata.oa&&"free_for_read"===r.parentCtrl.item.pnx.addata.oa[0]&&(r.no_report_link=!0),!r.no_report_link){r.is_epfl_IP=t.isEpflIP(),r.user_ip=t.get_ip();var n=r.parentCtrl.item.pnx.control.recordid[0],i="";r.parentCtrl.item.pnx.display.title&&0ISBN")||-1ISSN")?a=r.parentCtrl.item.pnx.display.identifier.join(", ").replace(/<\/b>/g,"").replace(//g,""):-1\n

Le réseau NEBIS a pris fin le 7 décembre 2020 pour être remplacé par un nouveau réseau plus vaste : swisscovery

\n ',en:'
\n

The NEBIS network ended on December 7, 2020. It has been replaced by swisscovery: a new and wider network.

\n
',de:'
\n

Das NEBIS-Netzwerk wurde am 07.12.2020 abgeschaltet und durch ein neues, grösseres Netzwerk ersetzt: swisscovery

\n
',it:'
\n

La rete NEBIS è stata sciolta il 7 dicembre 2020 per essere sostituita da una rete piú ampia di biblioteche: swisscovery

\n
'},begin:"2020-01-04T00:00:00Z",end:"2023-03-31T12:00:00Z"}},{}],15:[function(e,t,r){"use strict";var n=angular.module("homepageModule",["angularLoad"]);n.component("prmSearchBarAfter",e("./searchbar.component.js")),n.component("prmMainMenuAfter",e("./mainmenu.component.js")),n.component("prmTopbarAfter",e("./topbar.component.js"))},{"./mainmenu.component.js":16,"./searchbar.component.js":17,"./topbar.component.js":18}],16:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controllerAs:"ctrl",controller:[function(){var t=this;this.$doCheck=function(){if("complete"===document.readyState&&!t.modified){try{var e=document.querySelector("[translate='mainmenu.label.db']").parentElement}catch(e){t.modified=!1}e&&(e.removeAttribute("target"),e.setAttribute("aria-label","Databases"),t.modified=!0)}}}]}},{}],17:[function(n,e,t){"use strict";e.exports={bindings:{parentCtrl:"<"},template:'
',controllerAs:"ctrl",controller:["$translate",function(t){var r=this;if(r.alert=n("./alert_message.js"),!(r.active=!1)===r.alert.active){var e=Date.now();new Date(r.alert.begin)\n

{{ 'mainTitle' | customTranslate }}

\n

{{ 'subTitle' | customTranslate }}

\n "}},{}],19:[function(e,t,r){"use strict";e("./filters/custom_translate.filter.js"),e("./slsp/slsp-courier-info"),e("./slsp/slsp-ill-signin-order-logged-out"),e("./slsp/slsp-ill-signin-order-alert"),e("./slsp/slsp-edit-personal-details"),e("./slsp/prm-locations-after"),e("./slsp/prm-location-items-after"),e("./slsp/slsp-archives-htgi"),e("./slsp/slsp-archives-viewit"),e("./briefview"),e("./homepage"),e("./fullView");angular.module("viewCustom",["angularLoad","customTranslateFilter","epflCourierInfo","epflIllSigninOrderLoggedOut","slspIllSigninOrderAlert","epflEditPersonalDetails","ethLocationsAfterModule","ethLocationItemsAfterModule","slspArchivesHtgi","slspArchivesViewit","briefviewModule","homepageModule","fullviewModule"])},{"./briefview":4,"./filters/custom_translate.filter.js":9,"./fullView":13,"./homepage":15,"./slsp/prm-location-items-after":20,"./slsp/prm-locations-after":25,"./slsp/slsp-archives-htgi":28,"./slsp/slsp-archives-viewit":30,"./slsp/slsp-courier-info":32,"./slsp/slsp-edit-personal-details":34,"./slsp/slsp-ill-signin-order-alert":36,"./slsp/slsp-ill-signin-order-logged-out":38}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ethLocationItemsAfterModule=void 0;var n=e("./eth-location-items-filter/eth-location-items-filter.module"),i=e("./slsp-i-button/epfl-i-button.module"),l=r.ethLocationItemsAfterModule=angular.module("ethLocationItemsAfterModule",[]).component("prmLocationItemsAfter",{bindings:{parentCtrl:"<"},template:''});l.requires.push(n.ethLocationItemsFilterModule.name),l.requires.push(i.epflIButtonModule.name)},{"./eth-location-items-filter/eth-location-items-filter.module":22,"./slsp-i-button/epfl-i-button.module":24}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e};function i(e,t){for(var r=0;r\r\n \r\n {{ $ctrl.getLibrary() }}\r\n \r\n\r\n'})},{"./epfl-i-button.controller":23}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ethLocationsAfterModule=void 0;var n=e("./eth-locations-filter/eth-locations-filter.module");(r.ethLocationsAfterModule=angular.module("ethLocationsAfterModule",[]).component("prmLocationsAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(n.ethLocationsFilterModule.name)},{"./eth-locations-filter/eth-locations-filter.module":27}],26:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e};function i(e,t){for(var r=0;r\n \n \n {{(\'customized.archives.\' + $ctrl.source + \'.linktext\' | translate)}}\n {{$ctrl.label}}\n
\n \n
\n
\n
\n
\n
\n No request possible. The digitized item can be consulted in the Thomas Mann Archives reading room upon advance registration (\n \n Contact\n \n \n ).\n
\n
\n
\n
\n Informationen zu Bestellung und Benutzung siehe\n \n Bedienungshinweise\n \n \n .\n
\n
\n \n '})},{}],30:[function(e,t,r){"use strict";e("./js/slsp-archives-viewit.module.js"),t.exports="slspArchivesViewit"},{"./js/slsp-archives-viewit.module.js":31}],31:[function(e,t,r){"use strict";angular.module("slspArchivesViewit",[]).component("prmEthSearchResultAvailabilityLineAfter",{bindings:{afterCtrl:"<"},controller:"ArchivesAvailabilityLineController"}).component("prmEthAlmaViewitAfter",{bindings:{afterCtrl:"<"},controller:"ArchivesViewitController",template:'\n
\n \n \n {{(\'customized.archives.\' + $ctrl.source + \'.linktext\' | translate)}}\n {{$ctrl.label}}\n
\n \n
\n
\n
\n
\n
\n Informationen zu Bestellung und Benutzung siehe\n \n Bedienungshinweise\n \n \n .\n
\n
\n
\n '}).controller("ArchivesViewitController",["$translate",function(r){this.parentCtrl=this.afterCtrl.parentCtrl,this.$onInit=function(){try{if(!this.parentCtrl.item.pnx.display.source||0===this.parentCtrl.item.pnx.display.source.length)return;if(this.source=this.parentCtrl.item.pnx.display.source[0],"ETH_Hochschularchiv"===this.source){if(this.parentCtrl.item.delivery.GetIt1&&0";if("costWarningScan"==s.typeFeeAlert()){var n=o("customTranslate")("illButton");if(s.get_peb_button())var i="javascript:(function() {\n for (var elem of document.getElementsByTagName('span')) {\n if (elem.getAttribute('translate') === 'AlmaResourceSharing' &&\n elem.parentNode.className.indexOf('greenbutton') === -1)\n {\n elem.click();\n break;\n }\n };})()";else i="javascript:(function() {window.location.href = window.location.origin + '/discovery/blankIll?vid="+s.parentCtrl.vid+"'})()";r+='

'+n+"

"}r+='

'+s.parentCtrl.$translate.instant("customize.fullview.feesLinkText")+"

";var l=angular.element(r)[0];e.children.length==t?e.insertBefore(l,e.children[t-1]):e.children[e.children.length-2].replaceWith(l)}},Object.defineProperty(s.parentCtrl,"form",{configurable:!0,get:function(){var e=this.getFilteredForm(["label","multiLabel"],!1);if(!s.hasOwnProperty("pickupLocationsListOrdered"))for(var t=0;t":i.grpLabelB()?e+=''+i.parentCtrl.$translate.instant("customized.slsp.details")+"":i.getPatronGrp&&(e+='\n \n \n \n \n \n \n '+i.parentCtrl.$translate.instant("customized.personal.details")+'\n \n \n \n \n \n \n \n \n \n '+i.parentCtrl.$translate.instant("customized.libcard.number")+"\n \n "),e+="";var t=angular.element(e)[0],r=n[0].parentElement.children[1].children[0];r.insertBefore(t,r.children[1])},i.persInfoNotAv=function(){i.test+=1,i.test<10&&setTimeout(function(){return i.testPersonalInfo().then(i.persInfoAv,i.persInfoNotAv)},500)},0===i.test&&i.testPersonalInfo().then(i.persInfoAv,i.persInfoNotAv)}]).component("prmPersonalInfoAfter",{bindings:{parentCtrl:"<"},controller:"EditPersonalDetailsController"})},{}],36:[function(e,t,r){"use strict";e("./js/slsp-ill-signin-order-alert.module.js"),t.exports="slspIllSigninOrderAlert"},{"./js/slsp-ill-signin-order-alert.module.js":37}],37:[function(e,t,r){"use strict";angular.module("slspIllSigninOrderAlert",[]).controller("AlertMsgController",["$scope",function(e){var r=this;r.getAlert=function(){var e=r.parentCtrl.almaHowToGetitService.reqAlert._htmlMsg,t=angular.element(document.querySelector("primo-explore"));return 0{{$ctrl.getAlert()}}'})},{}],38:[function(e,t,r){"use strict";e("./js/epfl-ill-signin-order-logged-out.module.js"),t.exports="epflIllSigninOrderLoggedOut"},{"./js/epfl-ill-signin-order-logged-out.module.js":39}],39:[function(e,t,r){"use strict";angular.module("epflIllSigninOrderLoggedOut",[]).service("userService",["jwtHelper",function(n){this.get_ip=function(){var e=sessionStorage.getItem("primoExploreJwt");if(e)return n.decodeToken(e).userIp},this.isGuest=function(){var e=sessionStorage.getItem("primoExploreJwt");if(!e)return!0;var t=n.decodeToken(e);return!("GUEST"!==t.userGroup?t.userName:"")},this.isEpflIP=function(){var e=sessionStorage.getItem("primoExploreJwt");if(e){var t=n.decodeToken(e).userIp;if(t){var r=t.match(/128\.17([89])\.(\d{1,3})\./);if(r&&("8"==r[1]||128<=parseInt(r[2])))return!0}return!1}}}]).controller("IllBoxController",["$scope","userService",function(e,t){return e.usrNme=t.isGuest(),1!=e.usrNme?angular.element(document.querySelector("primo-explore")).removeClass("logged-out"):angular.element(document.querySelector("primo-explore")).addClass("logged-out")}]).component("prmUserAreaExpandableAfter",{bindings:{parentCtrl:"<"},controller:"IllBoxController",template:""})},{}]},{},[19]); +!function l(o,s,a){function c(t,e){if(!s[t]){if(!o[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(u)return u(t,!0);var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}var i=s[t]={exports:{}};o[t][0].call(i.exports,function(e){return c(o[t][1][e]||e)},i,i.exports,l,o,s,a)}return s[t].exports}for(var u="function"==typeof require&&require,e=0;e\n \n \n '}},{}],2:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./collection_link.controller.js"),template:'\r\n'}},{"./collection_link.controller.js":3}],3:[function(e,t,r){"use strict";t.exports=["$filter","$http",function(e,t){this.parentCtrl=this.afterCtrl.parentCtrl;var a=this;a.get_collection_url=function(){if(a.hasOwnProperty("collection_url"))return a.collection_url;try{var e=a.parentCtrl.result.pnx.display.series;if(!Array.isArray(e))throw new Error("Notice without series")}catch(e){return null}var t=!0,r=!1,n=void 0;try{for(var i,l=e[Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var o=i.value.match(/\$\$Q(.*)\$\$Z(99\d{16})/);if(o){if(a.parentCtrl.$stateParams.lang)s="&lang="+a.parentCtrl.$stateParams.lang;else var s="";return a.collection_title=o[1],a.collection_url=window.location.origin+"/discovery/fulldisplay?vid="+a.parentCtrl.$stateParams.vid+"&tab="+a.parentCtrl.$stateParams.tab+"&docid=alma"+o[2]+"&context="+a.parentCtrl.$stateParams.context+s,a.collection_url}}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}}}]},{}],4:[function(e,t,r){"use strict";var n=angular.module("briefviewModule",["angularLoad"]);n.component("prmSearchResultAvailabilityLineAfter",e("./availabilityline.component.js")),n.component("prmPdfArticleLink",e("./pdf_article_link.component.js")),n.component("prmPublisherLink",e("./publisher_link.component.js")),n.component("prmCollectionLink",e("./collection_link.component.js"))},{"./availabilityline.component.js":1,"./collection_link.component.js":2,"./pdf_article_link.component.js":5,"./publisher_link.component.js":7}],5:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./pdf_article_link.controller.js"),template:'\r\n'}},{"./pdf_article_link.controller.js":6}],6:[function(e,t,r){"use strict";t.exports=["$filter","$http","slspIllSigninOrderLoggedOutService",function(e,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var s=this;function a(e){var t=e.match(/10\.\d{4,9}\/[-._;()/:A-Z0-9]+/i);if(t)return t[0]}s.is_epfl_IP=r.isEpflIP(),s.get_doi=function(){if(s.parentCtrl.hasOwnProperty("result")&&s.parentCtrl.result.hasOwnProperty("pnx")){var e=s.parentCtrl.result.pnx;if("addata"in e&&"doi"in e.addata&&a(e.addata.doi[0])&&e.control.hasOwnProperty("recordtype")&&"article"===e.control.recordtype[0])return a(e.addata.doi[0]);if("display"in e&&"identifier"in e.display){var t=!0,r=!1,n=void 0;try{for(var i,l=e.display.identifier[Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var o=i.value;if(a(o))return a(o)}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}}}},s.check_doi=function(){return s.hasOwnProperty("doi")||s.parentCtrl.hasOwnProperty("result")&&s.parentCtrl.result.hasOwnProperty("pnx")&&(s.get_doi()?(s.doi=s.get_doi(),s.set_url_pdf()):s.doi=null),!!s.hasOwnProperty("pdf_link")},s.set_url_pdf=function(){var e="https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/"+s.doi+"?access_token=adc54dee-c6a6-4b99-a917-2ed400f1f2d3";t({method:"GET",url:e}).then(function(e){if(200===e.status){try{var t=e.data.data.fullTextFile}catch(e){t=""}0\r\n
\r\n\r\n'}},{"./publisher_link.controller.js":8}],8:[function(e,t,r){"use strict";var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e};t.exports=["$filter","$http","slspIllSigninOrderLoggedOutService","$element",function(e,n,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var i=this;i.is_epfl_IP=t.isEpflIP(),i.is_pc=function(){return"PC"===i.parentCtrl.result.context},i.is_ebook=function(){return i.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")?-1!==i.parentCtrl.result.pnx.control.recordtype[0].indexOf("book"):!!i.parentCtrl.result.pnx.display.hasOwnProperty("type")&&-1!==i.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf("book")},i.is_article=function(){return!!i.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")&&-1!==i.parentCtrl.result.pnx.control.recordtype[0].indexOf("article")},i.is_data_available=function(){return i.parentCtrl.result&&i.parentCtrl.result.pnx&&i.parentCtrl.result.delivery},i.is_fulltext=function(){var e=i.parentCtrl.result.delivery.availability;return-1!==e.indexOf("fulltext")||-1!==e.indexOf("not_restricted")},i.suppress_original_link=function(){r[0].parentElement.parentElement.children[0].replaceWith("")},i.is_publisher_url=function(){if(!i.checked&&i.is_data_available()&&i.is_epfl_IP&&(i.is_ebook()||i.is_article()))if(!i.parentCtrl.isFullView&&i.is_fulltext()&&i.is_pc()){i.checked=!0;var e=window.location.origin+"/primaws/rest/pub/pcDelivery/"+i.parentCtrl.result.pnx.control.recordid[0]+"?vid="+i.parentCtrl.$stateParams.vid;n.post(e,{doc:i.parentCtrl.result}).then(function(e){i.publisher_url=e.data.delivery.electronicServices[0].serviceUrl,i.suppress_original_link()})}else if(i.parentCtrl.isFullView||!i.is_fulltext()||i.is_pc())if(i.parentCtrl.isFullView&&i.parentCtrl.result.delivery.GetIt1&&"object"===l(i.parentCtrl.result.delivery.GetIt1)){i.checked=!0;var t=i.parentCtrl.result.delivery.availability.indexOf("not_restricted");-1!==t&&(i.publisher_url=i.parentCtrl.result.delivery.GetIt1[0].links[t].link,i.suppress_original_link())}else i.is_fulltext()||(i.checked=!0);else{i.checked=!0;var r=window.location.origin+"/primaws/rest/pub/edelivery/"+i.parentCtrl.result.pnx.control.recordid[0]+"?vid="+i.parentCtrl.$stateParams.vid;n.post(r,{doc:i.parentCtrl.result}).then(function(e){i.publisher_url=e.data.electronicServices[0].serviceUrl,i.suppress_original_link()})}return i.hasOwnProperty("publisher_url")}}]},{}],9:[function(e,t,r){"use strict";angular.module("customTranslateFilter",[]).filter("customTranslate",["$translate",function(r){return function(e){var t={costWarningScan:{fr:'Service payant: les collaborateurs et les étudiants de l’EPFL peuvent bénéficier de ce service gratuitement, en utilisant le formulaire:',en:'Fee-based service: EPFL employees and students can benefit from this service free of charge by using the form:',de:'Kostenpflichtiger Service: Mitarbeitern und Studenten der EPFL steht dieser Dienst über das Fernleihe-Formular gratis zur Verfügung.',it:'Servizio a pagamento: I dipendenti e gli studenti dell\'EPFL possono usufruire gratuitamente di questo servizio utilizzando il modulo:'},costWarningScanEPFL:{fr:"Service gratuit pour les collaborateurs et les étudiants EPFL.",en:"Free of charge for EPFL staff and students.",de:"Service für Mitarbeiter und Studenten der EPFL kostenlos",it:"Servizio gratuito per i dipendenti e gli studenti dell’EPFL."},costWarningNetworkLoan:{fr:"Service gratuit en cas de retrait à la Bibliothèque de l’EPFL.",en:"Free of charge if withdrawal at the EPFL Library.",de:"Service bei Abholung in der EPFL-Bibliothek kostenlos.",it:"Servizio gratuito in caso di ritiro alla Biblioteca dell’EPFL"},costWarningPEB:{fr:"Service gratuit pour les collaborateurs et les étudiants de l’EPFL. Avant de passer une commande d’un document physique via le prêt entre bibliothèques, merci de vous assurer que ce document n'est pas disponible dans d’autres bibliothèques du réseau SLSP dans swisscovery.",en:"Free of charge for EPFL staff and students. Before placing an order for a physical document via the interlibrary loan, please make sure that this document is not available in other SLSP network libraries on swisscovery.",de:"Kostenloser Service für Mitarbeiter und Studenten der EPFL. Bevor Sie ein Medium über die Fernleihe bestellen, vergewissern Sie sich bitte zunächst in swisscovery, dass es nicht in einer anderen Bibliothek des SLSP-Netzwerks verfügbar ist.",it:"Servizio gratuito per i dipendenti e gli studenti dell’EPFL. Prima di ordinare un documento cartaceo tramite il prestito interbibliotecario, assicuratevi che questo documento non sia disponibile in altre biblioteche della rete SLSP in swisscovery."},mainTitle:{fr:"Catalogue BEAST",en:"BEAST discovery tool",de:"BEAST Wissensportal",it:"Catalogo BEAST"},subTitle:{fr:"Le point d'accès à toutes les ressources de la Bibliothèque de l'EPFL",en:"The access portal to all the resources of the EPFL Library",de:"Der Zugangspunkt zu allen Ressourcen der EPFL Bibliothek",it:"Il punto d’accesso a tutte le risorse della Biblioteca dell’EPFL"},switchEduID:{fr:"Modifier vos informations personnelles sur",en:"Change your personal data on",de:"Ändern Sie Ihre persönlichen Daten auf",it:"Modifica i tuoi dati personali sul"},illButton:{fr:"Prêt entre bibliothèques (PEB)",en:"Inter Library Loan (ILL)",de:"Fernleihe",it:"Prestito interbibliotecario"},feedbackLink:{fr:"Signaler un problème d'accès",en:"Report an access problem",de:"Zugriffsproblem melden",it:"Segnalare un problema di accesso"},vpnMSG:{fr:'Les ressources électroniques sont accessibles depuis tous les postes de l’EPFL, et à distance via le VPN EPFL.',en:'Electronic resources are accessible from all EPFL workstations, and remotely via the EPFL VPN.',de:'Elektronische Informationsressourcen sind an allen EPFL-Arbeitsplätzen und per EPFL VPN abrufbar.',it:'Le risorse elettroniche sono accessibili da tutte le postazioni di lavoro dell\'EPFL e a distanza tramite VPN EPFL.'},feedbackLinkMSG:{fr:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",en:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",de:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.",it:"I have a problem accessing the electronic resource below. Please let me know when the access will be restored."},pdfAccess:{fr:"Accès direct au pdf",en:"Direct access to the pdf",de:"Direct access to the pdf",it:"Direct access to the pdf"},seriesLink:{fr:"Collection :",en:"Serie:",de:"Serie:",it:"Serie:"}};return["en","fr","it","de"].includes(r.use())?t[e][r.use()]:t[e].fr}}])},{}],10:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},template:'
\n
'}},{}],11:[function(e,t,r){"use strict";t.exports={bindings:{afterCtrl:"<"},controller:e("./epfl_almaviewit.controller.js"),template:'\r\n\r\n\r\n'}},{"./epfl_almaviewit.controller.js":12}],12:[function(e,t,r){"use strict";t.exports=["$filter","userService",function(e,t){this.parentCtrl=this.afterCtrl.parentCtrl;var r=this;if(r.get_txt=function(){return e("customTranslate")("vpnMSG")},r.feedbackLink="",r.is_epfl_IP=!1,r.no_report_link=!1,r.parentCtrl.item.pnx.addata.openaccess&&"true"===r.parentCtrl.item.pnx.addata.openaccess[0]&&(r.no_report_link=!0),r.parentCtrl.item.pnx.addata.oa&&"free_for_read"===r.parentCtrl.item.pnx.addata.oa[0]&&(r.no_report_link=!0),!r.no_report_link){r.is_epfl_IP=t.isEpflIP(),r.user_ip=t.get_ip();var n=r.parentCtrl.item.pnx.control.recordid[0],i="";r.parentCtrl.item.pnx.display.title&&0ISBN")||-1ISSN")?a=r.parentCtrl.item.pnx.display.identifier.join(", ").replace(/<\/b>/g,"").replace(//g,""):-1\n

Le réseau NEBIS a pris fin le 7 décembre 2020 pour être remplacé par un nouveau réseau plus vaste : swisscovery

\n ',en:'
\n

The NEBIS network ended on December 7, 2020. It has been replaced by swisscovery: a new and wider network.

\n
',de:'
\n

Das NEBIS-Netzwerk wurde am 07.12.2020 abgeschaltet und durch ein neues, grösseres Netzwerk ersetzt: swisscovery

\n
',it:'
\n

La rete NEBIS è stata sciolta il 7 dicembre 2020 per essere sostituita da una rete piú ampia di biblioteche: swisscovery

\n
'},begin:"2020-01-04T00:00:00Z",end:"2023-03-31T12:00:00Z"}},{}],15:[function(e,t,r){"use strict";var n=angular.module("homepageModule",["angularLoad"]);n.component("prmSearchBarAfter",e("./searchbar.component.js")),n.component("prmMainMenuAfter",e("./mainmenu.component.js")),n.component("prmTopbarAfter",e("./topbar.component.js"))},{"./mainmenu.component.js":16,"./searchbar.component.js":17,"./topbar.component.js":18}],16:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controllerAs:"ctrl",controller:[function(){var t=this;this.$doCheck=function(){if("complete"===document.readyState&&!t.modified){try{var e=document.querySelector("[translate='mainmenu.label.db']").parentElement}catch(e){t.modified=!1}e&&(e.removeAttribute("target"),e.setAttribute("aria-label","Databases"),t.modified=!0)}}}]}},{}],17:[function(n,e,t){"use strict";e.exports={bindings:{parentCtrl:"<"},template:'
',controllerAs:"ctrl",controller:["$translate",function(t){var r=this;if(r.alert=n("./alert_message.js"),!(r.active=!1)===r.alert.active){var e=Date.now();new Date(r.alert.begin)\n

{{ 'mainTitle' | customTranslate }}

\n

{{ 'subTitle' | customTranslate }}

\n "}},{}],19:[function(e,t,r){"use strict";e("./filters/custom_translate.filter.js"),e("./slsp/slsp-courier-info"),e("./slsp/slsp-http-intercept-requests"),e("./slsp/slsp-ill-signin-order-alert"),e("./slsp/slsp-edit-personal-details"),e("./slsp/prm-locations-after"),e("./slsp/prm-location-items-after"),e("./slsp/slsp-archives-htgi"),e("./slsp/slsp-archives-viewit"),e("./slsp/prm-user-area-expandable-after"),e("./briefview"),e("./homepage"),e("./fullView");angular.module("viewCustom",["angularLoad","customTranslateFilter","slspHttpInterceptRequests","epflCourierInfo","slspUserAreaExpandableAfterModule","slspIllSigninOrderAlert","epflEditPersonalDetails","ethLocationsAfterModule","ethLocationItemsAfterModule","slspArchivesHtgi","slspArchivesViewit","briefviewModule","homepageModule","fullviewModule"])},{"./briefview":4,"./filters/custom_translate.filter.js":9,"./fullView":13,"./homepage":15,"./slsp/prm-location-items-after":20,"./slsp/prm-locations-after":25,"./slsp/prm-user-area-expandable-after":33,"./slsp/slsp-archives-htgi":34,"./slsp/slsp-archives-viewit":36,"./slsp/slsp-courier-info":38,"./slsp/slsp-edit-personal-details":40,"./slsp/slsp-http-intercept-requests":42,"./slsp/slsp-ill-signin-order-alert":44}],20:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ethLocationItemsAfterModule=void 0;var n=e("./eth-location-items-filter/eth-location-items-filter.module"),i=e("./slsp-i-button/epfl-i-button.module"),l=r.ethLocationItemsAfterModule=angular.module("ethLocationItemsAfterModule",[]).component("prmLocationItemsAfter",{bindings:{parentCtrl:"<"},template:''});l.requires.push(n.ethLocationItemsFilterModule.name),l.requires.push(i.epflIButtonModule.name)},{"./eth-location-items-filter/eth-location-items-filter.module":22,"./slsp-i-button/epfl-i-button.module":24}],21:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e};function i(e,t){for(var r=0;r\r\n \r\n {{ $ctrl.getLibrary() }}\r\n \r\n\r\n'})},{"./epfl-i-button.controller":23}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ethLocationsAfterModule=void 0;var n=e("./eth-locations-filter/eth-locations-filter.module");(r.ethLocationsAfterModule=angular.module("ethLocationsAfterModule",[]).component("prmLocationsAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(n.ethLocationsFilterModule.name)},{"./eth-locations-filter/eth-locations-filter.module":27}],26:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e};function i(e,t){for(var r=0;r{{lang}}'})},{"./bcu-lang-switch.controller":28}],30:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),e};function i(e,t){for(var r=0;r'});l.requires.push(n.bcuLangSwitchModule.name),l.requires.push(i.slspIllSigninOrderLoggedOutModule.name)},{"./bcu-lang-switch/bcu-lang-switch.module":29,"./slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module":31}],34:[function(e,t,r){"use strict";e("./js/slsp-archives-htgi.module.js"),t.exports="slspArchivesHtgi"},{"./js/slsp-archives-htgi.module.js":35}],35:[function(e,t,r){"use strict";angular.module("slspArchivesHtgi",[]).controller("ArchivesHtgiController",[function(){this.$onInit=function(){try{if(!this.parentCtrl.item.pnx.display.source||0===this.parentCtrl.item.pnx.display.source.length)return;if(this.source=this.parentCtrl.item.pnx.display.source[0],"ETH_MaxFrischArchiv"===this.source||"ETH_ThomasMannArchiv"===this.source){document.getElementById("full-view-container").classList.add("slsp-archives-hide");var e=this.parentCtrl.item.pnx.control.originalsourceid[0],t=e.substring(e.lastIndexOf(":")+1);"ETH_ThomasMannArchiv"===this.source?this.url="http://www.online.tma.ethz.ch/home/#/content/"+t:"ETH_MaxFrischArchiv"===this.source&&(this.url="http://maxfrischarchiv-online.ethz.ch/home/#/content/"+t)}}catch(e){console.error("***SLSP*** an error occured: ArchivesHtgiController\n\n"),console.error(e.message)}}}]).component("almaHtgiSvcAfter",{bindings:{parentCtrl:"<"},controller:"ArchivesHtgiController",template:'\n
\n \n \n {{(\'customized.archives.\' + $ctrl.source + \'.linktext\' | translate)}}\n {{$ctrl.label}}\n
\n \n
\n
\n
\n
\n
\n No request possible. The digitized item can be consulted in the Thomas Mann Archives reading room upon advance registration (\n \n Contact\n \n \n ).\n
\n
\n
\n
\n Informationen zu Bestellung und Benutzung siehe\n \n Bedienungshinweise\n \n \n .\n
\n
\n
\n '})},{}],36:[function(e,t,r){"use strict";e("./js/slsp-archives-viewit.module.js"),t.exports="slspArchivesViewit"},{"./js/slsp-archives-viewit.module.js":37}],37:[function(e,t,r){"use strict";angular.module("slspArchivesViewit",[]).component("prmEthSearchResultAvailabilityLineAfter",{bindings:{afterCtrl:"<"},controller:"ArchivesAvailabilityLineController"}).component("prmEthAlmaViewitAfter",{bindings:{afterCtrl:"<"},controller:"ArchivesViewitController",template:'\n
\n \n \n {{(\'customized.archives.\' + $ctrl.source + \'.linktext\' | translate)}}\n {{$ctrl.label}}\n
\n \n
\n
\n
\n
\n
\n Informationen zu Bestellung und Benutzung siehe\n \n Bedienungshinweise\n \n \n .\n
\n
\n
\n '}).controller("ArchivesViewitController",["$translate",function(r){this.parentCtrl=this.afterCtrl.parentCtrl,this.$onInit=function(){try{if(!this.parentCtrl.item.pnx.display.source||0===this.parentCtrl.item.pnx.display.source.length)return;if(this.source=this.parentCtrl.item.pnx.display.source[0],"ETH_Hochschularchiv"===this.source){if(this.parentCtrl.item.delivery.GetIt1&&0";if("costWarningScan"==s.typeFeeAlert()){var n=o("customTranslate")("illButton");if(s.get_peb_button())var i="javascript:(function() {\n for (var elem of document.getElementsByTagName('span')) {\n if (elem.getAttribute('translate') === 'AlmaResourceSharing' &&\n elem.parentNode.className.indexOf('greenbutton') === -1)\n {\n elem.click();\n break;\n }\n };})()";else i="javascript:(function() {window.location.href = window.location.origin + '/discovery/blankIll?vid="+s.parentCtrl.vid+"'})()";r+='

'+n+"

"}r+='

'+s.parentCtrl.$translate.instant("customize.fullview.feesLinkText")+"

";var l=angular.element(r)[0];e.children.length==t?e.insertBefore(l,e.children[t-1]):e.children[e.children.length-2].replaceWith(l)}},Object.defineProperty(s.parentCtrl,"form",{configurable:!0,get:function(){var e=this.getFilteredForm(["label","multiLabel"],!1);if(!s.hasOwnProperty("pickupLocationsListOrdered"))for(var t=0;t":i.grpLabelB()?e+=''+i.parentCtrl.$translate.instant("customized.slsp.details")+"":i.getPatronGrp&&(e+='\n \n \n \n \n \n \n '+i.parentCtrl.$translate.instant("customized.personal.details")+'\n \n \n \n \n \n \n \n \n \n '+i.parentCtrl.$translate.instant("customized.libcard.number")+"\n \n "),e+="";var t=angular.element(e)[0],r=n[0].parentElement.children[1].children[0];r.insertBefore(t,r.children[1])},i.persInfoNotAv=function(){i.test+=1,i.test<10&&setTimeout(function(){return i.testPersonalInfo().then(i.persInfoAv,i.persInfoNotAv)},500)},0===i.test&&i.testPersonalInfo().then(i.persInfoAv,i.persInfoNotAv)}]).component("prmPersonalInfoAfter",{bindings:{parentCtrl:"<"},controller:"EditPersonalDetailsController"})},{}],42:[function(e,t,r){"use strict";e("./js/slsp-http-intercept-requests.module.js"),t.exports="slspHttpInterceptRequests"},{"./js/slsp-http-intercept-requests.module.js":43}],43:[function(e,t,r){"use strict";angular.module("slspHttpInterceptRequests",["ng"]).config(["$httpProvider",function(e){e.interceptors.push(["$q",function(t){return{request:function(e){return e},requestError:function(e){return t.reject(e)},responseError:function(e){return t.reject(e)},response:function(e){try{if(/primaws\/rest\/priv\/myaccount\/requests/.test(e.config.url)){var t=angular.element(document.querySelector("primo-explore")).injector().get("$rootScope").$$childHead.$ctrl.userSessionManagerService.getUserLanguage()||window.appConfig["primo-view"]["attributes-map"].interfaceLanguage,r={en:["in transit","in process","on hold shelf"],de:["transfer","in bearbeitung","bereitgestellt"],fr:["en cours de transfert","en cours","sur le rayon des réservations"],it:["in transito","in processo","scaffale prenotazioni"]};if(!Object.keys(r).includes(t))throw"No mapping found for "+t;var n=RegExp(r[t].map(function(e){return e.toLowerCase()}).join("|"));200==e.status&&"ok"==e.data.status&&e.data.data.holds.hold.map(function(e){n.test(e.holdstatus.toLowerCase())&&(e.cancel="N")})}}catch(e){console.log(e)}return e}}}])}])},{}],44:[function(e,t,r){"use strict";e("./js/slsp-ill-signin-order-alert.module.js"),t.exports="slspIllSigninOrderAlert"},{"./js/slsp-ill-signin-order-alert.module.js":45}],45:[function(e,t,r){"use strict";angular.module("slspIllSigninOrderAlert",[]).controller("AlertMsgController",["$scope",function(e){var r=this;r.getAlert=function(){var e=r.parentCtrl.almaHowToGetitService.reqAlert._htmlMsg,t=angular.element(document.querySelector("primo-explore"));return 0{{$ctrl.getAlert()}}'})},{}]},{},[19]); //# sourceMappingURL=custom.js.map diff --git a/primo-explore/custom/src/js/custom.js.map b/primo-explore/custom/src/js/custom.js.map index 14a7a26..8ded0c2 100644 --- a/primo-explore/custom/src/js/custom.js.map +++ b/primo-explore/custom/src/js/custom.js.map @@ -1 +1 @@ -{"version":3,"sources":["node_modules/browser-pack/_prelude.js","primo-explore/custom/src/js/briefview/availabilityline.component.js","primo-explore/custom/src/js/briefview/collection_link.component.js","primo-explore/custom/src/js/briefview/collection_link.controller.js","primo-explore/custom/src/js/briefview/index.js","primo-explore/custom/src/js/briefview/pdf_article_link.component.js","primo-explore/custom/src/js/briefview/pdf_article_link.controller.js","primo-explore/custom/src/js/briefview/publisher_link.component.js","primo-explore/custom/src/js/briefview/publisher_link.controller.js","primo-explore/custom/src/js/filters/custom_translate.filter.js","primo-explore/custom/src/js/fullView/almaviewit.component.js","primo-explore/custom/src/js/fullView/epfl_almaviewit.component.js","primo-explore/custom/src/js/fullView/epfl_almaviewit.controller.js","primo-explore/custom/src/js/fullView/index.js","primo-explore/custom/src/js/homepage/alert_message.js","primo-explore/custom/src/js/homepage/index.js","primo-explore/custom/src/js/homepage/mainmenu.component.js","primo-explore/custom/src/js/homepage/searchbar.component.js","primo-explore/custom/src/js/homepage/topbar.component.js","primo-explore/custom/src/js/main.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-after.module.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-filter/eth-location-items-filter.controller.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-filter/eth-location-items-filter.module.js","primo-explore/custom/src/js/slsp/prm-location-items-after/slsp-i-button/epfl-i-button.controller.js","primo-explore/custom/src/js/slsp/prm-location-items-after/slsp-i-button/epfl-i-button.module.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-after.module.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-filter/eth-locations-filter.controller.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-filter/eth-locations-filter.module.js","primo-explore/custom/src/js/slsp/slsp-archives-htgi/index.js","primo-explore/custom/src/js/slsp/slsp-archives-htgi/js/slsp-archives-htgi.module.js","primo-explore/custom/src/js/slsp/slsp-archives-viewit/index.js","primo-explore/custom/src/js/slsp/slsp-archives-viewit/js/slsp-archives-viewit.module.js","primo-explore/custom/src/js/slsp/slsp-courier-info/index.js","primo-explore/custom/src/js/slsp/slsp-courier-info/js/epfl-courier-info.module.js","primo-explore/custom/src/js/slsp/slsp-edit-personal-details/index.js","primo-explore/custom/src/js/slsp/slsp-edit-personal-details/js/epfl-edit-personal-details.module.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-alert/index.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-alert/js/slsp-ill-signin-order-alert.module.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/index.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/js/epfl-ill-signin-order-logged-out.module.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","bindings","parentCtrl","template","afterCtrl","controller","$filter","$http","userService","this","vm","get_collection_url","hasOwnProperty","collection_url","series","result","pnx","display","Array","isArray","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","m","value","match","$stateParams","lang","collection_title","window","location","origin","vid","tab","context","err","return","briefview_module","angular","component","parse_doi","txt","is_epfl_IP","isEpflIP","get_doi","addata","doi","control","recordtype","identifier","check_doi","set_url_pdf","url","method","then","response","status","pdf_link","data","fullTextFile","$element","is_pc","is_ebook","indexOf","type","toLowerCase","is_article","is_data_available","delivery","is_fulltext","availability","suppress_original_link","parentElement","children","replaceWith","is_publisher_url","checked","isFullView","recordid","post","doc","publisher_url","electronicServices","serviceUrl","GetIt1","_typeof","rank","links","link","_url","filter","$translate","trad","costWarningScan","fr","en","de","it","costWarningScanEPFL","costWarningNetworkLoan","costWarningPEB","mainTitle","subTitle","switchEduID","illButton","feedbackLink","vpnMSG","feedbackLinkMSG","pdfAccess","seriesLink","includes","use","get_txt","no_report_link","item","openaccess","oa","user_ip","get_ip","mmsId","title","creationdate","creator","join","ident","replace","substring","userAgent","navigator","subject","body","encodeURIComponent","fullview_module","active","begin","end","homepage_module","controllerAs","$doCheck","document","readyState","modified","elem","querySelector","removeAttribute","setAttribute","alert","d_now","Date","now","showTabsAndScopes","$location","absUrl","split","configurationUtil","_ethLocationItemsFilter","_epflIButton","ethLocationItemsAfterModule","requires","push","ethLocationItemsFilterModule","name","epflIButtonModule","ethLocationItemsFilterController","$timeout","$scope","_classCallCheck","_this","$watch","newValue","oldValue","scope","$ctrl","isLocationsFilterVisible","currentItemsArray","console","error","message","$inject","epflIButtonController","getLibrary","currLoc","librarycodeTranslation","biblinkText","biblinkBase","getLibraryUrl","loc","libraryCode","view","_ethLocationsFilter","ethLocationsAfterModule","ethLocationsFilterModule","ethLocationsFilterController","$onInit","source","getElementById","classList","add","sourceid","originalsourceid","guid","lastIndexOf","l","isLinktoOnline","translation","fullView","element","text","changeButton","changeButtonText","availabilityLine","button","html","$compile","$rootScope","form","formLength","typeFeeAlert","currentTypeFeeAlert","htmlwarning","getFeeAlert","get_peb_button","fn","instant","htmlcompiled","insertBefore","Object","defineProperty","configurable","get","getFilteredForm","key","options","sort","b","onTopInstitutions","isEPFL","requestService","_service","linkBase","requestHeader","allElements","getElementsByTagName","getAttribute","parentNode","className","click_peb","click","href","sms","$root","$$childHead","userSessionManagerService","getInterfaceLanguage","detailsBaseEdu","detailsBaseReg","exclude","grpA","grpB","getPatronGrp","personalInfoService","personalInfo","patron","patronstatus","registration","institution","patronstatuscode","grpLabelA","labelA","grpLabelB","labelB","test","testPersonalInfo","Promise","persInfoAv","persInfoNotAv","place_to_insert","setTimeout","getAlert","ga","almaHowToGetitService","reqAlert","_htmlMsg","myEl2","addClass","removeClass","service","jwtHelper","jwt","sessionStorage","getItem","decodeToken","userIp","isGuest","decodedToken","userGroup","userName","userIP","found","parseInt","usrNme"],"mappings":"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","file":"custom.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n \r\n \r\n `//availabilitylineHtml,\r\n}\r\n","\"use strict\";\r\n\r\nimport {collectionLinkHtml} from './collection_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require ('./collection_link.controller.js'),\r\n template: collectionLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', 'userService', function($filter, $http, userService) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Obtenir l'url d'une série.\r\n vm.get_collection_url = function(){\r\n if (vm.hasOwnProperty('collection_url')){\r\n return vm.collection_url;\r\n }\r\n try {\r\n var series = vm.parentCtrl.result.pnx.display.series;\r\n if (!Array.isArray(series)) {throw new Error('Notice without series');}\r\n } catch (e) {\r\n return null;\r\n }\r\n for (const serie of series){\r\n\r\n var m = serie.match(/\\$\\$Q(.*)\\$\\$Z(99\\d{16})/);\r\n\r\n if (m){\r\n\r\n if (!vm.parentCtrl.$stateParams.lang) {\r\n var lang = '';\r\n } else {\r\n var lang = `&lang=${vm.parentCtrl.$stateParams.lang}`;\r\n }\r\n vm.collection_title = m[1];\r\n vm.collection_url = `${ window.location.origin }/discovery/fulldisplay?vid=${ vm.parentCtrl.$stateParams.vid }&tab=${ vm.parentCtrl.$stateParams.tab }&docid=alma${ m[2] }&context=${ vm.parentCtrl.$stateParams.context }${ lang }`;\r\n return vm.collection_url;\r\n }\r\n\r\n }\r\n }\r\n\r\n // console.log(vm);\r\n}]\r\n","/* Importe en tant que compasant l'ensemble des éléments personnalisés EPFL.\r\nCela comporte l'affichage des collections, les liens directs vers le pdf,\r\net le lien direct vers le site de l'éditeur.\r\n*/\r\nvar briefview_module = angular.module('briefviewModule', ['angularLoad']);\r\nbriefview_module.component('prmSearchResultAvailabilityLineAfter', require('./availabilityline.component.js'));\r\nbriefview_module.component('prmPdfArticleLink', require('./pdf_article_link.component.js'));\r\nbriefview_module.component('prmPublisherLink', require('./publisher_link.component.js'));\r\nbriefview_module.component('prmCollectionLink', require('./collection_link.component.js'));\r\n","\"use strict\";\r\n\r\nimport {pdfArticleLinkHtml} from './pdf_article_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require('./pdf_article_link.controller.js'),\r\n template: pdfArticleLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', 'userService', function($filter, $http, userService) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Extrait le DOI brut depuis une chaîne de caractères\r\n function parse_doi(txt){\r\n var re = /10\\.\\d{4,9}\\/[-._;()/:A-Z0-9]+/i;\r\n var m = txt.match(re);\r\n if (m){\r\n return m[0]\r\n }\r\n }\r\n\r\n /* Teste si l'utilisateur est sur le range EPFL afin de décider s'il faut\r\n faut ou non afficher le lien direct */\r\n vm.is_epfl_IP = userService.isEpflIP();\r\n\r\n vm.get_doi = function(){\r\n if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){\r\n var pnx = vm.parentCtrl.result.pnx;\r\n\r\n // Recherche dans la section addata\r\n if ('addata' in pnx && 'doi' in pnx.addata && parse_doi(pnx.addata.doi[0]) && pnx.control.hasOwnProperty('recordtype') && pnx.control.recordtype[0]==='article') {\r\n return parse_doi(pnx.addata.doi[0])\r\n }\r\n\r\n // Recherche dans la section display\r\n if ('display' in pnx && 'identifier' in pnx.display) {\r\n for (const identifier of pnx.display.identifier){\r\n if (parse_doi(identifier)){\r\n return parse_doi(identifier)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n vm.check_doi = function(){\r\n if (!vm.hasOwnProperty('doi')){\r\n if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){\r\n if (vm.get_doi()){\r\n vm.doi = vm.get_doi();\r\n vm.set_url_pdf()\r\n\r\n } else {\r\n vm.doi = null;\r\n }\r\n }\r\n }\r\n if (vm.hasOwnProperty('pdf_link')) {\r\n return true\r\n }\r\n return false\r\n }\r\n vm.set_url_pdf = function(){\r\n var url = `https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/${vm.doi}?access_token=adc54dee-c6a6-4b99-a917-2ed400f1f2d3`;\r\n $http({\r\n method: 'GET',\r\n url: url\r\n }).then(function successCallback(response) {\r\n // console.log(response);\r\n if (response.status === 200) {\r\n try{\r\n var pdf_link = response.data.data.fullTextFile;\r\n } catch(e){\r\n var pdf_link = '';\r\n }\r\n if (pdf_link.length > 0) {\r\n vm.pdf_link = pdf_link;\r\n }\r\n }\r\n // console.log(vm.pdf_link);\r\n }, function errorCallback(response) {\r\n vm.doi = null;\r\n });\r\n\r\n }\r\n\r\n // console.log(vm);\r\n}]\r\n","\"use strict\";\r\n\r\nimport {publisherLinkHtml} from './publisher_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require ('./publisher_link.controller.js'),\r\n template: publisherLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', 'userService', '$element', function($filter, $http, userService, $element) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Utilise le service du module \\js\\slsp\\slsp-ill-signin-order-logged-out\\js\\epfl-ill-signin-order-logged-out.module.js \r\n vm.is_epfl_IP = userService.isEpflIP();\r\n\r\n // Vérifie si une ressource vient de CDI. L'attribut reste PC comme dans Primo Central l'ancien système.\r\n vm.is_pc = function(){\r\n return vm.parentCtrl.result.context === 'PC';\r\n }\r\n\r\n // Vérifie si le record est de type livre. Le lien direct vers l'éditeur est pertinent dans ce cas.\r\n vm.is_ebook = function(){\r\n if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){\r\n return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('book')!==-1;\r\n } else if (vm.parentCtrl.result.pnx.display.hasOwnProperty('type')){\r\n return vm.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf('book')!==-1;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Vérifie si la ressource est un article. Le lien direct vers l'éditeur est pertinent pour les articles.\r\n vm.is_article = function(){\r\n if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){\r\n return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('article')!==-1;\r\n } else {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n // Vérifie si le PNX est chargé\r\n vm.is_data_available = function(){\r\n return vm.parentCtrl.result && vm.parentCtrl.result.pnx && vm.parentCtrl.result.delivery;\r\n }\r\n\r\n // Vérifie si un accès fulltext est disponible\r\n vm.is_fulltext = function(){\r\n let availability = vm.parentCtrl.result.delivery.availability\r\n return availability.indexOf('fulltext')!==-1 || availability.indexOf('not_restricted')!==-1;\r\n }\r\n\r\n // Supprime le lien original\r\n vm.suppress_original_link = function(){\r\n $element[0].parentElement.parentElement.children[0].replaceWith('');\r\n }\r\n\r\n /* Définit l'url de l'éditeur si celle-ci est disponible à la place de\r\n l'affichage de la notice détaillée.\r\n La fonction retourne true si l'url est modifiée */\r\n vm.is_publisher_url = function(){\r\n /* L'url n'est modifié que pour les ebooks et les articles. De plus,\r\n il faut être dans le range IP de l'EPFL */\r\n if (!vm.checked && vm.is_data_available() && vm.is_epfl_IP && (vm.is_ebook() || vm.is_article())) {\r\n\r\n // L'adresse du service est différente selon que la ressource est dans cdi ou non (vm.is_pc())\r\n if (!vm.parentCtrl.isFullView && vm.is_fulltext() && vm.is_pc()){\r\n vm.checked = true;\r\n /* Les données ne contiennent pas des informations détaillées avec le lien direct.\r\n Il faut donc utiliser un service pour obtenir ces données. */\r\n let url = `${ window.location.origin }/primaws/rest/pub/pcDelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`;\r\n $http.post(url, {doc:vm.parentCtrl.result}).then((e) => {\r\n vm.publisher_url = e.data.delivery.electronicServices[0].serviceUrl;\r\n vm.suppress_original_link();\r\n });\r\n } else if (!vm.parentCtrl.isFullView && vm.is_fulltext() && !vm.is_pc()){\r\n vm.checked = true;\r\n let url = `${ window.location.origin }/primaws/rest/pub/edelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`;\r\n $http.post(url, {doc:vm.parentCtrl.result}).then((e) => {\r\n vm.publisher_url = e.data.electronicServices[0].serviceUrl;\r\n vm.suppress_original_link();\r\n })\r\n /* Dans la vue détaillée, l'url est accessible sans avoir à interroger le service */\r\n } else if (vm.parentCtrl.isFullView && vm.parentCtrl.result.delivery.GetIt1 && typeof(vm.parentCtrl.result.delivery.GetIt1)==='object') {\r\n vm.checked = true;\r\n let rank = vm.parentCtrl.result.delivery.availability.indexOf('not_restricted')\r\n if (rank !== -1) {\r\n vm.publisher_url = vm.parentCtrl.result.delivery.GetIt1[0].links[rank].link;\r\n vm.suppress_original_link();\r\n }\r\n } else if (!vm.is_fulltext()){\r\n vm.checked = true;\r\n }\r\n }\r\n return vm.hasOwnProperty('publisher_url');\r\n }\r\n // console.log('Publisher_link:');\r\n // console.log(vm);\r\n // console.log('---------------');\r\n}]\r\n","\"use strict\";\r\n\r\n/***********************/\r\n/* FILTRE : traduction */\r\n/***********************/\r\n\r\n/*\r\n OBJECTIF: traduire des éléments, tant des urls que du texte.\r\n UTILISATION:\r\n - Dans le template:\r\n 1. comme un filtre: {{ clé | customTranslate }}\r\n - Dans un controlleur:\r\n Même si les filtres sont d'abord prévus pour être utilisés dans le\r\n template, on peut les appeler dans les controlleurs.\r\n 1. Ajouter le service dans l'en-tête du controlleur\r\n 2. Appeler le service avec la fonction $filter\r\n EXEMPLE:\r\n controller:function($http, $filter){...\r\n var traduction = $filter('customTranslate')('cleTrad');\r\n ...}\r\n CONFIGURATION:\r\n L'ajout de traduction se fait à travers des objets. La clé indique le\r\n terme à utiliser dans le template ou le controlleur pour ensuite\r\n renvoyer la traduction. Les noms associés n'appaaraissent donc pas tels\r\n quels. La structure de chaque élément traduit disponible est comme suit:\r\n clé1:{\r\n fr: traductionFrançaise\r\n en: traductionAnglaise\r\n },\r\n clé2:{\r\n fr: traductionFrançaise\r\n en: traductionAnglaise\r\n }\r\n*/\r\nangular\r\n .module('customTranslateFilter', [])\r\n .filter('customTranslate', ['$translate', function($translate){\r\n return function(txt){\r\n var trad = {\r\n\r\n costWarningScan:{\r\n fr: \"Service payant: les collaborateurs et les étudiants de l’EPFL peuvent bénéficier de ce service gratuitement, en utilisant le formulaire:\",\r\n en: \"Fee-based service: EPFL employees and students can benefit from this service free of charge by using the form:\",\r\n de: \"Kostenpflichtiger Service: Mitarbeitern und Studenten der EPFL steht dieser Dienst über das Fernleihe-Formular gratis zur Verfügung.\",\r\n it: \"Servizio a pagamento: I dipendenti e gli studenti dell'EPFL possono usufruire gratuitamente di questo servizio utilizzando il modulo:\"\r\n },\r\n costWarningScanEPFL:{\r\n fr: \"Service gratuit pour les collaborateurs et les étudiants EPFL.\",\r\n en: \"Free of charge for EPFL staff and students.\",\r\n de: \"Service für Mitarbeiter und Studenten der EPFL kostenlos\",\r\n it: \"Servizio gratuito per i dipendenti e gli studenti dell’EPFL.\"\r\n },\r\n costWarningNetworkLoan:{\r\n fr: \"Service gratuit en cas de retrait à la Bibliothèque de l’EPFL.\",\r\n en: \"Free of charge if withdrawal at the EPFL Library.\",\r\n de: \"Service bei Abholung in der EPFL-Bibliothek kostenlos.\",\r\n it: \"Servizio gratuito in caso di ritiro alla Biblioteca dell’EPFL\"\r\n },\r\n costWarningPEB:{\r\n fr: \"Service gratuit pour les collaborateurs et les étudiants de l’EPFL. Avant de passer une commande d’un document physique via le prêt entre bibliothèques, merci de vous assurer que ce document n'est pas disponible dans d’autres bibliothèques du réseau SLSP dans swisscovery.\",\r\n en: \"Free of charge for EPFL staff and students. Before placing an order for a physical document via the interlibrary loan, please make sure that this document is not available in other SLSP network libraries on swisscovery.\",\r\n de: \"Kostenloser Service für Mitarbeiter und Studenten der EPFL. Bevor Sie ein Medium über die Fernleihe bestellen, vergewissern Sie sich bitte zunächst in swisscovery, dass es nicht in einer anderen Bibliothek des SLSP-Netzwerks verfügbar ist.\",\r\n it: \"Servizio gratuito per i dipendenti e gli studenti dell’EPFL. Prima di ordinare un documento cartaceo tramite il prestito interbibliotecario, assicuratevi che questo documento non sia disponibile in altre biblioteche della rete SLSP in swisscovery.\"\r\n },\r\n mainTitle:{\r\n fr: \"Catalogue BEAST\",\r\n en: \"BEAST discovery tool\",\r\n de: \"BEAST Wissensportal\",\r\n it: \"Catalogo BEAST\"\r\n },\r\n subTitle:{\r\n fr: \"Le point d\\'accès à toutes les ressources de la Bibliothèque de l\\'EPFL\",\r\n en: \"The access portal to all the resources of the EPFL Library\",\r\n de: \"Der Zugangspunkt zu allen Ressourcen der EPFL Bibliothek\",\r\n it: \"Il punto d’accesso a tutte le risorse della Biblioteca dell’EPFL\"\r\n },\r\n switchEduID:{\r\n fr: \"Modifier vos informations personnelles sur\",\r\n en: \"Change your personal data on\",\r\n de: \"Ändern Sie Ihre persönlichen Daten auf\",\r\n it: \"Modifica i tuoi dati personali sul\"\r\n },\r\n illButton:{\r\n fr: \"Prêt entre bibliothèques (PEB)\",\r\n en: \"Inter Library Loan (ILL)\",\r\n de: \"Fernleihe\",\r\n it: \"Prestito interbibliotecario\"\r\n },\r\n feedbackLink:{\r\n fr: \"Signaler un problème d'accès\",\r\n en: \"Report an access problem\",\r\n de: \"Zugriffsproblem melden\",\r\n it: \"Segnalare un problema di accesso\"\r\n },\r\n vpnMSG:{\r\n fr: \"Les ressources électroniques sont accessibles depuis tous les postes de l’EPFL, et à distance via le VPN EPFL.\",\r\n en: \"Electronic resources are accessible from all EPFL workstations, and remotely via the EPFL VPN.\",\r\n de: \"Elektronische Informationsressourcen sind an allen EPFL-Arbeitsplätzen und per EPFL VPN abrufbar.\",\r\n it: \"Le risorse elettroniche sono accessibili da tutte le postazioni di lavoro dell'EPFL e a distanza tramite VPN EPFL.\"\r\n },\r\n // vpnLink:{\r\n // fr: \"https://www.epfl.ch/campus/services/ressources-informatiques/network-services-reseau/acces-intranet-a-distance/clients-vpn-disponibles/\",\r\n // en: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\",\r\n // de: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\",\r\n // it: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\"\r\n // },\r\n feedbackLinkMSG:{\r\n fr: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n en: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n de: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n it: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\"\r\n },\r\n pdfAccess:{\r\n fr: \"Accès direct au pdf\",\r\n en: \"Direct access to the pdf\",\r\n de: \"Direct access to the pdf\",\r\n it: \"Direct access to the pdf\"\r\n },\r\n seriesLink:{\r\n fr: \"Collection :\",\r\n en: \"Serie:\",\r\n de: \"Serie:\",\r\n it: \"Serie:\"\r\n }\r\n };\r\n if (['en', 'fr', 'it', 'de'].includes($translate.use())) {\r\n return trad[txt][$translate.use()]\r\n } else {\r\n return trad[txt].fr\r\n }\r\n };\r\n }]);\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n\r\n Englobe un module d'archive de l'ETH et un module de l'EPFL.\r\n ETH: primo-explore\\custom\\src\\js\\slsp\\slsp-archives-viewit\\js\\slsp-archives-viewit.module.js\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n template: `
\r\n
`}\r\n","\"use strict\";\r\n\r\nimport {epfl_almaviewit_html} from './epfl_almaviewit.html'\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require('./epfl_almaviewit.controller.js'),\r\n template: epfl_almaviewit_html}\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n*/\r\n\r\nmodule.exports = ['$filter', 'userService', function($filter, userService) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this;\r\n\r\n vm.get_txt = function() {\r\n return $filter('customTranslate')('vpnMSG');\r\n }\r\n\r\n vm.feedbackLink = '';\r\n vm.is_epfl_IP = false;\r\n vm.no_report_link = false;\r\n\r\n // Ne pas afficher le lien s'il s'agit d'open access\r\n if (vm.parentCtrl.item.pnx.addata.openaccess && vm.parentCtrl.item.pnx.addata.openaccess[0] === 'true') {\r\n vm.no_report_link = true;\r\n }\r\n // Ne pas afficher le lien s'il s'agit d'open access (notices CDI)\r\n if (vm.parentCtrl.item.pnx.addata.oa && vm.parentCtrl.item.pnx.addata.oa[0] === 'free_for_read') {\r\n vm.no_report_link = true;\r\n }\r\n\r\n if (!vm.no_report_link){\r\n\r\n /* Obtient l'adresse ip depuis un service se trouvant dans le\r\n module \\js\\slsp\\slsp-ill-signin-order-logged-out\\js\\epfl-ill-signin-order-logged-out.module.js */\r\n vm.is_epfl_IP = userService.isEpflIP();\r\n vm.user_ip = userService.get_ip();\r\n\r\n // Récupération des métadonnées de la ressource\r\n var mmsId = vm.parentCtrl.item.pnx.control.recordid[0];\r\n var title = '';\r\n if (vm.parentCtrl.item.pnx.display.title && vm.parentCtrl.item.pnx.display.title.length > 0) {\r\n title = vm.parentCtrl.item.pnx.display.title[0];\r\n }\r\n var creationdate = '';\r\n if (vm.parentCtrl.item.pnx.display.creationdate && vm.parentCtrl.item.pnx.display.creationdate.length > 0) {\r\n creationdate = vm.parentCtrl.item.pnx.display.creationdate[0];\r\n }\r\n var creator = '';\r\n if (vm.parentCtrl.item.pnx.display.creator && vm.parentCtrl.item.pnx.display.creator.length > 0) {\r\n creator = vm.parentCtrl.item.pnx.display.creator.join(', ');\r\n }\r\n var type = '';\r\n if (vm.parentCtrl.item.pnx.display.type && vm.parentCtrl.item.pnx.display.type.length > 0) {\r\n type = vm.parentCtrl.item.pnx.display.type[0];\r\n }\r\n var identifier = '';\r\n if (vm.parentCtrl.item.pnx.display.identifier && vm.parentCtrl.item.pnx.display.identifier.length > 0) {\r\n var ident = vm.parentCtrl.item.pnx.display.identifier[0];\r\n if (ident.indexOf('ISBN') > -1) {\r\n identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\\/b>/g, '').replace(//g, '');\r\n } else if (ident.indexOf('ISSN') > -1) {\r\n identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\\/b>/g, '').replace(//g, '');\r\n } else if (ident.indexOf('ISBN') > -1) {\r\n identifier = 'ISBN: ' + ident.substring(ident.indexOf('$$V') + 3);\r\n } else if (ident.indexOf('ISSN') > -1) {\r\n identifier = 'ISSN: ' + ident.substring(ident.indexOf('$$V') + 3);\r\n }\r\n }\r\n var userAgent = navigator.userAgent;\r\n\r\n // Création de l'objet du message\r\n var subject = 'Access problem ' + mmsId + ' - \"' + title + '\"';\r\n\r\n // Création du corps du message\r\n var body = $filter('customTranslate')('feedbackLinkMSG') + '\\n\\n' + '****\\nTitle: ' + title + '\\nAuthor: ' + creator + '\\nYear: ' + creationdate + '\\nType: ' + type + '\\nDocId: ' + mmsId + '\\nIdentifier: ' + identifier + '\\nUser_agent: ' + userAgent + '\\nUserIP: ' + vm.user_ip + '\\nRange EPFL: ' + vm.is_epfl_IP + '\\n****';\r\n\r\n vm.feedbackLink = 'mailto:eresources@epfl.ch' + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body) + '&Content-Type=text/html';\r\n }\r\n\r\n }]\r\n","\r\nvar fullview_module = angular.module('fullviewModule', ['angularLoad']);\r\nfullview_module.component('prmAlmaViewitAfter', require('./almaviewit.component.js'));\r\nfullview_module.component('prmEpflAlmaViewitAfter', require('./epfl_almaviewit.component.js'));\r\n","module.exports = {active: true,\r\n txt:\r\n {fr: `
\r\n

Le réseau NEBIS a pris fin le 7 décembre 2020 pour être remplacé par un nouveau réseau plus vaste : swisscovery

\r\n
`,\r\n en: `
\r\n

The NEBIS network ended on December 7, 2020. It has been replaced by swisscovery: a new and wider network.

\r\n
`,\r\n de: `
\r\n

Das NEBIS-Netzwerk wurde am 07.12.2020 abgeschaltet und durch ein neues, grösseres Netzwerk ersetzt: swisscovery

\r\n
`,\r\n it: `
\r\n

La rete NEBIS è stata sciolta il 7 dicembre 2020 per essere sostituita da una rete piú ampia di biblioteche: swisscovery

\r\n
`},\r\n begin:\"2020-01-04T00:00:00Z\",\r\n end:\"2023-03-31T12:00:00Z\"}\r\n","var homepage_module = angular.module('homepageModule', ['angularLoad']);\r\nhomepage_module.component('prmSearchBarAfter', require('./searchbar.component.js'));\r\nhomepage_module.component('prmMainMenuAfter', require('./mainmenu.component.js'));\r\nhomepage_module.component('prmTopbarAfter', require('./topbar.component.js'));\r\n","/*\r\n DESCRIPTION:\r\n Corriger le lien du menu principal vers les bases de données.\r\n Empêche l'ouverture d'un nouvel onglet.\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n controllerAs: 'ctrl',\r\n controller: [function() {\r\n var vm = this;\r\n\r\n // Effectue cette vérification lors chaque digest.\r\n this.$doCheck = function() {\r\n // Vérifie si la page est chargée\r\n if (document.readyState === 'complete' && !vm.modified){\r\n\r\n // Essaie de trouver le menu des bases de données\r\n try{var elem = document.querySelector(\"[translate='mainmenu.label.db']\").parentElement;}\r\n catch(e){\r\n vm.modified = false;\r\n }\r\n if (elem){\r\n // Empêche l'ouverture d'un nouvel onglet en supprimant l'attribut \"target\"\r\n elem.removeAttribute('target');\r\n elem.setAttribute('aria-label', 'Databases');\r\n vm.modified = true;\r\n }\r\n }\r\n };\r\n }]\r\n};\r\n","/*\r\n OBJECTIFS:\r\n - Toujours afficher l'onglet pour modifier le scope\r\n - Afficher une alerte si les dates correspondent\r\n UTILISATION:\r\n Pour paramétrer l'alerte, il faut modifier le fichier alert_message.js (dans ce dossier)\r\n\r\n REMARQUES:\r\n
\r\n => \"ng-bind-html\" permet d'avoir du texte formatté dans la balise.\r\n*/\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n template: '
',\r\n controllerAs: 'ctrl',\r\n controller: ['$translate', function($translate){\r\n\r\n var vm = this;\r\n\r\n /********************/\r\n /* MESSAGE D'ALERTE */\r\n /********************/\r\n\r\n // récupère le fichier json avec les paramètres de l'alerte\r\n vm.alert = require('./alert_message.js');\r\n\r\n // par défaut, l'alerte n'est pas considérée comme active\r\n vm.active = false;\r\n\r\n // Vérifie dans le fichier json si une alerte est prévue\r\n if (vm.alert.active === true){\r\n\r\n // Teste si les dates correspondent pour l'affichage de l'alerte\r\n var d_now = Date.now();\r\n if ((new Date(vm.alert.begin) < d_now) && (d_now < new Date(vm.alert.end))) {\r\n // déclenche l'affichage de l'alerte\r\n vm.active = true;\r\n }\r\n }\r\n\r\n // getteur qui retourne le texte en fonction de la langue\r\n vm.get_txt = function(){\r\n var lang = ['en', 'fr', 'it', 'de'].includes($translate.use()) ? $translate.use():'en';\r\n return vm.active ? vm.alert.txt[lang] : \"\";\r\n }\r\n\r\n /*******************/\r\n /* SCOPE PERMANENT */\r\n /*******************/\r\n\r\n // Rendre permanent l'affichage des onglets permettant de sélectionnet le scope\r\n vm.parentCtrl.showTabsAndScopes = true;\r\n\r\n // console.log(vm.alert);\r\n }\r\n ]};\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: afficher l'entête de la page.\r\n DESCRIPTION: contient le titre BEAST et le teaser. Si on clique sur le\r\n titre, cela renvoie à la page d'accueil de BEAST.\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n controllerAs: 'ctrl',\r\n controller: ['$location', '$translate', function($location, $translate) {\r\n var vm = this;\r\n\r\n // Construction de l'URL vers la page d'accueil. Il faut indiquer la vue et la langue.\r\n vm.url = $location.absUrl().split('?')[0] + '?vid=' + vm.parentCtrl.configurationUtil.vid + '&lang=' + $translate.use();\r\n\r\n // console.log(vm.url);\r\n }],\r\n template: `
\r\n

{{ 'mainTitle' | customTranslate }}

\r\n

{{ 'subTitle' | customTranslate }}

\r\n
`\r\n};\r\n","/************************/\r\n/* List of used modules */\r\n/************************/\r\n\r\n/*\r\nLes paquets suivants ne sont pas en usage pour le moment:\r\n- trustHtmal qui permet de mettre des balises dans les champs de données.\r\n- databases: pour l'instant il n'y a pas de personnalisation\r\n*/\r\n\r\nimport './filters/custom_translate.filter.js';\r\n// import './filters/trust_html.filter.js';\r\nimport './slsp/slsp-courier-info';\r\nimport './slsp/slsp-ill-signin-order-logged-out';\r\nimport './slsp/slsp-ill-signin-order-alert';\r\nimport './slsp/slsp-edit-personal-details';\r\nimport './slsp/prm-locations-after';\r\nimport './slsp/prm-location-items-after';\r\nimport './slsp/slsp-archives-htgi';\r\nimport './slsp/slsp-archives-viewit';\r\nimport './briefview';\r\nimport './homepage';\r\nimport './fullView'\r\n// import './databases';\r\nvar app = angular.module('viewCustom', ['angularLoad',\r\n 'customTranslateFilter',\r\n // 'trustHtmlFilter',\r\n 'epflCourierInfo',\r\n 'epflIllSigninOrderLoggedOut',\r\n 'slspIllSigninOrderAlert',\r\n 'epflEditPersonalDetails',\r\n 'ethLocationsAfterModule',\r\n 'ethLocationItemsAfterModule',\r\n 'slspArchivesHtgi',\r\n 'slspArchivesViewit',\r\n 'briefviewModule',\r\n 'homepageModule',\r\n 'fullviewModule',\r\n // 'databasesModule'\r\n ]);\r\n","import {ethLocationItemsFilterModule} from './eth-location-items-filter/eth-location-items-filter.module';\r\nimport {epflIButtonModule} from './slsp-i-button/epfl-i-button.module';\r\n\r\nexport const ethLocationItemsAfterModule = angular\r\n .module('ethLocationItemsAfterModule', [])\r\n .component('prmLocationItemsAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nethLocationItemsAfterModule.requires.push(ethLocationItemsFilterModule.name);\r\nethLocationItemsAfterModule.requires.push(epflIButtonModule.name);\r\n","export class ethLocationItemsFilterController {\r\n\r\n constructor($timeout, $scope) {\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n }\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.$watch('this.$ctrl.parentCtrl.loc.location.librarycodeTranslation', (newValue, oldValue, scope) => {\r\n \r\n if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){\r\n \r\n this.$scope.$watch('this.$ctrl.parentCtrl.loc.items', (currentItemsArray) => {\r\n\r\n if (angular.isArray(currentItemsArray) && currentItemsArray.length > 1){\r\n \r\n this.$timeout(() => {\r\n scope.$ctrl.parentCtrl.isLocationsFilterVisible = true;\r\n }, 0);\r\n \r\n } \r\n \r\n })\r\n }\r\n\r\n }, true);\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ethLocationItemsFilterController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nethLocationItemsFilterController.$inject = ['$timeout', '$scope'];\r\n\r\n","/**\r\n* @ngdoc module\r\n* @name ethLocationsFilterModule\r\n*\r\n* @description\r\n*\r\n* Customization for the locations filter:
\r\n* - the locations filter is visible by default\r\n*\r\n* If there is 1 location: prmLocationItemsAfter\r\n*\r\n* If there are multiple locations: prmLocationAfter;\r\n* after all locations: prmLocationsAfter;\r\n* after choosing a location: prmLocationItemsAfter\r\n*\r\n*\r\n* AngularJS Dependencies
\r\n*\r\n*\r\n* CSS/Image Dependencies
\r\n* CSS eth-locations-filter.css\r\n*\r\n*\r\n*/\r\nimport {ethLocationItemsFilterController} from './eth-location-items-filter.controller';\r\n\r\nexport const ethLocationItemsFilterModule = angular\r\n .module('ethLocationItemsFilterModule', [])\r\n .controller('ethLocationItemsFilterController', ethLocationItemsFilterController)\r\n .component('ethLocationItemsFilterComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'ethLocationItemsFilterController'\r\n })\r\n","\r\n\r\n//--------\"i\" button ---------------------------------------\r\n\r\n\r\n export class epflIButtonController {\r\n\r\n constructor() {}\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n // console.log(this);\r\n this.getLibrary = getLibrary;\r\n this.biblinkText = \"Library\";\r\n this.biblinkBase = \"https:\\/\\/slsp.ch\\/libraries\";\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n this.getLibraryUrl = getLibraryUrl;\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n\r\n function getLibrary() {\r\n return this.parentCtrl.currLoc ? this.parentCtrl.currLoc.location.librarycodeTranslation : '';\r\n\r\n }\r\n\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n function getLibraryUrl() {\r\n if (this.parentCtrl.loc && this.parentCtrl.loc.location.libraryCode==='E02') {\r\n return \"https://go.epfl.ch/library\";\r\n } else {\r\n return this.biblinkBase;\r\n }\r\n }\r\n // View is useful to get the url img\r\n this.view = this.parentCtrl.configurationUtil.vid.replace(':', '-');\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: slspIButtonController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }\r\n\r\n epflIButtonController.$inject = [];\r\n","\r\n\r\n//--------\"i\" button ---------------------------------------\r\n\r\n// angular\r\n// .module('slspIButton', [])\r\n\r\n// .controller('LibInfoController', [function () {\r\n// var vm = this;\r\n// vm.getLibrary = getLibrary;\r\n// vm.biblinkText = \"Library\";\r\n// vm.biblinkBase = \"https:\\/\\/slsp.ch\\/libraries\";\r\n\r\n// function getLibrary() {\r\n// return vm.parentCtrl.currLoc.location.librarycodeTranslation;\r\n// }\r\n\r\n// }])\r\n\r\n// .component('prmLocationItemsAfter', {\r\n// bindings: { parentCtrl: '<' },\r\n// controller: 'LibInfoController',\r\n// template: ''\r\n// });\r\n\r\n\r\n\r\n import {epflIButtonController} from './epfl-i-button.controller';\r\n import {epflIButtonHtml} from './epfl-i-button.html';\r\n\r\n export const epflIButtonModule = angular\r\n .module('epflIButtonModule', [])\r\n .controller('epflIButtonController', epflIButtonController)\r\n .component('epflIButtonComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'epflIButtonController',\r\n template: epflIButtonHtml\r\n })\r\n","import {ethLocationsFilterModule} from './eth-locations-filter/eth-locations-filter.module';\r\n\r\nexport const ethLocationsAfterModule = angular\r\n .module('ethLocationsAfterModule', [])\r\n .component('prmLocationsAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nethLocationsAfterModule.requires.push(ethLocationsFilterModule.name);\r\n","export class ethLocationsFilterController {\r\n\r\n constructor($timeout, $scope) {\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n }\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.$watch('this.$ctrl.parentCtrl.locations[0].location.librarycodeTranslation', (newValue, oldValue, scope) => {\r\n if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){\r\n this.$timeout(() => {\r\n scope.$ctrl.parentCtrl.isLocationsFilterVisible = true;\r\n }, 0);\r\n }\r\n }, true);\r\n }\r\n catch(e){\r\n console.error(\"***ETH*** an error occured: ethLocationsFilterController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nethLocationsFilterController.$inject = ['$timeout', '$scope'];\r\n","/**\r\n* @ngdoc module\r\n* @name ethLocationsFilterModule\r\n*\r\n* @description\r\n*\r\n* Customization for the locations filter:
\r\n* - the locations filter is visible by default\r\n*\r\n* If there is 1 location: prmLocationItemsAfter\r\n*\r\n* If there are multiple locations: prmLocationAfter;\r\n* after all locations: prmLocationsAfter;\r\n* after choosing a location: prmLocationItemsAfter\r\n*\r\n*\r\n* AngularJS Dependencies
\r\n*\r\n*\r\n* CSS/Image Dependencies
\r\n* CSS eth-locations-filter.css\r\n*\r\n*\r\n*/\r\nimport {ethLocationsFilterController} from './eth-locations-filter.controller';\r\n\r\nexport const ethLocationsFilterModule = angular\r\n .module('ethLocationsFilterModule', [])\r\n .controller('ethLocationsFilterController', ethLocationsFilterController)\r\n .component('ethLocationsFilterComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'ethLocationsFilterController'\r\n })\r\n","require('./js/slsp-archives-htgi.module.js')\r\nmodule.exports = 'slspArchivesHtgi'\r\n","angular\r\n .module('slspArchivesHtgi', [])\r\n\r\n // \"how to get it\" section for resources of archives MFA, TMA (CMI STAR)\r\n\r\n .controller('ArchivesHtgiController', [function () {\r\n\r\n this.$onInit = function () {\r\n try{\r\n if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.item.pnx.display.source[0];\r\n // CMI STAR sources\r\n if(this.source === 'ETH_MaxFrischArchiv' || this.source === 'ETH_ThomasMannArchiv'){\r\n // hide content of htgi section\r\n let section = document.getElementById('full-view-container');\r\n section.classList.add('slsp-archives-hide');\r\n\r\n // get guid of CMIStar\r\n let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0];\r\n let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1);\r\n\r\n // different sources: concat url\r\n if(this.source === 'ETH_ThomasMannArchiv'){\r\n this.url = 'http://www.online.tma.ethz.ch/home/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Detailed information in Thomas Mann-Archiv Online (metadata only)';\r\n }\r\n else if (this.source === 'ETH_MaxFrischArchiv') {\r\n this.url = 'http://maxfrischarchiv-online.ethz.ch/home/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Request via Max Frisch-Archiv Online';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesHtgiController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n\r\n .component('almaHtgiSvcAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'ArchivesHtgiController',\r\n template: `\r\n
\r\n \r\n \r\n {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}}\r\n {{$ctrl.label}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No request possible. The digitized item can be consulted in the Thomas Mann Archives reading room upon advance registration (\r\n \r\n Contact\r\n \r\n \r\n ).\r\n
\r\n
\r\n
\r\n
\r\n Informationen zu Bestellung und Benutzung siehe\r\n \r\n Bedienungshinweise\r\n \r\n \r\n .\r\n
\r\n
\r\n
\r\n `\r\n });\r\n","require('./js/slsp-archives-viewit.module.js')\r\nmodule.exports = 'slspArchivesViewit'\r\n","angular\r\n.module('slspArchivesViewit', [])\r\n\r\n // .component('prmSearchResultAvailabilityLineAfter', { VERSION ETH\r\n //bindings: { parentCtrl: '<' },\r\n .component('prmEthSearchResultAvailabilityLineAfter', { // VERSION EPFL\r\n bindings: { afterCtrl: '<' },\r\n controller: 'ArchivesAvailabilityLineController'\r\n })\r\n\r\n .component('prmEthAlmaViewitAfter', {\r\n bindings: { afterCtrl: '<' },\r\n controller: 'ArchivesViewitController',\r\n template: `\r\n
\r\n \r\n \r\n {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}}\r\n {{$ctrl.label}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Informationen zu Bestellung und Benutzung siehe\r\n \r\n Bedienungshinweise\r\n \r\n \r\n .\r\n
\r\n
\r\n
\r\n `\r\n })\r\n\r\n // viewit section for archives when there are only partial digitized items, e.g. \"ETH Hochschularchiv\" (CMI STAR)\r\n .controller('ArchivesViewitController', ['$translate', function ($translate) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$onInit = function () {\r\n try{\r\n if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.item.pnx.display.source[0];\r\n // CMI STAR sources\r\n if(this.source === 'ETH_Hochschularchiv'){\r\n if(this.parentCtrl.item.delivery.GetIt1 && this.parentCtrl.item.delivery.GetIt1.length > 0 && this.parentCtrl.item.delivery.GetIt1[0].links && this.parentCtrl.item.delivery.GetIt1[0].links.length > 0){\r\n\r\n // there is an online resource: return and do nothing\r\n let aOnlineLink = this.parentCtrl.item.delivery.GetIt1[0].links.filter( l => {\r\n if(l.isLinktoOnline && l.link !== ''){\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (aOnlineLink.length > 0) {\r\n return;\r\n }\r\n\r\n // there is no online resource\r\n // change section heading\r\n $translate('nui.getit.service_howtogetit').then((translation) => {\r\n let fullView = document.getElementById('fullView');\r\n angular.element(fullView.querySelector(\"h4[translate='nui.getit.service_viewit']\")).text(translation);\r\n angular.element(fullView.querySelector(\"#services-index span[translate='nui.getit.service_viewit']\")).text(translation);\r\n });\r\n\r\n }\r\n // hide content of viewit section\r\n let section = document.getElementById('full-view-container');\r\n section.classList.add('slsp-archives-hide');\r\n\r\n // get guid of CMIStar\r\n let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0];\r\n let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1);\r\n\r\n // different sources: concat url\r\n if(this.source === 'ETH_Hochschularchiv'){\r\n this.url = 'http://archivdatenbank-online.ethz.ch/hsa/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Bestellen über Hochschularchiv Online';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesViewitController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n\r\n // change availability line, if there is no digitization\r\n .controller('ArchivesAvailabilityLineController', ['$translate', function ($translate) {\r\n this.$onInit = function () {\r\n try{\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n /********************/\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n /********************/\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n this.changeButton = false;\r\n if(!this.parentCtrl.result.pnx.display.source || this.parentCtrl.result.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.result.pnx.display.source[0];\r\n if(!this.source === 'ETH_Hochschularchiv')return;\r\n if(!this.parentCtrl.result.delivery.GetIt1 || this.parentCtrl.result.delivery.GetIt1.length == 0 || !this.parentCtrl.result.delivery.GetIt1[0].links || this.parentCtrl.result.delivery.GetIt1[0].links.length == 0)return;\r\n\r\n let aOnlineLink = this.parentCtrl.result.delivery.GetIt1[0].links.filter( l => {\r\n if(l.isLinktoOnline && l.link !== ''){\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (aOnlineLink.length === 0) {\r\n // there is no online resource\r\n $translate('delivery.code.no_inventory').then((translation) => {\r\n this.changeButton = true;\r\n this.changeButtonText = translation;\r\n });\r\n let availabilityLine = this.parentCtrl.$element[0];\r\n if(availabilityLine) {\r\n availabilityLine.classList.add('slsp-hsa-no-online');\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesAvailabilityLineController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n\r\n this.$doCheck = function () {\r\n try{\r\n if (this.changeButton){\r\n let availabilityLine = this.parentCtrl.$element[0];\r\n let button = availabilityLine.querySelector('.availability-status');\r\n if(angular.element(button) && angular.element(button).length > 0){\r\n angular.element(button).html(this.changeButtonText);\r\n this.changeButton = false;\r\n this.changeButtonText = '';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***ETH*** an error occured: ArchivesAvailabilityLineController $doCheck\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n","require('./js/epfl-courier-info.module.js')\r\nmodule.exports = 'slspCourierInfo'\r\n","/* ---------------- */\r\n/* - VERSION EPFL - */\r\n/* ---------------- */\r\n\r\n/*\r\n\r\nAVERTISSEMENT: ce module est très différent de sa version originale d'SLSP.\r\n\r\nIl doit donc être considéré comme réécrit et les ajouts ne sont pas indiqués.\r\n\r\nCe module permet d'afficher les boutons renvoyant à SWITCH edu-ID.\r\n\r\nFONCTIONNALITES:\r\n- Mettre l'EPFL en tête des possibilités de retrait.\r\n- Afficher les messages personnalisés pour les frais.\r\n\r\n*/\r\n\r\n angular\r\n .module('epflCourierInfo', [])\r\n\r\n .controller('CourierInfoController', ['$filter', '$element', function ($filter, $element, $compile, $scope, $rootScope) {\r\n var vm = this;\r\n\r\n //shortcut for convenience\r\n vm.form = $element[0].parentElement;\r\n\r\n //function for inserting block\r\n vm.$doCheck = function() {\r\n let form = false;\r\n let formLength = 2;\r\n // console.log(vm.form);\r\n if (vm.form.children[0].children[1] !== undefined && (vm.form.children[0].children[1].children[0] !== undefined || vm.typeFeeAlert()=='costWarningPEB')) {\r\n form = vm.form.children[0].children[1].children[0];\r\n if (vm.typeFeeAlert()=='costWarningPEB'){\r\n formLength = 3;\r\n }\r\n }\r\n else if (vm.form.children[0].children[0] !== undefined && vm.form.children[0].children[0].children[0] !== undefined) {\r\n form = vm.form.children[0].children[0].children[0];\r\n formLength = 3;\r\n }\r\n // console.log(vm.typeFeeAlert());\r\n\r\n //create and insert info block if not present\r\n // if (form){\r\n // // console.log('---' + String(formLength) + ' - ' + String(form.children.length));}\r\n if (form && form.children.length == formLength && form.children.length > 1 || vm.hasOwnProperty('currentTypeFeeAlert') &&\r\n vm.currentTypeFeeAlert != vm.typeFeeAlert()) {\r\n // console.log('cccc---' + String(formLength) + ' - ' + String(form.children.length));\r\n vm.currentTypeFeeAlert = vm.typeFeeAlert();\r\n var htmlwarning = `

${vm.getFeeAlert()}

`;\r\n if (vm.typeFeeAlert()=='costWarningScan') {\r\n var txt = $filter('customTranslate')('illButton');\r\n if (vm.get_peb_button()){\r\n var fn = `javascript:(function() {\r\n for (var elem of document.getElementsByTagName('span')) {\r\n if (elem.getAttribute('translate') === 'AlmaResourceSharing' &&\r\n elem.parentNode.className.indexOf('greenbutton') === -1)\r\n {\r\n elem.click();\r\n break;\r\n }\r\n };})()`;}\r\n else {\r\n var fn = `javascript:(function() {window.location.href = window.location.origin + '/discovery/blankIll?vid=${vm.parentCtrl.vid}'})()`;\r\n }\r\n\r\n\r\n htmlwarning += `

${txt}

`;\r\n\r\n }\r\n htmlwarning += `

${vm.parentCtrl.$translate.instant('customize.fullview.feesLinkText')}

`;\r\n var htmlcompiled = angular.element(htmlwarning)[0];\r\n\r\n // console.log('---' + String(formLength) + ' - ' + String(form.children.length));\r\n if (form.children.length == formLength) {\r\n // console.log('---' + String(formLength) + ' - ' + String(form.children.length));\r\n form.insertBefore(htmlcompiled, form.children[formLength - 1]);\r\n } else {\r\n // console.log(String(formLength) + ' - ' + String(form.children.length));\r\n form.children[form.children.length - 2].replaceWith(htmlcompiled);\r\n }\r\n }\r\n }\r\n\r\n // Remonte l'EPFL dans la liste des bibliothèques\r\n Object.defineProperty(vm.parentCtrl, \"form\", {\r\n configurable: !0,\r\n get: function(){\r\n // Mettre l'EPFL en première position\r\n var form = this.getFilteredForm(['label', 'multiLabel'], false);\r\n if (!vm.hasOwnProperty('pickupLocationsListOrdered')){\r\n for (var i = 0; i < form.length; i++){\r\n if (form[i].key == 'pickupInstitution'){\r\n function compare( a, b ){\r\n var onTopInstitutions = ['41SLSP_EPF', '41SLSP_EPFL'];\r\n a = onTopInstitutions.indexOf(a.value);\r\n b = onTopInstitutions.indexOf(b.value);\r\n if (a == b) {return 0};\r\n return a < b ? 1 : -1;\r\n }\r\n form[i].options.sort(compare);\r\n vm['pickupLocationsListOrdered'] = true;\r\n }\r\n }\r\n }\r\n return form;\r\n }\r\n }\r\n );\r\n\r\n // Vérifie si l'EPFL est la provenance de l'exemplaire sélectionné\r\n vm.isEPFL = function() {\r\n return vm.parentCtrl.requestService && vm.parentCtrl.requestService._service['link-to-service'].indexOf('institution=41SLSP_EPF') > 0 ? true : false;\r\n }\r\n\r\n vm.linkBase = \"https:\\/\\/slsp.ch\\/fees\";\r\n\r\n // Personnalisation du message des frais\r\n vm.typeFeeAlert = function() {\r\n // console.log(vm.parentCtrl.requestHeader);\r\n if (['almaRequest.header', 'almaRequestOther.header', 'almaItemRequest.header'].includes(vm.parentCtrl.requestHeader)) {\r\n return 'costWarningNetworkLoan'; // $filter('customTranslate')(costWarningNetworkLoan');\r\n } else if (['almaDigitization.header',\r\n 'almaDigitizationOther.header',\r\n 'almaItemDigitization.header']\r\n .includes(vm.parentCtrl.requestHeader)) {\r\n return vm.isEPFL() ? 'costWarningScanEPFL' : 'costWarningScan';\r\n } else if (vm.parentCtrl.requestHeader === 'almaResourceSharing.header') {\r\n return 'costWarningPEB';\r\n } else {\r\n return 'costWarningGeneral';\r\n }\r\n }\r\n vm.getFeeAlert = function() {\r\n // console.log(vm.typeFeeAlert());\r\n return $filter('customTranslate')(vm.typeFeeAlert());\r\n }\r\n\r\n // Récupère le bouton PEB de la page afin de simuler un clic dessus\r\n vm.get_peb_button = function(){\r\n var allElements = document.getElementsByTagName('span');\r\n for (var i = 0, n = allElements.length; i < n; i++) {\r\n if (allElements[i].getAttribute('translate') === 'AlmaResourceSharing' &&\r\n allElements[i].parentNode.className.indexOf('greenbutton') === -1)\r\n {\r\n return allElements[i];\r\n }\r\n }\r\n\r\n }\r\n\r\n // Fonction simulant un clic sur le bouton PEB quand on clique sur les\r\n // frais.\r\n vm.click_peb = function(){\r\n var button = vm.get_peb_button();\r\n if (button) {\r\n button.click();\r\n } else {\r\n window.location.href = window.location.origin + '/discovery/blankIll?vid=' + vm.parentCtrl.vid;\r\n }\r\n }\r\n // console.log(vm);\r\n\r\n }])\r\n\r\n .component('prmRequestAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'CourierInfoController',\r\n });\r\n","require('./js/epfl-edit-personal-details.module.js')\r\nmodule.exports = 'epflEditPersonalDetails'\r\n","/* --------------------- */\r\n/* - Début ajouts EPFL - */\r\n/*\r\n\r\nCe module permet d'afficher les boutons renvoyant à SWITCH edu-ID.\r\n\r\n- \"this\" a été remplacé partout par une variable \"vm\". C'est indispensable\r\npour garder la bonne référence dans les promesses.\r\n- Les boutons sont ajoutés avant l'adresse ce qui ne peut pas passer par\r\nun template\r\n\r\n*/\r\n/* - Fin ajouts EPFL - */\r\n/* ------------------- */\r\n\r\n\r\nangular\r\n .module('epflEditPersonalDetails', [])\r\n\r\n\r\n\r\n //------------------------------ edit personal details ---------------------------\r\n\r\n .controller('EditPersonalDetailsController', ['$scope', '$element', '$translate' , function ($scope, $element, $translate) {\r\n var vm = this; // Ajout EPFL\r\n let lang = 'en';\r\n let sms = $scope.$root.$$childHead.$ctrl.userSessionManagerService;\r\n if (sms) {\r\n lang = sms.getInterfaceLanguage();\r\n }\r\n\r\n vm.detailsBaseEdu = \"https:\\/\\/eduid.ch\\/web\\/change-account-data\\/2\\/?lang=\" + lang;\r\n vm.detailsBaseReg = \"https:\\/\\/registration.slsp.ch\\/library-card\\/?lang=\" + lang;\r\n vm.exclude = ['STAFF', '11', '12', '13', '14', '15', '16', '91', '92'];\r\n vm.grpA = ['11', '91', '92']; // comptes locaux\r\n vm.grpB = ['12', '13', '14', '15', '16']; // comptes institutionnels\r\n\r\n\r\n vm.getPatronGrp = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let patron = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (!vm.exclude.includes(patron)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n vm.grpLabelA = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelA = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (vm.grpA.includes(labelA)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n vm.grpLabelB = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelB = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (vm.grpB.includes(labelB)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n /* --------------------- */\r\n /* - Début ajouts EPFL - */\r\n\r\n vm.test = 0;\r\n vm.testPersonalInfo = function() {\r\n /* Constructeur de la promesse. Cette promess échoue quand\r\n les informations utilisateur ne sont pas ou pas encore\r\n disponible. */\r\n return new Promise((persInfoAv, persInfoNotAv) => {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n persInfoAv();\r\n } else {\r\n persInfoNotAv();\r\n }\r\n })\r\n }\r\n vm.persInfoAv = function() {\r\n /* Succès de la promesse: le groupe utilisateur a été trouvé et\r\n les boutons adéquats s'afichent. */\r\n let html = '
';\r\n if (vm.grpLabelA()) {\r\n html += `${vm.parentCtrl.$translate.instant('customized.libraries.details')}`;\r\n }\r\n else if (vm.grpLabelB()) {\r\n html += `${vm.parentCtrl.$translate.instant('customized.slsp.details')}`;\r\n }\r\n else if (vm.getPatronGrp) {\r\n html += `\r\n \r\n \r\n \r\n \r\n \r\n \r\n ${vm.parentCtrl.$translate.instant('customized.personal.details')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ${vm.parentCtrl.$translate.instant('customized.libcard.number')}\r\n \r\n `\r\n }\r\n\r\n html += '
';\r\n var htmlcompiled = angular.element(html)[0];\r\n var place_to_insert = $element[0].parentElement.children[1].children[0];\r\n place_to_insert.insertBefore(htmlcompiled, place_to_insert.children[1]);\r\n }\r\n vm.persInfoNotAv = function() {\r\n vm.test += 1;\r\n if (vm.test < 10) {\r\n /* En cas d'échec, on attend 0.5 second et on relance le test */\r\n setTimeout(() => vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv), 500);\r\n }\r\n }\r\n if (vm.test === 0) {\r\n /* Premier lancement du test pour voir si les infos utilisateur\r\n sont disponibles */\r\n vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv);\r\n }\r\n /* - Fin ajouts EPFL - */\r\n /* ------------------- */\r\n\r\n\r\n }])\r\n\r\n\r\n .component('prmPersonalInfoAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'EditPersonalDetailsController',\r\n /* Suppression EPFL */\r\n // template: '

'\r\n });\r\n","require('./js/slsp-ill-signin-order-alert.module.js')\r\nmodule.exports = 'slspIllSigninOrderAlert'","//--------ILL Signin Order - if Alert Message ---------------------------------------\r\n\r\nangular\r\n .module('slspIllSigninOrderAlert', [])\r\n\r\n .controller('AlertMsgController', ['$scope', function ($scope) {\r\n var vm = this;\r\n vm.getAlert = getAlert\r\n\r\n function getAlert() {\r\n var ga = vm.parentCtrl.almaHowToGetitService.reqAlert._htmlMsg;\r\n var myEl2 = angular.element(document.querySelector('primo-explore'));\r\n\r\n if (ga.length > 0) {\r\n return myEl2.addClass('alert');\r\n\r\n }\r\n else {\r\n\r\n return myEl2.removeClass('alert');\r\n }\r\n }\r\n }])\r\n\r\n .component('almaHowovpAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'AlertMsgController',\r\n template: '
{{$ctrl.getAlert()}}
'\r\n });\r\n","require('./js/epfl-ill-signin-order-logged-out.module.js')\r\nmodule.exports = 'epflIllSigninOrderLoggedOut'\r\n"," //--------ILL Signin Order - if logged out ---------------------------------------\r\n\r\nangular\r\n .module('epflIllSigninOrderLoggedOut', [])\r\n\r\n .service('userService', ['jwtHelper', function (jwtHelper) {\r\n this.get_ip = function() {\r\n var jwt = sessionStorage.getItem('primoExploreJwt');\r\n if (!jwt) {\r\n return;\r\n }\r\n return jwtHelper.decodeToken(jwt).userIp;\r\n }\r\n this.isGuest = function () {\r\n var jwt = sessionStorage.getItem('primoExploreJwt');\r\n if (!jwt) {\r\n return true;\r\n }\r\n var decodedToken = jwtHelper.decodeToken(jwt);\r\n let userName = decodedToken.userGroup !== 'GUEST' ? decodedToken.userName : '';\r\n if (userName) {\r\n return false\r\n }\r\n else {\r\n return true;\r\n }\r\n }\r\n /* ---------------------------------- */\r\n /* - Ajout pour vérifier si IP EPFL - */\r\n this.isEpflIP = function () {\r\n var jwt = sessionStorage.getItem('primoExploreJwt');\r\n if (!jwt) {\r\n return;\r\n }\r\n const userIP = jwtHelper.decodeToken(jwt).userIp;\r\n if (userIP) {\r\n const regex = /128\\.17([89])\\.(\\d{1,3})\\./;\r\n const found = userIP.match(regex);\r\n if (found && (found[1] == '8' || parseInt(found[2])>=128)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n /* --------- Fin de l'ajout --------- */\r\n /* ---------------------------------- */\r\n\r\n }])\r\n\r\n .controller('IllBoxController', ['$scope', 'userService', function ($scope, userService) {\r\n\r\n $scope.usrNme = userService.isGuest();\r\n\r\n if ($scope.usrNme == true) {\r\n var myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.addClass('logged-out')\r\n }\r\n\r\n else {\r\n var myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.removeClass('logged-out');\r\n }\r\n\r\n\r\n }])\r\n\r\n .component('prmUserAreaExpandableAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'IllBoxController',\r\n template: ''\r\n });\r\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["node_modules/browser-pack/_prelude.js","primo-explore/custom/src/js/briefview/availabilityline.component.js","primo-explore/custom/src/js/briefview/collection_link.component.js","primo-explore/custom/src/js/briefview/collection_link.controller.js","primo-explore/custom/src/js/briefview/index.js","primo-explore/custom/src/js/briefview/pdf_article_link.component.js","primo-explore/custom/src/js/briefview/pdf_article_link.controller.js","primo-explore/custom/src/js/briefview/publisher_link.component.js","primo-explore/custom/src/js/briefview/publisher_link.controller.js","primo-explore/custom/src/js/filters/custom_translate.filter.js","primo-explore/custom/src/js/fullView/almaviewit.component.js","primo-explore/custom/src/js/fullView/epfl_almaviewit.component.js","primo-explore/custom/src/js/fullView/epfl_almaviewit.controller.js","primo-explore/custom/src/js/fullView/index.js","primo-explore/custom/src/js/homepage/alert_message.js","primo-explore/custom/src/js/homepage/index.js","primo-explore/custom/src/js/homepage/mainmenu.component.js","primo-explore/custom/src/js/homepage/searchbar.component.js","primo-explore/custom/src/js/homepage/topbar.component.js","primo-explore/custom/src/js/main.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-after.module.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-filter/eth-location-items-filter.controller.js","primo-explore/custom/src/js/slsp/prm-location-items-after/eth-location-items-filter/eth-location-items-filter.module.js","primo-explore/custom/src/js/slsp/prm-location-items-after/slsp-i-button/epfl-i-button.controller.js","primo-explore/custom/src/js/slsp/prm-location-items-after/slsp-i-button/epfl-i-button.module.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-after.module.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-filter/eth-locations-filter.controller.js","primo-explore/custom/src/js/slsp/prm-locations-after/eth-locations-filter/eth-locations-filter.module.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js","primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js","primo-explore/custom/src/js/slsp/slsp-archives-htgi/index.js","primo-explore/custom/src/js/slsp/slsp-archives-htgi/js/slsp-archives-htgi.module.js","primo-explore/custom/src/js/slsp/slsp-archives-viewit/index.js","primo-explore/custom/src/js/slsp/slsp-archives-viewit/js/slsp-archives-viewit.module.js","primo-explore/custom/src/js/slsp/slsp-courier-info/index.js","primo-explore/custom/src/js/slsp/slsp-courier-info/js/epfl-courier-info.module.js","primo-explore/custom/src/js/slsp/slsp-edit-personal-details/index.js","primo-explore/custom/src/js/slsp/slsp-edit-personal-details/js/epfl-edit-personal-details.module.js","primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/index.js","primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-alert/index.js","primo-explore/custom/src/js/slsp/slsp-ill-signin-order-alert/js/slsp-ill-signin-order-alert.module.js"],"names":["r","e","n","t","o","i","f","c","require","u","a","Error","code","p","exports","call","length","1","module","bindings","parentCtrl","template","afterCtrl","controller","$filter","$http","this","vm","get_collection_url","hasOwnProperty","collection_url","series","result","pnx","display","Array","isArray","_iteratorNormalCompletion","_didIteratorError","_iteratorError","undefined","_step","_iterator","Symbol","iterator","next","done","m","value","match","$stateParams","lang","collection_title","window","location","origin","vid","tab","context","err","return","briefview_module","angular","component","slspIllSigninOrderLoggedOutService","parse_doi","txt","is_epfl_IP","isEpflIP","get_doi","addata","doi","control","recordtype","identifier","check_doi","set_url_pdf","url","method","then","response","status","pdf_link","data","fullTextFile","$element","is_pc","is_ebook","indexOf","type","toLowerCase","is_article","is_data_available","delivery","is_fulltext","availability","suppress_original_link","parentElement","children","replaceWith","is_publisher_url","checked","isFullView","recordid","post","doc","publisher_url","electronicServices","serviceUrl","GetIt1","_typeof","rank","links","link","_url","filter","$translate","trad","costWarningScan","fr","en","de","it","costWarningScanEPFL","costWarningNetworkLoan","costWarningPEB","mainTitle","subTitle","switchEduID","illButton","feedbackLink","vpnMSG","feedbackLinkMSG","pdfAccess","seriesLink","includes","use","userService","get_txt","no_report_link","item","openaccess","oa","user_ip","get_ip","mmsId","title","creationdate","creator","join","ident","replace","substring","userAgent","navigator","subject","body","encodeURIComponent","fullview_module","active","begin","end","homepage_module","controllerAs","$doCheck","document","readyState","modified","elem","querySelector","removeAttribute","setAttribute","alert","d_now","Date","now","showTabsAndScopes","$location","absUrl","split","configurationUtil","_ethLocationItemsFilter","_epflIButton","ethLocationItemsAfterModule","requires","push","ethLocationItemsFilterModule","name","epflIButtonModule","ethLocationItemsFilterController","$timeout","$scope","_classCallCheck","_this","$watch","newValue","oldValue","scope","$ctrl","isLocationsFilterVisible","currentItemsArray","console","error","message","$inject","epflIButtonController","getLibrary","currLoc","librarycodeTranslation","biblinkText","biblinkBase","getLibraryUrl","loc","libraryCode","view","_ethLocationsFilter","ethLocationsAfterModule","ethLocationsFilterModule","ethLocationsFilterController","bcuLangSwitchController","$window","$parent","parent","languages","changeLanguage","changeLangService","addLangParamToUrl","i18nService","setLanguage","$state","go","current","reload","_bcuLangSwitch","bcuLangSwitchModule","slspIllSigninOrderLoggedOutController","usrNme","isGuest","element","removeClass","addClass","_slspIllSigninOrderLoggedOut","_slspIllSigninOrderLoggedOut2","slspIllSigninOrderLoggedOutModule","factory","jwtHelper","getDecodedToken","sessionStorage","jwt","getItem","decodeToken","decodedToken","userGroup","userName","userIP","userIp","found","parseInt","slspUserAreaExpandableAfterModule","$onInit","source","getElementById","classList","add","sourceid","originalsourceid","guid","lastIndexOf","l","isLinktoOnline","translation","fullView","text","changeButton","changeButtonText","availabilityLine","button","html","$compile","$rootScope","form","formLength","typeFeeAlert","currentTypeFeeAlert","htmlwarning","getFeeAlert","get_peb_button","fn","instant","htmlcompiled","insertBefore","Object","defineProperty","configurable","get","getFilteredForm","key","options","sort","b","onTopInstitutions","isEPFL","requestService","_service","linkBase","requestHeader","allElements","getElementsByTagName","getAttribute","parentNode","className","click_peb","click","href","sms","$root","$$childHead","userSessionManagerService","getInterfaceLanguage","detailsBaseEdu","detailsBaseReg","exclude","grpA","grpB","getPatronGrp","personalInfoService","personalInfo","patron","patronstatus","registration","institution","patronstatuscode","grpLabelA","labelA","grpLabelB","labelB","test","testPersonalInfo","Promise","persInfoAv","persInfoNotAv","place_to_insert","setTimeout","config","$httpProvider","interceptors","$q","request","_request","requestError","reject","responseError","_response","interfaceLanguage","injector","getUserLanguage","appConfig","list_of_hold_states","keys","list_of_hold_states_regexp","RegExp","map","holds","hold","holdstatus","cancel","log","getAlert","ga","almaHowToGetitService","reqAlert","_htmlMsg","myEl2"],"mappings":"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","file":"custom.js","sourcesContent":["(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error(\"Cannot find module '\"+i+\"'\");throw a.code=\"MODULE_NOT_FOUND\",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u=\"function\"==typeof require&&require,i=0;i\r\n \r\n \r\n `//availabilitylineHtml,\r\n}\r\n","\"use strict\";\r\n\r\nimport {collectionLinkHtml} from './collection_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require ('./collection_link.controller.js'),\r\n template: collectionLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', function($filter, $http) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Obtenir l'url d'une série.\r\n vm.get_collection_url = function(){\r\n if (vm.hasOwnProperty('collection_url')){\r\n return vm.collection_url;\r\n }\r\n try {\r\n var series = vm.parentCtrl.result.pnx.display.series;\r\n if (!Array.isArray(series)) {throw new Error('Notice without series');}\r\n } catch (e) {\r\n return null;\r\n }\r\n for (const serie of series){\r\n\r\n var m = serie.match(/\\$\\$Q(.*)\\$\\$Z(99\\d{16})/);\r\n\r\n if (m){\r\n\r\n if (!vm.parentCtrl.$stateParams.lang) {\r\n var lang = '';\r\n } else {\r\n var lang = `&lang=${vm.parentCtrl.$stateParams.lang}`;\r\n }\r\n vm.collection_title = m[1];\r\n vm.collection_url = `${ window.location.origin }/discovery/fulldisplay?vid=${ vm.parentCtrl.$stateParams.vid }&tab=${ vm.parentCtrl.$stateParams.tab }&docid=alma${ m[2] }&context=${ vm.parentCtrl.$stateParams.context }${ lang }`;\r\n return vm.collection_url;\r\n }\r\n\r\n }\r\n }\r\n\r\n // console.log(vm);\r\n}]\r\n","/* Importe en tant que compasant l'ensemble des éléments personnalisés EPFL.\r\nCela comporte l'affichage des collections, les liens directs vers le pdf,\r\net le lien direct vers le site de l'éditeur.\r\n*/\r\nvar briefview_module = angular.module('briefviewModule', ['angularLoad']);\r\nbriefview_module.component('prmSearchResultAvailabilityLineAfter', require('./availabilityline.component.js'));\r\nbriefview_module.component('prmPdfArticleLink', require('./pdf_article_link.component.js'));\r\nbriefview_module.component('prmPublisherLink', require('./publisher_link.component.js'));\r\nbriefview_module.component('prmCollectionLink', require('./collection_link.component.js'));\r\n","\"use strict\";\r\n\r\nimport {pdfArticleLinkHtml} from './pdf_article_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require('./pdf_article_link.controller.js'),\r\n template: pdfArticleLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', 'slspIllSigninOrderLoggedOutService', function($filter, $http, slspIllSigninOrderLoggedOutService) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Extrait le DOI brut depuis une chaîne de caractères\r\n function parse_doi(txt){\r\n var re = /10\\.\\d{4,9}\\/[-._;()/:A-Z0-9]+/i;\r\n var m = txt.match(re);\r\n if (m){\r\n return m[0]\r\n }\r\n }\r\n\r\n /* Teste si l'utilisateur est sur le range EPFL afin de décider s'il faut\r\n faut ou non afficher le lien direct */\r\n vm.is_epfl_IP = slspIllSigninOrderLoggedOutService.isEpflIP();\r\n\r\n vm.get_doi = function(){\r\n if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){\r\n var pnx = vm.parentCtrl.result.pnx;\r\n\r\n // Recherche dans la section addata\r\n if ('addata' in pnx && 'doi' in pnx.addata && parse_doi(pnx.addata.doi[0]) && pnx.control.hasOwnProperty('recordtype') && pnx.control.recordtype[0]==='article') {\r\n return parse_doi(pnx.addata.doi[0])\r\n }\r\n\r\n // Recherche dans la section display\r\n if ('display' in pnx && 'identifier' in pnx.display) {\r\n for (const identifier of pnx.display.identifier){\r\n if (parse_doi(identifier)){\r\n return parse_doi(identifier)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n\r\n vm.check_doi = function(){\r\n if (!vm.hasOwnProperty('doi')){\r\n if (vm.parentCtrl.hasOwnProperty('result') && vm.parentCtrl.result.hasOwnProperty('pnx')){\r\n if (vm.get_doi()){\r\n vm.doi = vm.get_doi();\r\n vm.set_url_pdf()\r\n\r\n } else {\r\n vm.doi = null;\r\n }\r\n }\r\n }\r\n if (vm.hasOwnProperty('pdf_link')) {\r\n return true\r\n }\r\n return false\r\n }\r\n vm.set_url_pdf = function(){\r\n var url = `https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/${vm.doi}?access_token=adc54dee-c6a6-4b99-a917-2ed400f1f2d3`;\r\n $http({\r\n method: 'GET',\r\n url: url\r\n }).then(function successCallback(response) {\r\n // console.log(response);\r\n if (response.status === 200) {\r\n try{\r\n var pdf_link = response.data.data.fullTextFile;\r\n } catch(e){\r\n var pdf_link = '';\r\n }\r\n if (pdf_link.length > 0) {\r\n vm.pdf_link = pdf_link;\r\n }\r\n }\r\n // console.log(vm.pdf_link);\r\n }, function errorCallback(response) {\r\n vm.doi = null;\r\n });\r\n\r\n }\r\n\r\n // console.log(vm);\r\n}]\r\n","\"use strict\";\r\n\r\nimport {publisherLinkHtml} from './publisher_link.html';\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require ('./publisher_link.controller.js'),\r\n template: publisherLinkHtml,\r\n}\r\n","module.exports = ['$filter', '$http', 'slspIllSigninOrderLoggedOutService', '$element', function($filter, $http, slspIllSigninOrderLoggedOutService, $element) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Utilise le service du module \\js\\slsp\\slsp-ill-signin-order-logged-out\\js\\epfl-ill-signin-order-logged-out.module.js\r\n vm.is_epfl_IP = slspIllSigninOrderLoggedOutService.isEpflIP();\r\n\r\n // Vérifie si une ressource vient de CDI. L'attribut reste PC comme dans Primo Central l'ancien système.\r\n vm.is_pc = function(){\r\n return vm.parentCtrl.result.context === 'PC';\r\n }\r\n\r\n // Vérifie si le record est de type livre. Le lien direct vers l'éditeur est pertinent dans ce cas.\r\n vm.is_ebook = function(){\r\n if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){\r\n return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('book')!==-1;\r\n } else if (vm.parentCtrl.result.pnx.display.hasOwnProperty('type')){\r\n return vm.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf('book')!==-1;\r\n } else {\r\n return false;\r\n }\r\n }\r\n\r\n // Vérifie si la ressource est un article. Le lien direct vers l'éditeur est pertinent pour les articles.\r\n vm.is_article = function(){\r\n if (vm.parentCtrl.result.pnx.control.hasOwnProperty('recordtype')){\r\n return vm.parentCtrl.result.pnx.control.recordtype[0].indexOf('article')!==-1;\r\n } else {\r\n return false;\r\n }\r\n\r\n }\r\n\r\n // Vérifie si le PNX est chargé\r\n vm.is_data_available = function(){\r\n return vm.parentCtrl.result && vm.parentCtrl.result.pnx && vm.parentCtrl.result.delivery;\r\n }\r\n\r\n // Vérifie si un accès fulltext est disponible\r\n vm.is_fulltext = function(){\r\n let availability = vm.parentCtrl.result.delivery.availability\r\n return availability.indexOf('fulltext')!==-1 || availability.indexOf('not_restricted')!==-1;\r\n }\r\n\r\n // Supprime le lien original\r\n vm.suppress_original_link = function(){\r\n $element[0].parentElement.parentElement.children[0].replaceWith('');\r\n }\r\n\r\n /* Définit l'url de l'éditeur si celle-ci est disponible à la place de\r\n l'affichage de la notice détaillée.\r\n La fonction retourne true si l'url est modifiée */\r\n vm.is_publisher_url = function(){\r\n /* L'url n'est modifié que pour les ebooks et les articles. De plus,\r\n il faut être dans le range IP de l'EPFL */\r\n if (!vm.checked && vm.is_data_available() && vm.is_epfl_IP && (vm.is_ebook() || vm.is_article())) {\r\n\r\n // L'adresse du service est différente selon que la ressource est dans cdi ou non (vm.is_pc())\r\n if (!vm.parentCtrl.isFullView && vm.is_fulltext() && vm.is_pc()){\r\n vm.checked = true;\r\n /* Les données ne contiennent pas des informations détaillées avec le lien direct.\r\n Il faut donc utiliser un service pour obtenir ces données. */\r\n let url = `${ window.location.origin }/primaws/rest/pub/pcDelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`;\r\n $http.post(url, {doc:vm.parentCtrl.result}).then((e) => {\r\n vm.publisher_url = e.data.delivery.electronicServices[0].serviceUrl;\r\n vm.suppress_original_link();\r\n });\r\n } else if (!vm.parentCtrl.isFullView && vm.is_fulltext() && !vm.is_pc()){\r\n vm.checked = true;\r\n let url = `${ window.location.origin }/primaws/rest/pub/edelivery/${vm.parentCtrl.result.pnx.control.recordid[0]}?vid=${vm.parentCtrl.$stateParams.vid}`;\r\n $http.post(url, {doc:vm.parentCtrl.result}).then((e) => {\r\n vm.publisher_url = e.data.electronicServices[0].serviceUrl;\r\n vm.suppress_original_link();\r\n })\r\n /* Dans la vue détaillée, l'url est accessible sans avoir à interroger le service */\r\n } else if (vm.parentCtrl.isFullView && vm.parentCtrl.result.delivery.GetIt1 && typeof(vm.parentCtrl.result.delivery.GetIt1)==='object') {\r\n vm.checked = true;\r\n let rank = vm.parentCtrl.result.delivery.availability.indexOf('not_restricted')\r\n if (rank !== -1) {\r\n vm.publisher_url = vm.parentCtrl.result.delivery.GetIt1[0].links[rank].link;\r\n vm.suppress_original_link();\r\n }\r\n } else if (!vm.is_fulltext()){\r\n vm.checked = true;\r\n }\r\n }\r\n return vm.hasOwnProperty('publisher_url');\r\n }\r\n // console.log('Publisher_link:');\r\n // console.log(vm);\r\n // console.log('---------------');\r\n}]\r\n","\"use strict\";\r\n\r\n/***********************/\r\n/* FILTRE : traduction */\r\n/***********************/\r\n\r\n/*\r\n OBJECTIF: traduire des éléments, tant des urls que du texte.\r\n UTILISATION:\r\n - Dans le template:\r\n 1. comme un filtre: {{ clé | customTranslate }}\r\n - Dans un controlleur:\r\n Même si les filtres sont d'abord prévus pour être utilisés dans le\r\n template, on peut les appeler dans les controlleurs.\r\n 1. Ajouter le service dans l'en-tête du controlleur\r\n 2. Appeler le service avec la fonction $filter\r\n EXEMPLE:\r\n controller:function($http, $filter){...\r\n var traduction = $filter('customTranslate')('cleTrad');\r\n ...}\r\n CONFIGURATION:\r\n L'ajout de traduction se fait à travers des objets. La clé indique le\r\n terme à utiliser dans le template ou le controlleur pour ensuite\r\n renvoyer la traduction. Les noms associés n'appaaraissent donc pas tels\r\n quels. La structure de chaque élément traduit disponible est comme suit:\r\n clé1:{\r\n fr: traductionFrançaise\r\n en: traductionAnglaise\r\n },\r\n clé2:{\r\n fr: traductionFrançaise\r\n en: traductionAnglaise\r\n }\r\n*/\r\nangular\r\n .module('customTranslateFilter', [])\r\n .filter('customTranslate', ['$translate', function($translate){\r\n return function(txt){\r\n var trad = {\r\n\r\n costWarningScan:{\r\n fr: \"Service payant: les collaborateurs et les étudiants de l’EPFL peuvent bénéficier de ce service gratuitement, en utilisant le formulaire:\",\r\n en: \"Fee-based service: EPFL employees and students can benefit from this service free of charge by using the form:\",\r\n de: \"Kostenpflichtiger Service: Mitarbeitern und Studenten der EPFL steht dieser Dienst über das Fernleihe-Formular gratis zur Verfügung.\",\r\n it: \"Servizio a pagamento: I dipendenti e gli studenti dell'EPFL possono usufruire gratuitamente di questo servizio utilizzando il modulo:\"\r\n },\r\n costWarningScanEPFL:{\r\n fr: \"Service gratuit pour les collaborateurs et les étudiants EPFL.\",\r\n en: \"Free of charge for EPFL staff and students.\",\r\n de: \"Service für Mitarbeiter und Studenten der EPFL kostenlos\",\r\n it: \"Servizio gratuito per i dipendenti e gli studenti dell’EPFL.\"\r\n },\r\n costWarningNetworkLoan:{\r\n fr: \"Service gratuit en cas de retrait à la Bibliothèque de l’EPFL.\",\r\n en: \"Free of charge if withdrawal at the EPFL Library.\",\r\n de: \"Service bei Abholung in der EPFL-Bibliothek kostenlos.\",\r\n it: \"Servizio gratuito in caso di ritiro alla Biblioteca dell’EPFL\"\r\n },\r\n costWarningPEB:{\r\n fr: \"Service gratuit pour les collaborateurs et les étudiants de l’EPFL. Avant de passer une commande d’un document physique via le prêt entre bibliothèques, merci de vous assurer que ce document n'est pas disponible dans d’autres bibliothèques du réseau SLSP dans swisscovery.\",\r\n en: \"Free of charge for EPFL staff and students. Before placing an order for a physical document via the interlibrary loan, please make sure that this document is not available in other SLSP network libraries on swisscovery.\",\r\n de: \"Kostenloser Service für Mitarbeiter und Studenten der EPFL. Bevor Sie ein Medium über die Fernleihe bestellen, vergewissern Sie sich bitte zunächst in swisscovery, dass es nicht in einer anderen Bibliothek des SLSP-Netzwerks verfügbar ist.\",\r\n it: \"Servizio gratuito per i dipendenti e gli studenti dell’EPFL. Prima di ordinare un documento cartaceo tramite il prestito interbibliotecario, assicuratevi che questo documento non sia disponibile in altre biblioteche della rete SLSP in swisscovery.\"\r\n },\r\n mainTitle:{\r\n fr: \"Catalogue BEAST\",\r\n en: \"BEAST discovery tool\",\r\n de: \"BEAST Wissensportal\",\r\n it: \"Catalogo BEAST\"\r\n },\r\n subTitle:{\r\n fr: \"Le point d\\'accès à toutes les ressources de la Bibliothèque de l\\'EPFL\",\r\n en: \"The access portal to all the resources of the EPFL Library\",\r\n de: \"Der Zugangspunkt zu allen Ressourcen der EPFL Bibliothek\",\r\n it: \"Il punto d’accesso a tutte le risorse della Biblioteca dell’EPFL\"\r\n },\r\n switchEduID:{\r\n fr: \"Modifier vos informations personnelles sur\",\r\n en: \"Change your personal data on\",\r\n de: \"Ändern Sie Ihre persönlichen Daten auf\",\r\n it: \"Modifica i tuoi dati personali sul\"\r\n },\r\n illButton:{\r\n fr: \"Prêt entre bibliothèques (PEB)\",\r\n en: \"Inter Library Loan (ILL)\",\r\n de: \"Fernleihe\",\r\n it: \"Prestito interbibliotecario\"\r\n },\r\n feedbackLink:{\r\n fr: \"Signaler un problème d'accès\",\r\n en: \"Report an access problem\",\r\n de: \"Zugriffsproblem melden\",\r\n it: \"Segnalare un problema di accesso\"\r\n },\r\n vpnMSG:{\r\n fr: \"Les ressources électroniques sont accessibles depuis tous les postes de l’EPFL, et à distance via le VPN EPFL.\",\r\n en: \"Electronic resources are accessible from all EPFL workstations, and remotely via the EPFL VPN.\",\r\n de: \"Elektronische Informationsressourcen sind an allen EPFL-Arbeitsplätzen und per EPFL VPN abrufbar.\",\r\n it: \"Le risorse elettroniche sono accessibili da tutte le postazioni di lavoro dell'EPFL e a distanza tramite VPN EPFL.\"\r\n },\r\n // vpnLink:{\r\n // fr: \"https://www.epfl.ch/campus/services/ressources-informatiques/network-services-reseau/acces-intranet-a-distance/clients-vpn-disponibles/\",\r\n // en: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\",\r\n // de: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\",\r\n // it: \"https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/\"\r\n // },\r\n feedbackLinkMSG:{\r\n fr: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n en: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n de: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\",\r\n it: \"I have a problem accessing the electronic resource below. Please let me know when the access will be restored.\"\r\n },\r\n pdfAccess:{\r\n fr: \"Accès direct au pdf\",\r\n en: \"Direct access to the pdf\",\r\n de: \"Direct access to the pdf\",\r\n it: \"Direct access to the pdf\"\r\n },\r\n seriesLink:{\r\n fr: \"Collection :\",\r\n en: \"Serie:\",\r\n de: \"Serie:\",\r\n it: \"Serie:\"\r\n }\r\n };\r\n if (['en', 'fr', 'it', 'de'].includes($translate.use())) {\r\n return trad[txt][$translate.use()]\r\n } else {\r\n return trad[txt].fr\r\n }\r\n };\r\n }]);\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n\r\n Englobe un module d'archive de l'ETH et un module de l'EPFL.\r\n ETH: primo-explore\\custom\\src\\js\\slsp\\slsp-archives-viewit\\js\\slsp-archives-viewit.module.js\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n template: `
\r\n
`}\r\n","\"use strict\";\r\n\r\nimport {epfl_almaviewit_html} from './epfl_almaviewit.html'\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {afterCtrl: '<'},\r\n controller: require('./epfl_almaviewit.controller.js'),\r\n template: epfl_almaviewit_html}\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux\r\n ressources électroniques. Un message d'avertissement s'affiche quand la\r\n la personne n'est pas sur le réseau EPFL\r\n*/\r\n\r\nmodule.exports = ['$filter', 'userService', function($filter, userService) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this;\r\n\r\n vm.get_txt = function() {\r\n return $filter('customTranslate')('vpnMSG');\r\n }\r\n\r\n vm.feedbackLink = '';\r\n vm.is_epfl_IP = false;\r\n vm.no_report_link = false;\r\n\r\n // Ne pas afficher le lien s'il s'agit d'open access\r\n if (vm.parentCtrl.item.pnx.addata.openaccess && vm.parentCtrl.item.pnx.addata.openaccess[0] === 'true') {\r\n vm.no_report_link = true;\r\n }\r\n // Ne pas afficher le lien s'il s'agit d'open access (notices CDI)\r\n if (vm.parentCtrl.item.pnx.addata.oa && vm.parentCtrl.item.pnx.addata.oa[0] === 'free_for_read') {\r\n vm.no_report_link = true;\r\n }\r\n\r\n if (!vm.no_report_link){\r\n\r\n /* Obtient l'adresse ip depuis un service se trouvant dans le\r\n module \\js\\slsp\\slsp-ill-signin-order-logged-out\\js\\epfl-ill-signin-order-logged-out.module.js */\r\n vm.is_epfl_IP = userService.isEpflIP();\r\n vm.user_ip = userService.get_ip();\r\n\r\n // Récupération des métadonnées de la ressource\r\n var mmsId = vm.parentCtrl.item.pnx.control.recordid[0];\r\n var title = '';\r\n if (vm.parentCtrl.item.pnx.display.title && vm.parentCtrl.item.pnx.display.title.length > 0) {\r\n title = vm.parentCtrl.item.pnx.display.title[0];\r\n }\r\n var creationdate = '';\r\n if (vm.parentCtrl.item.pnx.display.creationdate && vm.parentCtrl.item.pnx.display.creationdate.length > 0) {\r\n creationdate = vm.parentCtrl.item.pnx.display.creationdate[0];\r\n }\r\n var creator = '';\r\n if (vm.parentCtrl.item.pnx.display.creator && vm.parentCtrl.item.pnx.display.creator.length > 0) {\r\n creator = vm.parentCtrl.item.pnx.display.creator.join(', ');\r\n }\r\n var type = '';\r\n if (vm.parentCtrl.item.pnx.display.type && vm.parentCtrl.item.pnx.display.type.length > 0) {\r\n type = vm.parentCtrl.item.pnx.display.type[0];\r\n }\r\n var identifier = '';\r\n if (vm.parentCtrl.item.pnx.display.identifier && vm.parentCtrl.item.pnx.display.identifier.length > 0) {\r\n var ident = vm.parentCtrl.item.pnx.display.identifier[0];\r\n if (ident.indexOf('ISBN') > -1) {\r\n identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\\/b>/g, '').replace(//g, '');\r\n } else if (ident.indexOf('ISSN') > -1) {\r\n identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\\/b>/g, '').replace(//g, '');\r\n } else if (ident.indexOf('ISBN') > -1) {\r\n identifier = 'ISBN: ' + ident.substring(ident.indexOf('$$V') + 3);\r\n } else if (ident.indexOf('ISSN') > -1) {\r\n identifier = 'ISSN: ' + ident.substring(ident.indexOf('$$V') + 3);\r\n }\r\n }\r\n var userAgent = navigator.userAgent;\r\n\r\n // Création de l'objet du message\r\n var subject = 'Access problem ' + mmsId + ' - \"' + title + '\"';\r\n\r\n // Création du corps du message\r\n var body = $filter('customTranslate')('feedbackLinkMSG') + '\\n\\n' + '****\\nTitle: ' + title + '\\nAuthor: ' + creator + '\\nYear: ' + creationdate + '\\nType: ' + type + '\\nDocId: ' + mmsId + '\\nIdentifier: ' + identifier + '\\nUser_agent: ' + userAgent + '\\nUserIP: ' + vm.user_ip + '\\nRange EPFL: ' + vm.is_epfl_IP + '\\n****';\r\n\r\n vm.feedbackLink = 'mailto:eresources@epfl.ch' + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body) + '&Content-Type=text/html';\r\n }\r\n\r\n }]\r\n","\r\nvar fullview_module = angular.module('fullviewModule', ['angularLoad']);\r\nfullview_module.component('prmAlmaViewitAfter', require('./almaviewit.component.js'));\r\nfullview_module.component('prmEpflAlmaViewitAfter', require('./epfl_almaviewit.component.js'));\r\n","module.exports = {active: true,\r\n txt:\r\n {fr: `
\r\n

Le réseau NEBIS a pris fin le 7 décembre 2020 pour être remplacé par un nouveau réseau plus vaste : swisscovery

\r\n
`,\r\n en: `
\r\n

The NEBIS network ended on December 7, 2020. It has been replaced by swisscovery: a new and wider network.

\r\n
`,\r\n de: `
\r\n

Das NEBIS-Netzwerk wurde am 07.12.2020 abgeschaltet und durch ein neues, grösseres Netzwerk ersetzt: swisscovery

\r\n
`,\r\n it: `
\r\n

La rete NEBIS è stata sciolta il 7 dicembre 2020 per essere sostituita da una rete piú ampia di biblioteche: swisscovery

\r\n
`},\r\n begin:\"2020-01-04T00:00:00Z\",\r\n end:\"2023-03-31T12:00:00Z\"}\r\n","var homepage_module = angular.module('homepageModule', ['angularLoad']);\r\nhomepage_module.component('prmSearchBarAfter', require('./searchbar.component.js'));\r\nhomepage_module.component('prmMainMenuAfter', require('./mainmenu.component.js'));\r\nhomepage_module.component('prmTopbarAfter', require('./topbar.component.js'));\r\n","/*\r\n DESCRIPTION:\r\n Corriger le lien du menu principal vers les bases de données.\r\n Empêche l'ouverture d'un nouvel onglet.\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n controllerAs: 'ctrl',\r\n controller: [function() {\r\n var vm = this;\r\n\r\n // Effectue cette vérification lors chaque digest.\r\n this.$doCheck = function() {\r\n // Vérifie si la page est chargée\r\n if (document.readyState === 'complete' && !vm.modified){\r\n\r\n // Essaie de trouver le menu des bases de données\r\n try{var elem = document.querySelector(\"[translate='mainmenu.label.db']\").parentElement;}\r\n catch(e){\r\n vm.modified = false;\r\n }\r\n if (elem){\r\n // Empêche l'ouverture d'un nouvel onglet en supprimant l'attribut \"target\"\r\n elem.removeAttribute('target');\r\n elem.setAttribute('aria-label', 'Databases');\r\n vm.modified = true;\r\n }\r\n }\r\n };\r\n }]\r\n};\r\n","/*\r\n OBJECTIFS:\r\n - Toujours afficher l'onglet pour modifier le scope\r\n - Afficher une alerte si les dates correspondent\r\n UTILISATION:\r\n Pour paramétrer l'alerte, il faut modifier le fichier alert_message.js (dans ce dossier)\r\n\r\n REMARQUES:\r\n
\r\n => \"ng-bind-html\" permet d'avoir du texte formatté dans la balise.\r\n*/\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n template: '
',\r\n controllerAs: 'ctrl',\r\n controller: ['$translate', function($translate){\r\n\r\n var vm = this;\r\n\r\n /********************/\r\n /* MESSAGE D'ALERTE */\r\n /********************/\r\n\r\n // récupère le fichier json avec les paramètres de l'alerte\r\n vm.alert = require('./alert_message.js');\r\n\r\n // par défaut, l'alerte n'est pas considérée comme active\r\n vm.active = false;\r\n\r\n // Vérifie dans le fichier json si une alerte est prévue\r\n if (vm.alert.active === true){\r\n\r\n // Teste si les dates correspondent pour l'affichage de l'alerte\r\n var d_now = Date.now();\r\n if ((new Date(vm.alert.begin) < d_now) && (d_now < new Date(vm.alert.end))) {\r\n // déclenche l'affichage de l'alerte\r\n vm.active = true;\r\n }\r\n }\r\n\r\n // getteur qui retourne le texte en fonction de la langue\r\n vm.get_txt = function(){\r\n var lang = ['en', 'fr', 'it', 'de'].includes($translate.use()) ? $translate.use():'en';\r\n return vm.active ? vm.alert.txt[lang] : \"\";\r\n }\r\n\r\n /*******************/\r\n /* SCOPE PERMANENT */\r\n /*******************/\r\n\r\n // Rendre permanent l'affichage des onglets permettant de sélectionnet le scope\r\n vm.parentCtrl.showTabsAndScopes = true;\r\n\r\n // console.log(vm.alert);\r\n }\r\n ]};\r\n","\"use strict\";\r\n\r\n/*\r\n OBJECTIF: afficher l'entête de la page.\r\n DESCRIPTION: contient le titre BEAST et le teaser. Si on clique sur le\r\n titre, cela renvoie à la page d'accueil de BEAST.\r\n*/\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n controllerAs: 'ctrl',\r\n controller: ['$location', '$translate', function($location, $translate) {\r\n var vm = this;\r\n\r\n // Construction de l'URL vers la page d'accueil. Il faut indiquer la vue et la langue.\r\n vm.url = $location.absUrl().split('?')[0] + '?vid=' + vm.parentCtrl.configurationUtil.vid + '&lang=' + $translate.use();\r\n\r\n // console.log(vm.url);\r\n }],\r\n template: `
\r\n

{{ 'mainTitle' | customTranslate }}

\r\n

{{ 'subTitle' | customTranslate }}

\r\n
`\r\n};\r\n","/************************/\r\n/* List of used modules */\r\n/************************/\r\n\r\n/*\r\nLes paquets suivants ne sont pas en usage pour le moment:\r\n- trustHtmal qui permet de mettre des balises dans les champs de données.\r\n- databases: pour l'instant il n'y a pas de personnalisation\r\n*/\r\n\r\nimport './filters/custom_translate.filter.js';\r\n// import './filters/trust_html.filter.js';\r\nimport './slsp/slsp-courier-info';\r\n// import './slsp/slsp-ill-signin-order-logged-out';\r\nimport './slsp/slsp-http-intercept-requests'\r\nimport './slsp/slsp-ill-signin-order-alert';\r\nimport './slsp/slsp-edit-personal-details';\r\nimport './slsp/prm-locations-after';\r\nimport './slsp/prm-location-items-after';\r\nimport './slsp/slsp-archives-htgi';\r\nimport './slsp/slsp-archives-viewit';\r\nimport './slsp/prm-user-area-expandable-after';\r\nimport './briefview';\r\nimport './homepage';\r\nimport './fullView'\r\n// import './databases';\r\nvar app = angular.module('viewCustom', ['angularLoad',\r\n 'customTranslateFilter',\r\n 'slspHttpInterceptRequests',\r\n // 'trustHtmlFilter',\r\n 'epflCourierInfo',\r\n // 'epflIllSigninOrderLoggedOut',\r\n 'slspUserAreaExpandableAfterModule',\r\n 'slspIllSigninOrderAlert',\r\n 'epflEditPersonalDetails',\r\n 'ethLocationsAfterModule',\r\n 'ethLocationItemsAfterModule',\r\n 'slspArchivesHtgi',\r\n 'slspArchivesViewit',\r\n 'briefviewModule',\r\n 'homepageModule',\r\n 'fullviewModule',\r\n // 'databasesModule'\r\n ]);\r\n","import {ethLocationItemsFilterModule} from './eth-location-items-filter/eth-location-items-filter.module';\r\nimport {epflIButtonModule} from './slsp-i-button/epfl-i-button.module';\r\n\r\nexport const ethLocationItemsAfterModule = angular\r\n .module('ethLocationItemsAfterModule', [])\r\n .component('prmLocationItemsAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nethLocationItemsAfterModule.requires.push(ethLocationItemsFilterModule.name);\r\nethLocationItemsAfterModule.requires.push(epflIButtonModule.name);\r\n","export class ethLocationItemsFilterController {\r\n\r\n constructor($timeout, $scope) {\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n }\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.$watch('this.$ctrl.parentCtrl.loc.location.librarycodeTranslation', (newValue, oldValue, scope) => {\r\n \r\n if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){\r\n \r\n this.$scope.$watch('this.$ctrl.parentCtrl.loc.items', (currentItemsArray) => {\r\n\r\n if (angular.isArray(currentItemsArray) && currentItemsArray.length > 1){\r\n \r\n this.$timeout(() => {\r\n scope.$ctrl.parentCtrl.isLocationsFilterVisible = true;\r\n }, 0);\r\n \r\n } \r\n \r\n })\r\n }\r\n\r\n }, true);\r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ethLocationItemsFilterController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nethLocationItemsFilterController.$inject = ['$timeout', '$scope'];\r\n\r\n","/**\r\n* @ngdoc module\r\n* @name ethLocationsFilterModule\r\n*\r\n* @description\r\n*\r\n* Customization for the locations filter:
\r\n* - the locations filter is visible by default\r\n*\r\n* If there is 1 location: prmLocationItemsAfter\r\n*\r\n* If there are multiple locations: prmLocationAfter;\r\n* after all locations: prmLocationsAfter;\r\n* after choosing a location: prmLocationItemsAfter\r\n*\r\n*\r\n* AngularJS Dependencies
\r\n*\r\n*\r\n* CSS/Image Dependencies
\r\n* CSS eth-locations-filter.css\r\n*\r\n*\r\n*/\r\nimport {ethLocationItemsFilterController} from './eth-location-items-filter.controller';\r\n\r\nexport const ethLocationItemsFilterModule = angular\r\n .module('ethLocationItemsFilterModule', [])\r\n .controller('ethLocationItemsFilterController', ethLocationItemsFilterController)\r\n .component('ethLocationItemsFilterComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'ethLocationItemsFilterController'\r\n })\r\n","\r\n\r\n//--------\"i\" button ---------------------------------------\r\n\r\n\r\n export class epflIButtonController {\r\n\r\n constructor() {}\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n // console.log(this);\r\n this.getLibrary = getLibrary;\r\n this.biblinkText = \"Library\";\r\n this.biblinkBase = \"https:\\/\\/slsp.ch\\/libraries\";\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n this.getLibraryUrl = getLibraryUrl;\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n\r\n function getLibrary() {\r\n return this.parentCtrl.currLoc ? this.parentCtrl.currLoc.location.librarycodeTranslation : '';\r\n\r\n }\r\n\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n function getLibraryUrl() {\r\n if (this.parentCtrl.loc && this.parentCtrl.loc.location.libraryCode==='E02') {\r\n return \"https://go.epfl.ch/library\";\r\n } else {\r\n return this.biblinkBase;\r\n }\r\n }\r\n // View is useful to get the url img\r\n this.view = this.parentCtrl.configurationUtil.vid.replace(':', '-');\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: slspIButtonController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }\r\n\r\n epflIButtonController.$inject = [];\r\n","\r\n\r\n//--------\"i\" button ---------------------------------------\r\n\r\n// angular\r\n// .module('slspIButton', [])\r\n\r\n// .controller('LibInfoController', [function () {\r\n// var vm = this;\r\n// vm.getLibrary = getLibrary;\r\n// vm.biblinkText = \"Library\";\r\n// vm.biblinkBase = \"https:\\/\\/slsp.ch\\/libraries\";\r\n\r\n// function getLibrary() {\r\n// return vm.parentCtrl.currLoc.location.librarycodeTranslation;\r\n// }\r\n\r\n// }])\r\n\r\n// .component('prmLocationItemsAfter', {\r\n// bindings: { parentCtrl: '<' },\r\n// controller: 'LibInfoController',\r\n// template: ''\r\n// });\r\n\r\n\r\n\r\n import {epflIButtonController} from './epfl-i-button.controller';\r\n import {epflIButtonHtml} from './epfl-i-button.html';\r\n\r\n export const epflIButtonModule = angular\r\n .module('epflIButtonModule', [])\r\n .controller('epflIButtonController', epflIButtonController)\r\n .component('epflIButtonComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'epflIButtonController',\r\n template: epflIButtonHtml\r\n })\r\n","import {ethLocationsFilterModule} from './eth-locations-filter/eth-locations-filter.module';\r\n\r\nexport const ethLocationsAfterModule = angular\r\n .module('ethLocationsAfterModule', [])\r\n .component('prmLocationsAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nethLocationsAfterModule.requires.push(ethLocationsFilterModule.name);\r\n","export class ethLocationsFilterController {\r\n\r\n constructor($timeout, $scope) {\r\n this.$timeout = $timeout;\r\n this.$scope = $scope;\r\n }\r\n\r\n $onInit() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.$watch('this.$ctrl.parentCtrl.locations[0].location.librarycodeTranslation', (newValue, oldValue, scope) => {\r\n if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){\r\n this.$timeout(() => {\r\n scope.$ctrl.parentCtrl.isLocationsFilterVisible = true;\r\n }, 0);\r\n }\r\n }, true);\r\n }\r\n catch(e){\r\n console.error(\"***ETH*** an error occured: ethLocationsFilterController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nethLocationsFilterController.$inject = ['$timeout', '$scope'];\r\n","/**\r\n* @ngdoc module\r\n* @name ethLocationsFilterModule\r\n*\r\n* @description\r\n*\r\n* Customization for the locations filter:
\r\n* - the locations filter is visible by default\r\n*\r\n* If there is 1 location: prmLocationItemsAfter\r\n*\r\n* If there are multiple locations: prmLocationAfter;\r\n* after all locations: prmLocationsAfter;\r\n* after choosing a location: prmLocationItemsAfter\r\n*\r\n*\r\n* AngularJS Dependencies
\r\n*\r\n*\r\n* CSS/Image Dependencies
\r\n* CSS eth-locations-filter.css\r\n*\r\n*\r\n*/\r\nimport {ethLocationsFilterController} from './eth-locations-filter.controller';\r\n\r\nexport const ethLocationsFilterModule = angular\r\n .module('ethLocationsFilterModule', [])\r\n .controller('ethLocationsFilterController', ethLocationsFilterController)\r\n .component('ethLocationsFilterComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'ethLocationsFilterController'\r\n })\r\n","// Un seul changement EPFL sur les langues.\n\nexport class bcuLangSwitchController {\n\n constructor($element, $window) {\n this.$parent = $element.parent().parent()[0];\n this.parentCtrl = this.afterCtrl.parentCtrl;\n this.$window = $window;\n }\n\n $onInit() {\n try {\n\n this.languages = [\"fr\", \"en\"];\n if (!this.languages.includes(this.parentCtrl.lang)) {\n this.changeLanguage(\"en\");\n }\n\n }\n catch (e) {\n console.error(\"***BCUFR*** bcuLangSwitchControler $onInit\");\n console.error(e.message);\n }\n };\n\n changeLanguage(lang) {\n\n this.parentCtrl.changeLangService.addLangParamToUrl(lang);\n let t = this.parentCtrl;\n this.parentCtrl.i18nService.setLanguage(lang).then(function(){\n t.$timeout(function(){return t.$state.go(t.$state.current,{lang:lang},{reload:!0})})\n });\n };\n\n}\nbcuLangSwitchController.$inject = ['$element'];\n","/**\n* @ngdoc module\n* @name bcuLangSwitchModule\n*\n* @description\n* - Add LangSwitch to user area\n* @example\n* each view\n*\n*/\nimport {bcuLangSwitchController} from './bcu-lang-switch.controller';\n\nexport const bcuLangSwitchModule = angular\n .module('bcuLangSwitchModule', [])\n .controller('bcuLangSwitchController', bcuLangSwitchController)\n .component('bcuLangSwitchComponent', {\n bindings: {afterCtrl: '<'},\n controller: 'bcuLangSwitchController',\n// template: ''\n template: ''\n })\n","\nexport class slspIllSigninOrderLoggedOutController {\n\n constructor(slspIllSigninOrderLoggedOutService, $scope) {\n this.slspIllSigninOrderLoggedOutService = slspIllSigninOrderLoggedOutService;\n this.$scope = $scope;\n }\n\n $doCheck() {\n try{\n this.parentCtrl = this.afterCtrl.parentCtrl;\n this.$scope.usrNme = this.slspIllSigninOrderLoggedOutService.isGuest();\n\n if (this.$scope.usrNme == true) {\n let myEl = angular.element(document.querySelector('primo-explore'));\n return myEl.addClass('logged-out')\n }\n \n else {\n let myEl = angular.element(document.querySelector('primo-explore'));\n return myEl.removeClass('logged-out');\n }\n }\n catch(e){\n console.error(\"***SLSP*** an error occured: slspIllSigninOrderLoggedOutController\\n\\n\");\n console.error(e.message);\n }\n }\n}\n\nslspIllSigninOrderLoggedOutController.$inject = ['slspIllSigninOrderLoggedOutService', '$scope'];\n \n\n","\n\n //--------ILL Signin Order - if logged out ---------------------------------------\n\n\n import {slspIllSigninOrderLoggedOutController} from './slsp-ill-signin-order-logged-out.controller';\n import {slspIllSigninOrderLoggedOutService} from './slsp-ill-signin-order-logged-out.service';\n\n export const slspIllSigninOrderLoggedOutModule = angular\n .module('slspIllSigninOrderLoggedOutModule', [])\n .factory('slspIllSigninOrderLoggedOutService', slspIllSigninOrderLoggedOutService)\n .controller('slspIllSigninOrderLoggedOutController', slspIllSigninOrderLoggedOutController)\n .component('slspIllSigninOrderLoggedOutComponent', {\n bindings: {afterCtrl: '<'},\n controller: 'slspIllSigninOrderLoggedOutController',\n\n })\n","// Modification EPFL\n\n export const slspIllSigninOrderLoggedOutService = ['jwtHelper', function( jwtHelper ){\n\n function getDecodedToken(){\n try{\n if (!sessionStorage){\n console.error(\"***SLSP*** no session storage\")\n return null;\n }\n let jwt = sessionStorage.getItem('primoExploreJwt');\n if (!jwt){\n return null;\n }\n return jwtHelper.decodeToken(jwt);\n }\n catch(e){\n console.error(\"**SLSP*** an error occured: userService.getDecodedToken:\");\n console.error(e.message);\n }\n }\n\n function isGuest(){\n try{\n let decodedToken = getDecodedToken();\n if (!decodedToken) {\n return null;\n }\n let userName= decodedToken.userGroup !== 'GUEST'? decodedToken.userName : '';\n if (userName){\n return false;\n }\n else{\n return true;\n }\n }\n catch(e){\n console.error(\"***SLSP*** an error occured: userService.isGuest:\");\n console.error(e.message);\n }\n }\n\n /* ---------------------------------- */\n /* - Ajout pour vérifier si IP EPFL - */\n function isEpflIP() {\n var jwt = sessionStorage.getItem('primoExploreJwt');\n if (!jwt) {\n return;\n }\n const userIP = jwtHelper.decodeToken(jwt).userIp;\n if (userIP) {\n const regex = /128\\.17([89])\\.(\\d{1,3})\\./;\n const found = userIP.match(regex);\n if (found && (found[1] == '8' || parseInt(found[2])>=128)) {\n return true;\n }\n }\n return false;\n }\n /* --------- Fin de l'ajout --------- */\n /* ---------------------------------- */\n\n return {\n isGuest: isGuest,\n getDecodedToken: getDecodedToken,\n isEpflIP: isEpflIP\n };\n }]\n","import {bcuLangSwitchModule} from './bcu-lang-switch/bcu-lang-switch.module';\nimport {slspIllSigninOrderLoggedOutModule} from './slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module';\n\nexport const slspUserAreaExpandableAfterModule = angular\n .module('slspUserAreaExpandableAfterModule', [])\n .component('prmUserAreaExpandableAfter', {\n bindings: {parentCtrl: '<'},\n template: ``,\n });\n\nslspUserAreaExpandableAfterModule.requires.push(bcuLangSwitchModule.name);\nslspUserAreaExpandableAfterModule.requires.push(slspIllSigninOrderLoggedOutModule.name);","require('./js/slsp-archives-htgi.module.js')\r\nmodule.exports = 'slspArchivesHtgi'\r\n","angular\r\n .module('slspArchivesHtgi', [])\r\n\r\n // \"how to get it\" section for resources of archives MFA, TMA (CMI STAR)\r\n\r\n .controller('ArchivesHtgiController', [function () {\r\n\r\n this.$onInit = function () {\r\n try{\r\n if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.item.pnx.display.source[0];\r\n // CMI STAR sources\r\n if(this.source === 'ETH_MaxFrischArchiv' || this.source === 'ETH_ThomasMannArchiv'){\r\n // hide content of htgi section\r\n let section = document.getElementById('full-view-container');\r\n section.classList.add('slsp-archives-hide');\r\n\r\n // get guid of CMIStar\r\n let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0];\r\n let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1);\r\n\r\n // different sources: concat url\r\n if(this.source === 'ETH_ThomasMannArchiv'){\r\n this.url = 'http://www.online.tma.ethz.ch/home/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Detailed information in Thomas Mann-Archiv Online (metadata only)';\r\n }\r\n else if (this.source === 'ETH_MaxFrischArchiv') {\r\n this.url = 'http://maxfrischarchiv-online.ethz.ch/home/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Request via Max Frisch-Archiv Online';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesHtgiController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n\r\n .component('almaHtgiSvcAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'ArchivesHtgiController',\r\n template: `\r\n
\r\n \r\n \r\n {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}}\r\n {{$ctrl.label}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n No request possible. The digitized item can be consulted in the Thomas Mann Archives reading room upon advance registration (\r\n \r\n Contact\r\n \r\n \r\n ).\r\n
\r\n
\r\n
\r\n
\r\n Informationen zu Bestellung und Benutzung siehe\r\n \r\n Bedienungshinweise\r\n \r\n \r\n .\r\n
\r\n
\r\n
\r\n `\r\n });\r\n","require('./js/slsp-archives-viewit.module.js')\r\nmodule.exports = 'slspArchivesViewit'\r\n","angular\r\n.module('slspArchivesViewit', [])\r\n\r\n // .component('prmSearchResultAvailabilityLineAfter', { VERSION ETH\r\n //bindings: { parentCtrl: '<' },\r\n .component('prmEthSearchResultAvailabilityLineAfter', { // VERSION EPFL\r\n bindings: { afterCtrl: '<' },\r\n controller: 'ArchivesAvailabilityLineController'\r\n })\r\n\r\n .component('prmEthAlmaViewitAfter', {\r\n bindings: { afterCtrl: '<' },\r\n controller: 'ArchivesViewitController',\r\n template: `\r\n
\r\n \r\n \r\n {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}}\r\n {{$ctrl.label}}\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n Informationen zu Bestellung und Benutzung siehe\r\n \r\n Bedienungshinweise\r\n \r\n \r\n .\r\n
\r\n
\r\n
\r\n `\r\n })\r\n\r\n // viewit section for archives when there are only partial digitized items, e.g. \"ETH Hochschularchiv\" (CMI STAR)\r\n .controller('ArchivesViewitController', ['$translate', function ($translate) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$onInit = function () {\r\n try{\r\n if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.item.pnx.display.source[0];\r\n // CMI STAR sources\r\n if(this.source === 'ETH_Hochschularchiv'){\r\n if(this.parentCtrl.item.delivery.GetIt1 && this.parentCtrl.item.delivery.GetIt1.length > 0 && this.parentCtrl.item.delivery.GetIt1[0].links && this.parentCtrl.item.delivery.GetIt1[0].links.length > 0){\r\n\r\n // there is an online resource: return and do nothing\r\n let aOnlineLink = this.parentCtrl.item.delivery.GetIt1[0].links.filter( l => {\r\n if(l.isLinktoOnline && l.link !== ''){\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (aOnlineLink.length > 0) {\r\n return;\r\n }\r\n\r\n // there is no online resource\r\n // change section heading\r\n $translate('nui.getit.service_howtogetit').then((translation) => {\r\n let fullView = document.getElementById('fullView');\r\n angular.element(fullView.querySelector(\"h4[translate='nui.getit.service_viewit']\")).text(translation);\r\n angular.element(fullView.querySelector(\"#services-index span[translate='nui.getit.service_viewit']\")).text(translation);\r\n });\r\n\r\n }\r\n // hide content of viewit section\r\n let section = document.getElementById('full-view-container');\r\n section.classList.add('slsp-archives-hide');\r\n\r\n // get guid of CMIStar\r\n let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0];\r\n let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1);\r\n\r\n // different sources: concat url\r\n if(this.source === 'ETH_Hochschularchiv'){\r\n this.url = 'http://archivdatenbank-online.ethz.ch/hsa/#/content/' + guid;\r\n // only for test\r\n //this.label = 'Bestellen über Hochschularchiv Online';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesViewitController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n\r\n // change availability line, if there is no digitization\r\n .controller('ArchivesAvailabilityLineController', ['$translate', function ($translate) {\r\n this.$onInit = function () {\r\n try{\r\n /********************/\r\n /* DEBUT AJOUT EPFL */\r\n /********************/\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n /********************/\r\n /* FIN AJOUT EPFL */\r\n /********************/\r\n this.changeButton = false;\r\n if(!this.parentCtrl.result.pnx.display.source || this.parentCtrl.result.pnx.display.source.length === 0){\r\n return;\r\n }\r\n this.source = this.parentCtrl.result.pnx.display.source[0];\r\n if(!this.source === 'ETH_Hochschularchiv')return;\r\n if(!this.parentCtrl.result.delivery.GetIt1 || this.parentCtrl.result.delivery.GetIt1.length == 0 || !this.parentCtrl.result.delivery.GetIt1[0].links || this.parentCtrl.result.delivery.GetIt1[0].links.length == 0)return;\r\n\r\n let aOnlineLink = this.parentCtrl.result.delivery.GetIt1[0].links.filter( l => {\r\n if(l.isLinktoOnline && l.link !== ''){\r\n return true;\r\n }\r\n return false;\r\n });\r\n if (aOnlineLink.length === 0) {\r\n // there is no online resource\r\n $translate('delivery.code.no_inventory').then((translation) => {\r\n this.changeButton = true;\r\n this.changeButtonText = translation;\r\n });\r\n let availabilityLine = this.parentCtrl.$element[0];\r\n if(availabilityLine) {\r\n availabilityLine.classList.add('slsp-hsa-no-online');\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: ArchivesAvailabilityLineController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n\r\n this.$doCheck = function () {\r\n try{\r\n if (this.changeButton){\r\n let availabilityLine = this.parentCtrl.$element[0];\r\n let button = availabilityLine.querySelector('.availability-status');\r\n if(angular.element(button) && angular.element(button).length > 0){\r\n angular.element(button).html(this.changeButtonText);\r\n this.changeButton = false;\r\n this.changeButtonText = '';\r\n }\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***ETH*** an error occured: ArchivesAvailabilityLineController $doCheck\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n }])\r\n","require('./js/epfl-courier-info.module.js')\r\nmodule.exports = 'slspCourierInfo'\r\n","/* ---------------- */\r\n/* - VERSION EPFL - */\r\n/* ---------------- */\r\n\r\n/*\r\n\r\nAVERTISSEMENT: ce module est très différent de sa version originale d'SLSP.\r\n\r\nIl doit donc être considéré comme réécrit et les ajouts ne sont pas indiqués.\r\n\r\nCe module permet d'afficher les boutons renvoyant à SWITCH edu-ID.\r\n\r\nFONCTIONNALITES:\r\n- Mettre l'EPFL en tête des possibilités de retrait.\r\n- Afficher les messages personnalisés pour les frais.\r\n\r\n*/\r\n\r\n angular\r\n .module('epflCourierInfo', [])\r\n\r\n .controller('CourierInfoController', ['$filter', '$element', function ($filter, $element, $compile, $scope, $rootScope) {\r\n var vm = this;\r\n\r\n //shortcut for convenience\r\n vm.form = $element[0].parentElement;\r\n\r\n //function for inserting block\r\n vm.$doCheck = function() {\r\n let form = false;\r\n let formLength = 2;\r\n // console.log(vm.form);\r\n if (vm.form.children[0].children[1] !== undefined && (vm.form.children[0].children[1].children[0] !== undefined || vm.typeFeeAlert()=='costWarningPEB')) {\r\n form = vm.form.children[0].children[1].children[0];\r\n if (vm.typeFeeAlert()=='costWarningPEB'){\r\n formLength = 3;\r\n }\r\n }\r\n else if (vm.form.children[0].children[0] !== undefined && vm.form.children[0].children[0].children[0] !== undefined) {\r\n form = vm.form.children[0].children[0].children[0];\r\n formLength = 3;\r\n }\r\n // console.log(vm.typeFeeAlert());\r\n\r\n //create and insert info block if not present\r\n // if (form){\r\n // // console.log('---' + String(formLength) + ' - ' + String(form.children.length));}\r\n if (form && form.children.length == formLength && form.children.length > 1 || vm.hasOwnProperty('currentTypeFeeAlert') &&\r\n vm.currentTypeFeeAlert != vm.typeFeeAlert()) {\r\n // console.log('cccc---' + String(formLength) + ' - ' + String(form.children.length));\r\n vm.currentTypeFeeAlert = vm.typeFeeAlert();\r\n var htmlwarning = `

${vm.getFeeAlert()}

`;\r\n if (vm.typeFeeAlert()=='costWarningScan') {\r\n var txt = $filter('customTranslate')('illButton');\r\n if (vm.get_peb_button()){\r\n var fn = `javascript:(function() {\r\n for (var elem of document.getElementsByTagName('span')) {\r\n if (elem.getAttribute('translate') === 'AlmaResourceSharing' &&\r\n elem.parentNode.className.indexOf('greenbutton') === -1)\r\n {\r\n elem.click();\r\n break;\r\n }\r\n };})()`;}\r\n else {\r\n var fn = `javascript:(function() {window.location.href = window.location.origin + '/discovery/blankIll?vid=${vm.parentCtrl.vid}'})()`;\r\n }\r\n\r\n\r\n htmlwarning += `

${txt}

`;\r\n\r\n }\r\n htmlwarning += `

${vm.parentCtrl.$translate.instant('customize.fullview.feesLinkText')}

`;\r\n var htmlcompiled = angular.element(htmlwarning)[0];\r\n\r\n // console.log('---' + String(formLength) + ' - ' + String(form.children.length));\r\n if (form.children.length == formLength) {\r\n // console.log('---' + String(formLength) + ' - ' + String(form.children.length));\r\n form.insertBefore(htmlcompiled, form.children[formLength - 1]);\r\n } else {\r\n // console.log(String(formLength) + ' - ' + String(form.children.length));\r\n form.children[form.children.length - 2].replaceWith(htmlcompiled);\r\n }\r\n }\r\n }\r\n\r\n // Remonte l'EPFL dans la liste des bibliothèques\r\n Object.defineProperty(vm.parentCtrl, \"form\", {\r\n configurable: !0,\r\n get: function(){\r\n // Mettre l'EPFL en première position\r\n var form = this.getFilteredForm(['label', 'multiLabel'], false);\r\n if (!vm.hasOwnProperty('pickupLocationsListOrdered')){\r\n for (var i = 0; i < form.length; i++){\r\n if (form[i].key == 'pickupInstitution'){\r\n function compare( a, b ){\r\n var onTopInstitutions = ['41SLSP_EPF', '41SLSP_EPFL'];\r\n a = onTopInstitutions.indexOf(a.value);\r\n b = onTopInstitutions.indexOf(b.value);\r\n if (a == b) {return 0};\r\n return a < b ? 1 : -1;\r\n }\r\n form[i].options.sort(compare);\r\n vm['pickupLocationsListOrdered'] = true;\r\n }\r\n }\r\n }\r\n return form;\r\n }\r\n }\r\n );\r\n\r\n // Vérifie si l'EPFL est la provenance de l'exemplaire sélectionné\r\n vm.isEPFL = function() {\r\n return vm.parentCtrl.requestService && vm.parentCtrl.requestService._service['link-to-service'].indexOf('institution=41SLSP_EPF') > 0 ? true : false;\r\n }\r\n\r\n vm.linkBase = \"https:\\/\\/slsp.ch\\/fees\";\r\n\r\n // Personnalisation du message des frais\r\n vm.typeFeeAlert = function() {\r\n // console.log(vm.parentCtrl.requestHeader);\r\n if (['almaRequest.header', 'almaRequestOther.header', 'almaItemRequest.header'].includes(vm.parentCtrl.requestHeader)) {\r\n return 'costWarningNetworkLoan'; // $filter('customTranslate')(costWarningNetworkLoan');\r\n } else if (['almaDigitization.header',\r\n 'almaDigitizationOther.header',\r\n 'almaItemDigitization.header']\r\n .includes(vm.parentCtrl.requestHeader)) {\r\n return vm.isEPFL() ? 'costWarningScanEPFL' : 'costWarningScan';\r\n } else if (vm.parentCtrl.requestHeader === 'almaResourceSharing.header') {\r\n return 'costWarningPEB';\r\n } else {\r\n return 'costWarningGeneral';\r\n }\r\n }\r\n vm.getFeeAlert = function() {\r\n // console.log(vm.typeFeeAlert());\r\n return $filter('customTranslate')(vm.typeFeeAlert());\r\n }\r\n\r\n // Récupère le bouton PEB de la page afin de simuler un clic dessus\r\n vm.get_peb_button = function(){\r\n var allElements = document.getElementsByTagName('span');\r\n for (var i = 0, n = allElements.length; i < n; i++) {\r\n if (allElements[i].getAttribute('translate') === 'AlmaResourceSharing' &&\r\n allElements[i].parentNode.className.indexOf('greenbutton') === -1)\r\n {\r\n return allElements[i];\r\n }\r\n }\r\n\r\n }\r\n\r\n // Fonction simulant un clic sur le bouton PEB quand on clique sur les\r\n // frais.\r\n vm.click_peb = function(){\r\n var button = vm.get_peb_button();\r\n if (button) {\r\n button.click();\r\n } else {\r\n window.location.href = window.location.origin + '/discovery/blankIll?vid=' + vm.parentCtrl.vid;\r\n }\r\n }\r\n // console.log(vm);\r\n\r\n }])\r\n\r\n .component('prmRequestAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'CourierInfoController',\r\n });\r\n","require('./js/epfl-edit-personal-details.module.js')\r\nmodule.exports = 'epflEditPersonalDetails'\r\n","/* --------------------- */\r\n/* - Début ajouts EPFL - */\r\n/*\r\n\r\nCe module permet d'afficher les boutons renvoyant à SWITCH edu-ID.\r\n\r\n- \"this\" a été remplacé partout par une variable \"vm\". C'est indispensable\r\npour garder la bonne référence dans les promesses.\r\n- Les boutons sont ajoutés avant l'adresse ce qui ne peut pas passer par\r\nun template\r\n\r\n*/\r\n/* - Fin ajouts EPFL - */\r\n/* ------------------- */\r\n\r\n\r\nangular\r\n .module('epflEditPersonalDetails', [])\r\n\r\n\r\n\r\n //------------------------------ edit personal details ---------------------------\r\n\r\n .controller('EditPersonalDetailsController', ['$scope', '$element', '$translate' , function ($scope, $element, $translate) {\r\n var vm = this; // Ajout EPFL\r\n let lang = 'en';\r\n let sms = $scope.$root.$$childHead.$ctrl.userSessionManagerService;\r\n if (sms) {\r\n lang = sms.getInterfaceLanguage();\r\n }\r\n\r\n vm.detailsBaseEdu = \"https:\\/\\/eduid.ch\\/web\\/change-account-data\\/2\\/?lang=\" + lang;\r\n vm.detailsBaseReg = \"https:\\/\\/registration.slsp.ch\\/library-card\\/?lang=\" + lang;\r\n vm.exclude = ['STAFF', '11', '12', '13', '14', '15', '16', '91', '92'];\r\n vm.grpA = ['11', '91', '92']; // comptes locaux\r\n vm.grpB = ['12', '13', '14', '15', '16']; // comptes institutionnels\r\n\r\n\r\n vm.getPatronGrp = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let patron = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (!vm.exclude.includes(patron)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n vm.grpLabelA = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelA = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (vm.grpA.includes(labelA)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n vm.grpLabelB = function() {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelB = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (vm.grpB.includes(labelB)) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n\r\n /* --------------------- */\r\n /* - Début ajouts EPFL - */\r\n\r\n vm.test = 0;\r\n vm.testPersonalInfo = function() {\r\n /* Constructeur de la promesse. Cette promess échoue quand\r\n les informations utilisateur ne sont pas ou pas encore\r\n disponible. */\r\n return new Promise((persInfoAv, persInfoNotAv) => {\r\n if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n persInfoAv();\r\n } else {\r\n persInfoNotAv();\r\n }\r\n })\r\n }\r\n vm.persInfoAv = function() {\r\n /* Succès de la promesse: le groupe utilisateur a été trouvé et\r\n les boutons adéquats s'afichent. */\r\n let html = '
';\r\n if (vm.grpLabelA()) {\r\n html += `${vm.parentCtrl.$translate.instant('customized.libraries.details')}`;\r\n }\r\n else if (vm.grpLabelB()) {\r\n html += `${vm.parentCtrl.$translate.instant('customized.slsp.details')}`;\r\n }\r\n else if (vm.getPatronGrp) {\r\n html += `\r\n \r\n \r\n \r\n \r\n \r\n \r\n ${vm.parentCtrl.$translate.instant('customized.personal.details')}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ${vm.parentCtrl.$translate.instant('customized.libcard.number')}\r\n \r\n `\r\n }\r\n\r\n html += '
';\r\n var htmlcompiled = angular.element(html)[0];\r\n var place_to_insert = $element[0].parentElement.children[1].children[0];\r\n place_to_insert.insertBefore(htmlcompiled, place_to_insert.children[1]);\r\n }\r\n vm.persInfoNotAv = function() {\r\n vm.test += 1;\r\n if (vm.test < 10) {\r\n /* En cas d'échec, on attend 0.5 second et on relance le test */\r\n setTimeout(() => vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv), 500);\r\n }\r\n }\r\n if (vm.test === 0) {\r\n /* Premier lancement du test pour voir si les infos utilisateur\r\n sont disponibles */\r\n vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv);\r\n }\r\n /* - Fin ajouts EPFL - */\r\n /* ------------------- */\r\n\r\n\r\n }])\r\n\r\n\r\n .component('prmPersonalInfoAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'EditPersonalDetailsController',\r\n /* Suppression EPFL */\r\n // template: '

'\r\n });\r\n","require('./js/slsp-http-intercept-requests.module.js')\nmodule.exports = 'slspHttpInterceptRequests'","angular.module('slspHttpInterceptRequests', ['ng'])\n .config(['$httpProvider', ($httpProvider) => {\n $httpProvider.interceptors.push(['$q', ($q) => {\n return {\n 'request': (request) => {\n return request\n },\n 'requestError': (request) => {\n return $q.reject(request)\n },\n 'responseError': (response) => {\n return $q.reject(response)\n },\n 'response': (response) => {\n try {\n if (/primaws\\/rest\\/priv\\/myaccount\\/requests/.test(response.config.url)) {\n let interfaceLanguage = angular.element(document.querySelector('primo-explore')).injector().get('$rootScope').$$childHead.$ctrl.userSessionManagerService.getUserLanguage() ||\n window.appConfig['primo-view']['attributes-map'].interfaceLanguage\n\n let list_of_hold_states = {\n 'en': [\"in transit\", \"in process\", \"on hold shelf\"],\n 'de': [\"transfer\", \"in bearbeitung\", \"bereitgestellt\"],\n 'fr': [\"en cours de transfert\", \"en cours\", \"sur le rayon des réservations\"],\n 'it': [\"in transito\", \"in processo\", \"scaffale prenotazioni\"]\n }\n\n if (Object.keys(list_of_hold_states).includes(interfaceLanguage)) {\n let list_of_hold_states_regexp = RegExp(list_of_hold_states[interfaceLanguage].map(m => m.toLowerCase()).join('|'))\n if (response.status == 200 && response.data.status == \"ok\") {\n\n //rewrite all cancellable holds.\n response.data.data.holds.hold.map((m) => {\n if (list_of_hold_states_regexp.test(m.holdstatus.toLowerCase())) {\n m.cancel = 'N'\n }\n })\n\n }\n } else {\n throw `No mapping found for ${interfaceLanguage}`\n }\n }\n } catch (error) {\n console.log(error)\n }\n return response\n }\n }\n }])\n }])","require('./js/slsp-ill-signin-order-alert.module.js')\r\nmodule.exports = 'slspIllSigninOrderAlert'","//--------ILL Signin Order - if Alert Message ---------------------------------------\r\n\r\nangular\r\n .module('slspIllSigninOrderAlert', [])\r\n\r\n .controller('AlertMsgController', ['$scope', function ($scope) {\r\n var vm = this;\r\n vm.getAlert = getAlert\r\n\r\n function getAlert() {\r\n var ga = vm.parentCtrl.almaHowToGetitService.reqAlert._htmlMsg;\r\n var myEl2 = angular.element(document.querySelector('primo-explore'));\r\n\r\n if (ga.length > 0) {\r\n return myEl2.addClass('alert');\r\n\r\n }\r\n else {\r\n\r\n return myEl2.removeClass('alert');\r\n }\r\n }\r\n }])\r\n\r\n .component('almaHowovpAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'AlertMsgController',\r\n template: '
{{$ctrl.getAlert()}}
'\r\n });\r\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/primo-explore/custom/src/js/main.js b/primo-explore/custom/src/js/main.js index 3b457fd..9c95572 100644 --- a/primo-explore/custom/src/js/main.js +++ b/primo-explore/custom/src/js/main.js @@ -1,40 +1,44 @@ /************************/ /* List of used modules */ /************************/ /* Les paquets suivants ne sont pas en usage pour le moment: - trustHtmal qui permet de mettre des balises dans les champs de données. - databases: pour l'instant il n'y a pas de personnalisation */ import './filters/custom_translate.filter.js'; // import './filters/trust_html.filter.js'; import './slsp/slsp-courier-info'; -import './slsp/slsp-ill-signin-order-logged-out'; +// import './slsp/slsp-ill-signin-order-logged-out'; +import './slsp/slsp-http-intercept-requests' import './slsp/slsp-ill-signin-order-alert'; import './slsp/slsp-edit-personal-details'; import './slsp/prm-locations-after'; import './slsp/prm-location-items-after'; import './slsp/slsp-archives-htgi'; import './slsp/slsp-archives-viewit'; +import './slsp/prm-user-area-expandable-after'; import './briefview'; import './homepage'; import './fullView' // import './databases'; var app = angular.module('viewCustom', ['angularLoad', 'customTranslateFilter', + 'slspHttpInterceptRequests', // 'trustHtmlFilter', 'epflCourierInfo', - 'epflIllSigninOrderLoggedOut', + // 'epflIllSigninOrderLoggedOut', + 'slspUserAreaExpandableAfterModule', 'slspIllSigninOrderAlert', 'epflEditPersonalDetails', 'ethLocationsAfterModule', 'ethLocationItemsAfterModule', 'slspArchivesHtgi', 'slspArchivesViewit', 'briefviewModule', 'homepageModule', 'fullviewModule', // 'databasesModule' ]); diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js new file mode 100644 index 0000000..77b0027 --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js @@ -0,0 +1,36 @@ +// Un seul changement EPFL sur les langues. + +export class bcuLangSwitchController { + + constructor($element, $window) { + this.$parent = $element.parent().parent()[0]; + this.parentCtrl = this.afterCtrl.parentCtrl; + this.$window = $window; + } + + $onInit() { + try { + + this.languages = ["fr", "en"]; + if (!this.languages.includes(this.parentCtrl.lang)) { + this.changeLanguage("en"); + } + + } + catch (e) { + console.error("***BCUFR*** bcuLangSwitchControler $onInit"); + console.error(e.message); + } + }; + + changeLanguage(lang) { + + this.parentCtrl.changeLangService.addLangParamToUrl(lang); + let t = this.parentCtrl; + this.parentCtrl.i18nService.setLanguage(lang).then(function(){ + t.$timeout(function(){return t.$state.go(t.$state.current,{lang:lang},{reload:!0})}) + }); + }; + +} +bcuLangSwitchController.$inject = ['$element']; diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js new file mode 100644 index 0000000..6a83b60 --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js @@ -0,0 +1,21 @@ +/** +* @ngdoc module +* @name bcuLangSwitchModule +* +* @description +* - Add LangSwitch to user area +* @example +* each view +* +*/ +import {bcuLangSwitchController} from './bcu-lang-switch.controller'; + +export const bcuLangSwitchModule = angular + .module('bcuLangSwitchModule', []) + .controller('bcuLangSwitchController', bcuLangSwitchController) + .component('bcuLangSwitchComponent', { + bindings: {afterCtrl: '<'}, + controller: 'bcuLangSwitchController', +// template: '' + template: '' + }) diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/package.json b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/package.json new file mode 100644 index 0000000..a389326 --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/package.json @@ -0,0 +1,12 @@ +{ + "name": "slsp-user-area-expandable-after", + "version": "1.0.0", + "description": "", + "main": "slsp-user-area-expandable-after.module.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "Philipp Schulz", + "license": "ISC" +} diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js new file mode 100644 index 0000000..95ab539 --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js @@ -0,0 +1,33 @@ + +export class slspIllSigninOrderLoggedOutController { + + constructor(slspIllSigninOrderLoggedOutService, $scope) { + this.slspIllSigninOrderLoggedOutService = slspIllSigninOrderLoggedOutService; + this.$scope = $scope; + } + + $doCheck() { + try{ + this.parentCtrl = this.afterCtrl.parentCtrl; + this.$scope.usrNme = this.slspIllSigninOrderLoggedOutService.isGuest(); + + if (this.$scope.usrNme == true) { + let myEl = angular.element(document.querySelector('primo-explore')); + return myEl.addClass('logged-out') + } + + else { + let myEl = angular.element(document.querySelector('primo-explore')); + return myEl.removeClass('logged-out'); + } + } + catch(e){ + console.error("***SLSP*** an error occured: slspIllSigninOrderLoggedOutController\n\n"); + console.error(e.message); + } + } +} + +slspIllSigninOrderLoggedOutController.$inject = ['slspIllSigninOrderLoggedOutService', '$scope']; + + diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js new file mode 100644 index 0000000..c86d35e --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js @@ -0,0 +1,17 @@ + + + //--------ILL Signin Order - if logged out --------------------------------------- + + + import {slspIllSigninOrderLoggedOutController} from './slsp-ill-signin-order-logged-out.controller'; + import {slspIllSigninOrderLoggedOutService} from './slsp-ill-signin-order-logged-out.service'; + + export const slspIllSigninOrderLoggedOutModule = angular + .module('slspIllSigninOrderLoggedOutModule', []) + .factory('slspIllSigninOrderLoggedOutService', slspIllSigninOrderLoggedOutService) + .controller('slspIllSigninOrderLoggedOutController', slspIllSigninOrderLoggedOutController) + .component('slspIllSigninOrderLoggedOutComponent', { + bindings: {afterCtrl: '<'}, + controller: 'slspIllSigninOrderLoggedOutController', + + }) diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js new file mode 100644 index 0000000..142fb87 --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js @@ -0,0 +1,68 @@ +// Modification EPFL + + export const slspIllSigninOrderLoggedOutService = ['jwtHelper', function( jwtHelper ){ + + function getDecodedToken(){ + try{ + if (!sessionStorage){ + console.error("***SLSP*** no session storage") + return null; + } + let jwt = sessionStorage.getItem('primoExploreJwt'); + if (!jwt){ + return null; + } + return jwtHelper.decodeToken(jwt); + } + catch(e){ + console.error("**SLSP*** an error occured: userService.getDecodedToken:"); + console.error(e.message); + } + } + + function isGuest(){ + try{ + let decodedToken = getDecodedToken(); + if (!decodedToken) { + return null; + } + let userName= decodedToken.userGroup !== 'GUEST'? decodedToken.userName : ''; + if (userName){ + return false; + } + else{ + return true; + } + } + catch(e){ + console.error("***SLSP*** an error occured: userService.isGuest:"); + console.error(e.message); + } + } + + /* ---------------------------------- */ + /* - Ajout pour vérifier si IP EPFL - */ + function isEpflIP() { + var jwt = sessionStorage.getItem('primoExploreJwt'); + if (!jwt) { + return; + } + const userIP = jwtHelper.decodeToken(jwt).userIp; + if (userIP) { + const regex = /128\.17([89])\.(\d{1,3})\./; + const found = userIP.match(regex); + if (found && (found[1] == '8' || parseInt(found[2])>=128)) { + return true; + } + } + return false; + } + /* --------- Fin de l'ajout --------- */ + /* ---------------------------------- */ + + return { + isGuest: isGuest, + getDecodedToken: getDecodedToken, + isEpflIP: isEpflIP + }; + }] diff --git a/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js new file mode 100644 index 0000000..73a38ae --- /dev/null +++ b/primo-explore/custom/src/js/slsp/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js @@ -0,0 +1,12 @@ +import {bcuLangSwitchModule} from './bcu-lang-switch/bcu-lang-switch.module'; +import {slspIllSigninOrderLoggedOutModule} from './slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module'; + +export const slspUserAreaExpandableAfterModule = angular + .module('slspUserAreaExpandableAfterModule', []) + .component('prmUserAreaExpandableAfter', { + bindings: {parentCtrl: '<'}, + template: ``, + }); + +slspUserAreaExpandableAfterModule.requires.push(bcuLangSwitchModule.name); +slspUserAreaExpandableAfterModule.requires.push(slspIllSigninOrderLoggedOutModule.name); \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/README.md b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/README.md new file mode 100644 index 0000000..7569e4c --- /dev/null +++ b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/README.md @@ -0,0 +1,17 @@ + +The easiest way to use this module is to import it and then add it to the (view|central)Custom module. + +```code javascript +import './swisscovery/41SLSP_NETWORK-VU1_UNION/js/slsp-http-intercept-requests'; +let customType = 'viewCustom'; +//let customType = 'centralCustom'; + +let app = angular.module(customType, ['slspHttpInterceptRequests']); +``` + +If you want to use this in you own code base add a reference to swisscovery as a git submodule. + +``` bash +cd src +git submodule add https://github.com/mehmetc/swisscovery +``` \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/index.js b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/index.js new file mode 100644 index 0000000..5d1df3e --- /dev/null +++ b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/index.js @@ -0,0 +1,2 @@ +require('./js/slsp-http-intercept-requests.module.js') +module.exports = 'slspHttpInterceptRequests' \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js new file mode 100644 index 0000000..d6ebeab --- /dev/null +++ b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js @@ -0,0 +1,50 @@ +angular.module('slspHttpInterceptRequests', ['ng']) + .config(['$httpProvider', ($httpProvider) => { + $httpProvider.interceptors.push(['$q', ($q) => { + return { + 'request': (request) => { + return request + }, + 'requestError': (request) => { + return $q.reject(request) + }, + 'responseError': (response) => { + return $q.reject(response) + }, + 'response': (response) => { + try { + if (/primaws\/rest\/priv\/myaccount\/requests/.test(response.config.url)) { + let interfaceLanguage = angular.element(document.querySelector('primo-explore')).injector().get('$rootScope').$$childHead.$ctrl.userSessionManagerService.getUserLanguage() || + window.appConfig['primo-view']['attributes-map'].interfaceLanguage + + let list_of_hold_states = { + 'en': ["in transit", "in process", "on hold shelf"], + 'de': ["transfer", "in bearbeitung", "bereitgestellt"], + 'fr': ["en cours de transfert", "en cours", "sur le rayon des réservations"], + 'it': ["in transito", "in processo", "scaffale prenotazioni"] + } + + if (Object.keys(list_of_hold_states).includes(interfaceLanguage)) { + let list_of_hold_states_regexp = RegExp(list_of_hold_states[interfaceLanguage].map(m => m.toLowerCase()).join('|')) + if (response.status == 200 && response.data.status == "ok") { + + //rewrite all cancellable holds. + response.data.data.holds.hold.map((m) => { + if (list_of_hold_states_regexp.test(m.holdstatus.toLowerCase())) { + m.cancel = 'N' + } + }) + + } + } else { + throw `No mapping found for ${interfaceLanguage}` + } + } + } catch (error) { + console.log(error) + } + return response + } + } + }]) + }]) \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/package.json b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/package.json new file mode 100644 index 0000000..b9c84da --- /dev/null +++ b/primo-explore/custom/src/js/slsp/slsp-http-intercept-requests/package.json @@ -0,0 +1,8 @@ +{ + "name": "slsp-http-intercept-requests", + "description": "Intercept and rewrite REQUESTS api calls to stop cancelling 'in transit' holds", + "author": {"name": "Mehmet Celik", "email": "mehmet.celik@kuleuven.be"}, + "version": "1.0.0", + "main": "index.js", + "license": "MIT" +} diff --git a/primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/index.js b/primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/index.js index 8d54cc0..4acaa1f 100644 --- a/primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/index.js +++ b/primo-explore/custom/src/js/slsp/slsp-ill-signin-order-logged-out/index.js @@ -1,2 +1,2 @@ -require('./js/epfl-ill-signin-order-logged-out.module.js') +// require('./js/epfl-ill-signin-order-logged-out.module.js') module.exports = 'epflIllSigninOrderLoggedOut'