diff --git a/primo-explore/custom/src/html/help/help_en.html b/primo-explore/custom/src/html/help/help_en.html index 13defa7..846e8f5 100644 --- a/primo-explore/custom/src/html/help/help_en.html +++ b/primo-explore/custom/src/html/help/help_en.html @@ -1,518 +1,530 @@

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 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/

-

Set language

+

Set language

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.

+
+ + +

Remove an account

+
+

If you want to have your swisscovery account deleted, please write a corresponding request to swisscovery, stating your first name, last name and User ID. +

+

Note that by having your swisscovery account deleted, your SWITCH edu-ID account is not affected. For the deletion of your SWITCH edu-ID account, please refer to https://help.switch.ch/eduid/faqs/?lang=en#account_deletion. If your SWITCH edu-ID is deleted, your swisscovery account will automatically be deleted too, unless there are open transactions or fees. +

-

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.

- + +

In case no other loan or request option is available, use the following form to place an interlibrary loan request. This might be subject to additional fees.

+ +

The Interlibrary loan request form is also available in the header of the start page.

+ +

Note: If this service is not available in your library, you won’t see the options above.

+ -

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

-

swisscovery search profiles

+

swisscovery search profiles

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 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 fc28351..c346b75 100644 --- a/primo-explore/custom/src/html/help/help_fr.html +++ b/primo-explore/custom/src/html/help/help_fr.html @@ -1,514 +1,528 @@

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 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 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.

+
+ + +

Supprimer un compte

+
+

Si vous souhaitez supprimer votre compte swisscovery, veuillez envoyer une demande en ce sens à swisscovery, en indiquant votre prénom, nom de famille et identifiant usager. +

+

Veuillez noter que la suppression de votre compte swisscovery n’a aucun impact sur votre compte SWITCH edu-ID. Pour la suppression de votre compte SWITCH edu-ID, veuillez vous référer à https://help.switch.ch/eduid/faqs/?lang=fr#account_deletion. Si votre SWITCH edu-ID est supprimé, votre compte swisscovery sera également automatiquement supprimé, sauf s’il existe des transactions ou frais ouverts. +

-

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.

- +

swisscovery offre l’accès à plus de 50 millions de notices d’exemplaires et à d’innombrables ressources électroniques. Il est cependant possible que la publication que vous cherchez ne soit pas disponible. Dans ce cas, vous pouvez déposer une demande de prêt entre bibliothèques (service payant), et le document sera emprunté dans une autre bibliothèque en Suisse ou à l’étranger. Avant d’effectuer une demande, swisscovery recommande de vérifier si la publication est disponible dans une autre institution, sous «Autres options de prêt et de demande». +

+ +

Si aucune autre option de demande ou de prêt n’est disponible, utilisez le formulaire suivant pour déposer une demande de prêt entre bibliothèques. La demande peut faire l’objet de frais supplémentaires.

+ +

Le formulaire de demande de prêt entre bibliothèques est aussi disponible dans l’en-tête de la page d’accueil.

+ +

Remarque: Si ce service n’est pas disponible dans votre bibliothèque, les options ci-dessus n’apparaîtront pas.

+ -

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 swisscovery

+

Profils de recherche de swisscovery

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

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

diff --git a/primo-explore/custom/src/js/briefview/collection_link.component.js b/primo-explore/custom/src/js/briefview/collection_link.component.js index 76f51aa..e08dc06 100644 --- a/primo-explore/custom/src/js/briefview/collection_link.component.js +++ b/primo-explore/custom/src/js/briefview/collection_link.component.js @@ -1,9 +1,14 @@ "use strict"; +/* + Ce module ajoute le lien vers la notice de collection sur les notices + filles. + */ + import {collectionLinkHtml} from './collection_link.html'; module.exports = { bindings: {afterCtrl: '<'}, controller: require ('./collection_link.controller.js'), template: collectionLinkHtml, } 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 8967ed5..2d45aa1 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,40 @@ 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(){ + + // Vérifie si l'analyse a déjà été effectuée. Si oui, le lien est + // directement retourné 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) { + // Pas de notice de série trouvée return null; } for (const serie of series){ - + // On ne retient que les notices de séries dont l'identifiant + // est un mms ID var m = serie.match(/\$\$Q(.*)\$\$Z(99\d{16})/); if (m){ - + // Un mms ID a été trouvé -> construction de l'url vers la notice. 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.component.js b/primo-explore/custom/src/js/briefview/pdf_article_link.component.js index e3f53ed..aba2821 100644 --- a/primo-explore/custom/src/js/briefview/pdf_article_link.component.js +++ b/primo-explore/custom/src/js/briefview/pdf_article_link.component.js @@ -1,9 +1,15 @@ "use strict"; +/* + Ce module ajoute le lien direct vers le fichier pdf quand celui-ci + est disponible via l'api de Browzine. + */ + + import {pdfArticleLinkHtml} from './pdf_article_link.html'; module.exports = { bindings: {afterCtrl: '<'}, controller: require('./pdf_article_link.controller.js'), template: pdfArticleLinkHtml, } 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 6a75ae9..8851394 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,86 @@ module.exports = ['$filter', '$http', 'checkEpflIPFactory', function($filter, $http, checkEpflIPFactory) { 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 = checkEpflIPFactory(); + vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip(); + // Retourne le doi de la ressource en vérifiant plusieurs emplacements + // dans le pnx. 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) } } } } } - + // Vérifie si un doi est disponible. Dans le cas contraire 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 { + // Empêchera une nouvelle recherche via get_doi vm.doi = null; } } } if (vm.hasOwnProperty('pdf_link')) { return true } return false } + + // Fonction interrogeant l'api de Browzine pour obtenir le lien direct vers + // le pdf. 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 65e163a..e0b192f 100644 --- a/primo-explore/custom/src/js/briefview/publisher_link.controller.js +++ b/primo-explore/custom/src/js/briefview/publisher_link.controller.js @@ -1,97 +1,116 @@ module.exports = ['$filter', '$http', 'checkEpflIPFactory', '$element', function($filter, $http, checkEpflIPFactory, $element) { this.parentCtrl = this.afterCtrl.parentCtrl; var vm = this + vm.is_link_to_suppress = false; + + // Fonction pour s'assurer que l'élément à supprimer le sera correctement + vm.$doCheck = function(){ + if (vm.is_link_to_suppress){ + vm.suppress_original_link() + } + } // Utilise le service pour vérifier si l'utilisateur est sur le réseau EPFL - vm.is_epfl_IP = checkEpflIPFactory(); + vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip(); // 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(){ var aval_lines = $element[0].parentElement.parentElement.parentElement.querySelectorAll('.not_restricted,.fulltext'); + + // Tant que cet attribut est vrai, la fonction $doCheck va tenter de supprimer le lien + vm.is_link_to_suppress = true; + + // console.log($element[0]); + // console.log(aval_lines); for (var aval_line of aval_lines){ - if (!aval_line.classList.contains('no-delete')){aval_line.parentElement.parentElement.parentElement.remove()} + if (!aval_line.classList.contains('no-delete')){ + aval_line.parentElement.parentElement.parentElement.remove(); + vm.is_link_to_suppress = false} break; } } /* 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()){ + // Ressource CDI 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()){ + // Ressource non CDI 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') { + // Dans la vue détaillée, l'url est accessible sans avoir à interroger le service vm.checked = true; - let rank = vm.parentCtrl.result.delivery.availability.indexOf('not_restricted') + 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 eaf3736..037755b 100644 --- a/primo-explore/custom/src/js/custom.js +++ b/primo-explore/custom/src/js/custom.js @@ -1,2 +1,2 @@ -!function n(i,l,s){function o(t,e){if(!l[t]){if(!i[t]){var r="function"==typeof require&&require;if(!e&&r)return r(t,!0);if(a)return a(t,!0);throw(r=new Error("Cannot find module '"+t+"'")).code="MODULE_NOT_FOUND",r}r=l[t]={exports:{}},i[t][0].call(r.exports,function(e){return o(i[t][1][e]||e)},r,r.exports,n,i,l,s)}return l[t].exports}for(var a="function"==typeof require&&require,e=0;e\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",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 s,o=i.value.match(/\$\$Q(.*)\$\$Z(99\d{16})/);if(o)return s=a.parentCtrl.$stateParams.lang?"&lang="+a.parentCtrl.$stateParams.lang:"",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("slspSearchResultAvailabilityLineAfter",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","checkEpflIPFactory",function(e,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var o=this;function a(e){e=e.match(/10\.\d{4,9}\/[-._;()/:A-Z0-9]+/i);if(e)return e[0]}o.is_epfl_IP=r(),o.get_doi=function(){if(o.parentCtrl.hasOwnProperty("result")&&o.parentCtrl.result.hasOwnProperty("pnx")){var e=o.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 s=i.value;if(a(s))return a(s)}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}}}},o.check_doi=function(){return o.hasOwnProperty("doi")||o.parentCtrl.hasOwnProperty("result")&&o.parentCtrl.result.hasOwnProperty("pnx")&&(o.get_doi()?(o.doi=o.get_doi(),o.set_url_pdf()):o.doi=null),!!o.hasOwnProperty("pdf_link")},o.set_url_pdf=function(){var e="https://public-api.thirdiron.com/public/v1/libraries/183/articles/doi/"+o.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 i="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","checkEpflIPFactory","$element",function(e,r,t,o){this.parentCtrl=this.afterCtrl.parentCtrl;var n=this;n.is_epfl_IP=t(),n.is_pc=function(){return"PC"===n.parentCtrl.result.context},n.is_ebook=function(){return n.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")?-1!==n.parentCtrl.result.pnx.control.recordtype[0].indexOf("book"):!!n.parentCtrl.result.pnx.display.hasOwnProperty("type")&&-1!==n.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf("book")},n.is_article=function(){return!!n.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")&&-1!==n.parentCtrl.result.pnx.control.recordtype[0].indexOf("article")},n.is_data_available=function(){return n.parentCtrl.result&&n.parentCtrl.result.pnx&&n.parentCtrl.result.delivery},n.is_fulltext=function(){var e=n.parentCtrl.result.delivery.availability;return-1!==e.indexOf("fulltext")||-1!==e.indexOf("not_restricted")},n.suppress_original_link=function(){var e=o[0].parentElement.parentElement.parentElement.querySelectorAll(".not_restricted,.fulltext"),t=!0,r=!1,n=void 0;try{for(var i,l=e[Symbol.iterator]();!(t=(i=l.next()).done);t=!0){var s=i.value;s.classList.contains("no-delete")||s.parentElement.parentElement.parentElement.remove();break}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}},n.is_publisher_url=function(){var e,t;return!n.checked&&n.is_data_available()&&n.is_epfl_IP&&(n.is_ebook()||n.is_article())&&(!n.parentCtrl.isFullView&&n.is_fulltext()&&n.is_pc()?(n.checked=!0,e=window.location.origin+"/primaws/rest/pub/pcDelivery/"+n.parentCtrl.result.pnx.control.recordid[0]+"?vid="+n.parentCtrl.$stateParams.vid,r.post(e,{doc:n.parentCtrl.result}).then(function(e){n.publisher_url=e.data.delivery.electronicServices[0].serviceUrl,n.suppress_original_link()})):n.parentCtrl.isFullView||!n.is_fulltext()||n.is_pc()?n.parentCtrl.isFullView&&n.parentCtrl.result.delivery.GetIt1&&"object"===i(n.parentCtrl.result.delivery.GetIt1)?(n.checked=!0,-1!==(t=n.parentCtrl.result.delivery.availability.indexOf("not_restricted"))&&(n.publisher_url=n.parentCtrl.result.delivery.GetIt1[0].links[t].link,n.suppress_original_link())):n.is_fulltext()||(n.checked=!0):(n.checked=!0,t=window.location.origin+"/primaws/rest/pub/edelivery/"+n.parentCtrl.result.pnx.control.recordid[0]+"?vid="+n.parentCtrl.$stateParams.vid,r.post(t,{doc:n.parentCtrl.result}).then(function(e){n.publisher_url=e.data.electronicServices[0].serviceUrl,n.suppress_original_link()}))),n.hasOwnProperty("publisher_url")}}]},{}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.checkEpflIPFactory=angular.module("checkEpflIPModule",[]).factory("checkEpflIPFactory",["jwtHelper",function(t){return function(){var e=sessionStorage.getItem("primoExploreJwt");if(e){e=t.decodeToken(e).userIp;if(e){e=e.match(/128\.17([89])\.(\d{1,3})\./);if(e&&("8"==e[1]||128<=parseInt(e[2])))return!0}return!1}}}])},{}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.factoryModule=void 0;e=e("./check_epfl_ip.factory");t.exports="factoryModule",(r.factoryModule=angular.module("factoryModule",[])).requires.push(e.checkEpflIPFactory.name)},{"./check_epfl_ip.factory":9}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.customTranslateFilter=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}}])},{}],12:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.filtersModule=void 0;e=e("./custom_translate.filter");(r.filtersModule=angular.module("filtersModule",[])).requires.push(e.customTranslateFilter.name)},{"./custom_translate.filter":11}],13:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},template:'
\n
'}},{}],14:[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":15}],15:[function(e,t,r){"use strict";t.exports=["$filter","checkEpflIPFactory",function(e,t){this.parentCtrl=this.afterCtrl.parentCtrl;var r,n,i,l,s,o,a,c=this;c.get_txt=function(){return e("customTranslate")("vpnMSG")},c.feedbackLink="",c.is_epfl_IP=!1,c.no_report_link=!1,c.parentCtrl.item.pnx&&(c.parentCtrl.item.pnx.addata.openaccess&&"true"===c.parentCtrl.item.pnx.addata.openaccess[0]&&(c.no_report_link=!0),c.parentCtrl.item.pnx.addata.oa&&"free_for_read"===c.parentCtrl.item.pnx.addata.oa[0]&&(c.no_report_link=!0),c.no_report_link||(c.is_epfl_IP=t(),c.user_ip=t.get_ip(),r=c.parentCtrl.item.pnx.control.recordid[0],n="",c.parentCtrl.item.pnx.display.title&&0ISBN")||-1ISSN")?o=c.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
'},begin:"2020-01-04T00:00:00Z",end:"2023-03-31T12:00:00Z"}},{}],18:[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":19,"./searchbar.component.js":20,"./topbar.component.js":21}],19:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controllerAs:"ctrl",controller:[function(){var t=this;this.$doCheck=function(){if(!t.modified&&"complete"===document.readyState){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)}}}]}},{}],20:[function(n,e,t){"use strict";e.exports={bindings:{parentCtrl:"<"},template:'
',controllerAs:"ctrl",controller:["$translate",function(t){var e,r=this;r.alert=n("./alert_message.js"),!(r.active=!1)===r.alert.active&&(e=Date.now(),new Date(r.alert.begin)\n

{{ 'mainTitle' | customTranslate }}

\n

{{ 'subTitle' | customTranslate }}

\n "}},{}],22:[function(e,t,r){"use strict";e("./briefview"),e("./homepage"),e("./fullView"),e("./filters"),e("./factory"),e("./slsp/slsp-archives-htgi"),e("./slsp/slsp-archives-viewit"),e("./slsp/slsp-http-intercept-requests"),e("./slsp/prm-user-area-expandable-after"),e("./slsp/prm-loan-after"),e("./slsp/prm-personal-info-after");angular.module("viewCustom",[].concat(["angularLoad"],["briefviewModule","homepageModule","fullviewModule","filtersModule","factoryModule"],["slspArchivesHtgi","slspArchivesViewit","slspHttpInterceptRequests","slspUserAreaExpandableAfterModule","slspLoanAfterModule","slspPersonalInfoAfterModule"]))},{"./briefview":4,"./factory":10,"./filters":12,"./fullView":16,"./homepage":18,"./slsp/prm-loan-after":23,"./slsp/prm-personal-info-after":28,"./slsp/prm-user-area-expandable-after":34,"./slsp/slsp-archives-htgi":35,"./slsp/slsp-archives-viewit":37,"./slsp/slsp-http-intercept-requests":39}],23:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspLoanAfterModule=void 0;e=e("./slsp-renew-item-text/slsp-renew-item-text.module");(r.slspLoanAfterModule=angular.module("slspLoanAfterModule",[]).component("prmLoanAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(e.slspRenewItemTextModule.name)},{"./slsp-renew-item-text/slsp-renew-item-text.module":25}],24:[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\r\n
\r\n {{$ctrl.getRenewText()}}\r\n\r\n
\r\n'})},{"./slsp-renew-item-text.controller":24}],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 div.layout-wrap.layout-align-center-start.layout-row > md-card:nth-child(2)")),t=angular.element(document.querySelector("#SLSPeditPersonalDetails"));e.append(t)}}catch(e){console.error("***SLSP*** an error occured: EditPersonalDetailsController\n\n"),console.error(e.message)}}}]),l)).$inject=["$scope"]},{}],27:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspEditPersonalDetailsModule=void 0;e=e("./slsp-edit-personal-details.controller");r.slspEditPersonalDetailsModule=angular.module("slspEditPersonalDetailsModule",[]).controller("slspEditPersonalDetailsController",e.slspEditPersonalDetailsController).component("slspEditPersonalDetailsComponent",{bindings:{afterCtrl:"<"},controller:"slspEditPersonalDetailsController",template:'{{ $ctrl.buttonMove() }}\r\n\r\n\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n'})},{"./slsp-edit-personal-details.controller":26}],28:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspPersonalInfoAfterModule=void 0;e=e("./slsp-edit-personal-details/slsp-edit-personal-details.module");(r.slspPersonalInfoAfterModule=angular.module("slspPersonalInfoAfterModule",[]).component("prmPersonalInfoAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(e.slspEditPersonalDetailsModule.name)},{"./slsp-edit-personal-details/slsp-edit-personal-details.module":27}],29:[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":29}],31:[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.requires.push(n.bcuLangSwitchModule.name),r.requires.push(e.slspIllSigninOrderLoggedOutModule.name)},{"./bcu-lang-switch/bcu-lang-switch.module":30,"./slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module":32}],35:[function(e,t,r){"use strict";e("./js/slsp-archives-htgi.module.js"),t.exports="slspArchivesHtgi"},{"./js/slsp-archives-htgi.module.js":36}],36:[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;var e,t;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"),t=(e=this.parentCtrl.item.pnx.control.originalsourceid[0]).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 '})},{}],37:[function(e,t,r){"use strict";e("./js/slsp-archives-viewit.module.js"),t.exports="slspArchivesViewit"},{"./js/slsp-archives-viewit.module.js":38}],38:[function(e,t,r){"use strict";angular.module("slspArchivesViewit",[]).component("prmSearchResultAvailabilityLineAfter",{bindings:{parentCtrl:"<"},controller:"ArchivesAvailabilityLineController",template:''}).component("prmAlmaViewitAfter",{bindings:{parentCtrl:"<"},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.$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\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,s=i.value.match(/\$\$Q(.*)\$\$Z(99\d{16})/);if(s)return o=a.parentCtrl.$stateParams.lang?"&lang="+a.parentCtrl.$stateParams.lang:"",a.collection_title=s[1],a.collection_url=window.location.origin+"/discovery/fulldisplay?vid="+a.parentCtrl.$stateParams.vid+"&tab="+a.parentCtrl.$stateParams.tab+"&docid=alma"+s[2]+"&context="+a.parentCtrl.$stateParams.context+o,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("slspSearchResultAvailabilityLineAfter",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","checkEpflIPFactory",function(e,t,r){this.parentCtrl=this.afterCtrl.parentCtrl;var s=this;function a(e){e=e.match(/10\.\d{4,9}\/[-._;()/:A-Z0-9]+/i);if(e)return e[0]}s.is_epfl_IP=r.is_epfl_ip(),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 n="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","checkEpflIPFactory","$element",function(e,r,t,s){this.parentCtrl=this.afterCtrl.parentCtrl;var a=this;a.is_link_to_suppress=!1,a.$doCheck=function(){a.is_link_to_suppress&&a.suppress_original_link()},a.is_epfl_IP=t.is_epfl_ip(),a.is_pc=function(){return"PC"===a.parentCtrl.result.context},a.is_ebook=function(){return a.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")?-1!==a.parentCtrl.result.pnx.control.recordtype[0].indexOf("book"):!!a.parentCtrl.result.pnx.display.hasOwnProperty("type")&&-1!==a.parentCtrl.result.pnx.display.type[0].toLowerCase().indexOf("book")},a.is_article=function(){return!!a.parentCtrl.result.pnx.control.hasOwnProperty("recordtype")&&-1!==a.parentCtrl.result.pnx.control.recordtype[0].indexOf("article")},a.is_data_available=function(){return a.parentCtrl.result&&a.parentCtrl.result.pnx&&a.parentCtrl.result.delivery},a.is_fulltext=function(){var e=a.parentCtrl.result.delivery.availability;return-1!==e.indexOf("fulltext")||-1!==e.indexOf("not_restricted")},a.suppress_original_link=function(){var e=s[0].parentElement.parentElement.parentElement.querySelectorAll(".not_restricted,.fulltext"),t=a.is_link_to_suppress=!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;o.classList.contains("no-delete")||(o.parentElement.parentElement.parentElement.remove(),a.is_link_to_suppress=!1);break}}catch(e){r=!0,n=e}finally{try{!t&&l.return&&l.return()}finally{if(r)throw n}}},a.is_publisher_url=function(){var e,t;return!a.checked&&a.is_data_available()&&a.is_epfl_IP&&(a.is_ebook()||a.is_article())&&(!a.parentCtrl.isFullView&&a.is_fulltext()&&a.is_pc()?(a.checked=!0,e=window.location.origin+"/primaws/rest/pub/pcDelivery/"+a.parentCtrl.result.pnx.control.recordid[0]+"?vid="+a.parentCtrl.$stateParams.vid,r.post(e,{doc:a.parentCtrl.result}).then(function(e){a.publisher_url=e.data.delivery.electronicServices[0].serviceUrl,a.suppress_original_link()})):a.parentCtrl.isFullView||!a.is_fulltext()||a.is_pc()?a.parentCtrl.isFullView&&a.parentCtrl.result.delivery.GetIt1&&"object"===n(a.parentCtrl.result.delivery.GetIt1)?(a.checked=!0,-1!==(t=a.parentCtrl.result.delivery.availability.indexOf("not_restricted"))&&(a.publisher_url=a.parentCtrl.result.delivery.GetIt1[0].links[t].link,a.suppress_original_link())):a.is_fulltext()||(a.checked=!0):(a.checked=!0,t=window.location.origin+"/primaws/rest/pub/edelivery/"+a.parentCtrl.result.pnx.control.recordid[0]+"?vid="+a.parentCtrl.$stateParams.vid,r.post(t,{doc:a.parentCtrl.result}).then(function(e){a.publisher_url=e.data.electronicServices[0].serviceUrl,a.suppress_original_link()}))),a.hasOwnProperty("publisher_url")}}]},{}],9:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.checkEpflIPFactory=angular.module("checkEpflIPModule",[]).factory("checkEpflIPFactory",["jwtHelper",function(t){function r(){var e=sessionStorage.getItem("primoExploreJwt");if(e)return t.decodeToken(e).userIp}return{is_epfl_ip:function(){var e=r();if(e){e=e.match(/128\.17([89])\.(\d{1,3})\./);if(e&&("8"==e[1]||128<=parseInt(e[2])))return!0}return!1},get_ip:r}}])},{}],10:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.factoryModule=void 0;e=e("./check_epfl_ip.factory");t.exports="factoryModule",(r.factoryModule=angular.module("factoryModule",[])).requires.push(e.checkEpflIPFactory.name)},{"./check_epfl_ip.factory":9}],11:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});r.customTranslateFilter=angular.module("customTranslateFilter",[]).filter("customTranslate",["$translate",function(r){return function(e){var t={contactEpflLibrary:{fr:"https://www.epfl.ch/campus/library/fr/informations-pratiques/#contact",en:"https://www.epfl.ch/campus/library/practical-information/#contact"},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}}])},{}],12:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.filtersModule=void 0;e=e("./custom_translate.filter");(r.filtersModule=angular.module("filtersModule",[])).requires.push(e.customTranslateFilter.name)},{"./custom_translate.filter":11}],13:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controller:e("./epfl-i-button.controller.js")}},{"./epfl-i-button.controller.js":14}],14:[function(e,t,r){"use strict";t.exports=["$element","$filter",function(r,n){var i=this;i.$doCheck=function(){var e,t;!i.checked&&i.parentCtrl.loc&&(t=r[0].parentElement.parentElement.getElementsByTagName("slsp-i-button-component")[0].getElementsByTagName("a")[0],"E02"===this.parentCtrl.loc.location.libraryCode&&t.setAttribute("href",n("customTranslate")("contactEpflLibrary")),"/discovery/custom/41SLSP_NETWORK-CENTRAL_PACKAGE/img/information.png"==(e=t.getElementsByTagName("img")[0]).getAttribute("src")&&(t=i.parentCtrl.configurationUtil.vid.replace(":","-"),e.setAttribute("src","custom/"+t+"/img/information.png"),e.setAttribute("width","22"),i.checked=!0))}}]},{}],15:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controller:e("./epfl_almaviewit.controller.js"),template:'\r\n\r\n\r\n'}},{"./epfl_almaviewit.controller.js":16}],16:[function(e,t,r){"use strict";t.exports=["$filter","checkEpflIPFactory",function(e,t){var r,n,i,l,o,s,a,c=this;c.get_txt=function(){return e("customTranslate")("vpnMSG")},c.feedbackLink="",c.is_epfl_IP=!1,c.no_report_link=!1,c.parentCtrl.item.pnx&&(c.parentCtrl.item.pnx.addata.openaccess&&"true"===c.parentCtrl.item.pnx.addata.openaccess[0]&&(c.no_report_link=!0),c.parentCtrl.item.pnx.addata.oa&&"free_for_read"===c.parentCtrl.item.pnx.addata.oa[0]&&(c.no_report_link=!0),c.no_report_link||(c.is_epfl_IP=t.is_epfl_ip(),c.user_ip=t.get_ip(),r=c.parentCtrl.item.pnx.control.recordid[0],n="",c.parentCtrl.item.pnx.display.title&&0ISBN")||-1ISSN")?s=c.parentCtrl.item.pnx.display.identifier.join(", ").replace(/<\/b>/g,"").replace(//g,""):-1'}},{}],19:[function(e,t,r){"use strict";t.exports={active:!1,txt:{fr:'
\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
'},begin:"2020-01-04T00:00:00Z",end:"2023-03-31T12:00:00Z"}},{}],20:[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":21,"./searchbar.component.js":22,"./topbar.component.js":23}],21:[function(e,t,r){"use strict";t.exports={bindings:{parentCtrl:"<"},controllerAs:"ctrl",controller:[function(){var t=this;this.$doCheck=function(){if(!t.modified&&"complete"===document.readyState){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)}}}]}},{}],22:[function(n,e,t){"use strict";e.exports={bindings:{parentCtrl:"<"},template:'
',controllerAs:"ctrl",controller:["$translate",function(t){var e,r=this;r.alert=n("./alert_message.js"),!(r.active=!1)===r.alert.active&&(e=Date.now(),new Date(r.alert.begin)\n

{{ 'mainTitle' | customTranslate }}

\n

{{ 'subTitle' | customTranslate }}

\n "}},{}],24:[function(e,t,r){"use strict";e("./briefview"),e("./homepage"),e("./fullView"),e("./filters"),e("./factory"),e("./slsp_mod_epfl"),e("./slsp/slsp-ill-signin-order-alert"),e("./slsp/prm-locations-after"),e("./slsp/prm-location-items-after"),e("./slsp/slsp-archives-htgi"),e("./slsp/slsp-archives-viewit"),e("./slsp/slsp-http-intercept-requests"),e("./slsp/prm-user-area-expandable-after"),e("./slsp/prm-loan-after"),e("./slsp/prm-personal-info-after");angular.module("viewCustom",[].concat(["angularLoad"],["briefviewModule","homepageModule","fullviewModule","filtersModule","factoryModule","epflCourierInfoModule"],["slspIllSigninOrderAlert","ethLocationsAfterModule","ethLocationItemsAfterModule","slspArchivesHtgi","slspArchivesViewit","slspHttpInterceptRequests","slspUserAreaExpandableAfterModule","slspLoanAfterModule","slspPersonalInfoAfterModule"]))},{"./briefview":4,"./factory":10,"./filters":12,"./fullView":17,"./homepage":20,"./slsp/prm-loan-after":25,"./slsp/prm-location-items-after":28,"./slsp/prm-locations-after":33,"./slsp/prm-personal-info-after":38,"./slsp/prm-user-area-expandable-after":44,"./slsp/slsp-archives-htgi":45,"./slsp/slsp-archives-viewit":47,"./slsp/slsp-http-intercept-requests":49,"./slsp/slsp-ill-signin-order-alert":51,"./slsp_mod_epfl":54}],25:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspLoanAfterModule=void 0;e=e("./slsp-renew-item-text/slsp-renew-item-text.module");(r.slspLoanAfterModule=angular.module("slspLoanAfterModule",[]).component("prmLoanAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(e.slspRenewItemTextModule.name)},{"./slsp-renew-item-text/slsp-renew-item-text.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\r\n \r\n\r\n
\r\n {{$ctrl.getRenewText()}}\r\n\r\n
\r\n'})},{"./slsp-renew-item-text.controller":26}],28:[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"),e=e("./slsp-i-button/slsp-i-button.module"),r=r.ethLocationItemsAfterModule=angular.module("ethLocationItemsAfterModule",[]).component("prmLocationItemsAfter",{bindings:{parentCtrl:"<"},template:''});r.requires.push(n.ethLocationItemsFilterModule.name),r.requires.push(e.slspIButtonModule.name)},{"./eth-location-items-filter/eth-location-items-filter.module":30,"./slsp-i-button/slsp-i-button.module":32}],29:[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 \r\n {{ $ctrl.getLibrary() }}\r\n \r\n'})},{"./slsp-i-button.controller":31}],33:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.ethLocationsAfterModule=void 0;e=e("./eth-locations-filter/eth-locations-filter.module");(r.ethLocationsAfterModule=angular.module("ethLocationsAfterModule",[]).component("prmLocationsAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(e.ethLocationsFilterModule.name)},{"./eth-locations-filter/eth-locations-filter.module":35}],34:[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 div.layout-wrap.layout-align-center-start.layout-row > md-card:nth-child(2)")),t=angular.element(document.querySelector("#SLSPeditPersonalDetails"));e.append(t)}}catch(e){console.error("***SLSP*** an error occured: EditPersonalDetailsController\n\n"),console.error(e.message)}}}]),l)).$inject=["$scope"]},{}],37:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspEditPersonalDetailsModule=void 0;e=e("./slsp-edit-personal-details.controller");r.slspEditPersonalDetailsModule=angular.module("slspEditPersonalDetailsModule",[]).controller("slspEditPersonalDetailsController",e.slspEditPersonalDetailsController).component("slspEditPersonalDetailsComponent",{bindings:{afterCtrl:"<"},controller:"slspEditPersonalDetailsController",template:'{{ $ctrl.buttonMove() }}\r\n\r\n\r\n\r\n\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n'})},{"./slsp-edit-personal-details.controller":36}],38:[function(e,t,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.slspPersonalInfoAfterModule=void 0;e=e("./slsp-edit-personal-details/slsp-edit-personal-details.module");(r.slspPersonalInfoAfterModule=angular.module("slspPersonalInfoAfterModule",[]).component("prmPersonalInfoAfter",{bindings:{parentCtrl:"<"},template:''})).requires.push(e.slspEditPersonalDetailsModule.name)},{"./slsp-edit-personal-details/slsp-edit-personal-details.module":37}],39:[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":39}],41:[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.requires.push(n.bcuLangSwitchModule.name),r.requires.push(e.slspIllSigninOrderLoggedOutModule.name)},{"./bcu-lang-switch/bcu-lang-switch.module":40,"./slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module":42}],45:[function(e,t,r){"use strict";e("./js/slsp-archives-htgi.module.js"),t.exports="slspArchivesHtgi"},{"./js/slsp-archives-htgi.module.js":46}],46:[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;var e,t;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"),t=(e=this.parentCtrl.item.pnx.control.originalsourceid[0]).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 '})},{}],47:[function(e,t,r){"use strict";e("./js/slsp-archives-viewit.module.js"),t.exports="slspArchivesViewit"},{"./js/slsp-archives-viewit.module.js":48}],48:[function(e,t,r){"use strict";angular.module("slspArchivesViewit",[]).component("prmSearchResultAvailabilityLineAfter",{bindings:{parentCtrl:"<"},controller:"ArchivesAvailabilityLineController",template:''}).component("prmAlmaViewitAfter",{bindings:{parentCtrl:"<"},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.$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{{$ctrl.getAlert()}}'})},{}],53:[function(e,t,r){"use strict";angular.module("epflCourierInfoModule",[]).controller("CourierInfoController",["$filter","$element",function(i,e,t,r,n){var l=this;l.form=e[0].parentElement,l.$doCheck=function(){var e,t,r=!1,n=2;void 0===l.form.children[0].children[1]||void 0===l.form.children[0].children[1].children[0]&&"costWarningPEB"!=l.typeFeeAlert()?void 0!==l.form.children[0].children[0]&&void 0!==l.form.children[0].children[0].children[0]&&(r=l.form.children[0].children[0].children[0],n=3):(r=l.form.children[0].children[1].children[0],"costWarningPEB"==l.typeFeeAlert()&&(n=3)),(r&&r.children.length==n&&1

'+l.getFeeAlert()+"

","costWarningScan"==l.typeFeeAlert()&&(e=i("customTranslate")("illButton"),t+='

'+e+"

"),t+='

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

",t=angular.element(t)[0],r.children.length==n?r.insertBefore(t,r.children[n-1]):r.children[r.children.length-2].replaceWith(t))},Object.defineProperty(l.parentCtrl,"form",{configurable:!0,get:function(){var e=this.getFilteredForm(["label","multiLabel"],!1);if(!l.hasOwnProperty("pickupLocationsListOrdered"))for(var t=0;t\r\n \r\n `\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('slspSearchResultAvailabilityLineAfter', 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', 'checkEpflIPFactory', function($filter, $http, checkEpflIPFactory) {\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 = checkEpflIPFactory();\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', 'checkEpflIPFactory', '$element', function($filter, $http, checkEpflIPFactory, $element) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n\r\n // Utilise le service pour vérifier si l'utilisateur est sur le réseau EPFL\r\n vm.is_epfl_IP = checkEpflIPFactory();\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 var aval_lines = $element[0].parentElement.parentElement.parentElement.querySelectorAll('.not_restricted,.fulltext');\r\n for (var aval_line of aval_lines){\r\n if (!aval_line.classList.contains('no-delete')){aval_line.parentElement.parentElement.parentElement.remove()}\r\n break;\r\n }\r\n\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","/*\r\n DESCRIPTION:\r\n Permet de vérifier si l'utilisateur est connecté sur la plage\r\n réseau de l'EPFL.\r\n\r\n Le réseau EPFL doit commencer par 128.178 ou 128.179\r\n Pour 128.178, la plage ne commence qu'à 128.178.129\r\n\r\n Le service s'utilise de la manière suivante:\r\n module.exports = ['$filter', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) {\r\n vm.is_epfl_IP = checkEpflIPFactory();}]\r\n*/\r\n\r\n// EPFL : Fonctions de vérification des types utilisateurs\r\nexport const checkEpflIPFactory = angular\r\n .module('checkEpflIPModule', [])\r\n .factory('checkEpflIPFactory', ['jwtHelper', function( jwtHelper ){\r\n\r\n const 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\r\n return isEpflIP;\r\n }]);\r\n","module.exports = 'factoryModule'\r\n\r\nimport {checkEpflIPFactory} from './check_epfl_ip.factory';\r\n\r\nexport const factoryModule = angular\r\n .module('factoryModule', [])\r\n\r\nfactoryModule.requires.push(checkEpflIPFactory.name);\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\nexport const customTranslateFilter = angular\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","import {customTranslateFilter} from './custom_translate.filter';\r\n\r\nexport const filtersModule = angular\r\n .module('filtersModule', []);\r\n\r\nfiltersModule.requires.push(customTranslateFilter.name);\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', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) {\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 if (vm.parentCtrl.item.pnx){\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 = checkEpflIPFactory();\r\n vm.user_ip = checkEpflIPFactory.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\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: false,\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 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 de chaque digest.\r\n this.$doCheck = function() {\r\n\r\n // Vérifie si la page est chargée\r\n if (!vm.modified && document.readyState === 'complete'){\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 // L'élément n'est pas trouvé. Plus de nouvelles vérifications\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 // La valeur est écrasée par la suite si l'alerte est 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\r\n // déclenche l'affichage de l'alerte\r\n vm.active = true;\r\n }\r\n }\r\n\r\n // Renvoie le texte en fonction de la langue\r\n vm.get_txt = function(){\r\n var lang = ['en', 'fr'].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);\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 // Se base sur l'url courante pour fonctionner quel que soit l'environnement.\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- databases: pour l'instant il n'y a pas de personnalisation\r\n*/\r\n\r\n/*************/\r\n/* EPFL part */\r\n/*************/\r\n\r\nimport './briefview';\r\nimport './homepage';\r\nimport './fullView';\r\nimport './filters';\r\nimport './factory';\r\n\r\nconst epfl_modules = [\r\n 'briefviewModule',\r\n 'homepageModule',\r\n 'fullviewModule',\r\n 'filtersModule',\r\n 'factoryModule',\r\n // 'slspLoanAfterModule'\r\n];\r\n\r\n/*************/\r\n/* SLSP part */\r\n/*************/\r\n\r\n// import './slsp-courier-info';\r\n// import './slsp-ill-signin-order-alert';\r\n// import './prm-locations-after';\r\n// import './prm-location-items-after';\r\nimport './slsp/slsp-archives-htgi';\r\nimport './slsp/slsp-archives-viewit';\r\nimport './slsp/slsp-http-intercept-requests';\r\nimport './slsp/prm-user-area-expandable-after';\r\nimport './slsp/prm-loan-after';\r\nimport './slsp/prm-personal-info-after';\r\n\r\nconst slsp_modules = [\r\n // 'slspCourierInfo',\r\n // 'slspIllSigninOrderAlert',\r\n // 'ethLocationsAfterModule',\r\n // 'ethLocationItemsAfterModule',\r\n 'slspArchivesHtgi',\r\n 'slspArchivesViewit',\r\n 'slspHttpInterceptRequests',\r\n 'slspUserAreaExpandableAfterModule',\r\n 'slspLoanAfterModule',\r\n 'slspPersonalInfoAfterModule'\r\n];\r\n\r\n\r\n\r\n// import './databases';\r\nvar app = angular.module('viewCustom', [].concat(['angularLoad'],\r\n epfl_modules,\r\n slsp_modules));\r\n","\r\nimport {slspRenewItemTextModule} from './slsp-renew-item-text/slsp-renew-item-text.module';\r\n\r\nexport const slspLoanAfterModule = angular\r\n .module('slspLoanAfterModule', [])\r\n .component('prmLoanAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nslspLoanAfterModule.requires.push(slspRenewItemTextModule.name);\r\n","//--------Renewstatus display of loan items ---------------------------------------\r\n\r\nexport class slspRenewItemTextController {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n $onInit() {\r\n try {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.getRenewText = getRenewText;\r\n\r\n function getRenewText() {\r\n if (this.parentCtrl.item.renewstatuses !== undefined && this.parentCtrl.item.renewstatuses.renewstatus[0] !== undefined) {\r\n return this.parentCtrl.item.renewstatuses.renewstatus[0];\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n }\r\n\r\n catch (e) {\r\n console.error(\"***SLSP*** an error occured: slspRenewItemTextController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspRenewItemTextController.$inject = [];\r\n\r\n","\r\n\r\n\r\n\r\n\r\n import {slspRenewItemTextController} from './slsp-renew-item-text.controller';\r\n import {slspRenewItemTextHtml} from './slsp-renew-item-text.html';\r\n\r\n export const slspRenewItemTextModule = angular\r\n .module('slspRenewItemTextModule', [])\r\n .controller('slspRenewItemTextController', slspRenewItemTextController)\r\n .component('slspRenewItemTextComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspRenewItemTextController',\r\n template: slspRenewItemTextHtml\r\n })","\r\n\r\n//-----------------------------------------------\r\n\r\n\r\nexport class slspEditPersonalDetailsController {\r\n\r\n constructor($scope, $element) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n\r\n }\r\n\r\n $doCheck() {\r\n try {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n\r\n\r\n\r\n let lang = 'en';\r\n let sms = this.$scope.$root.$$childHead.$ctrl.userSessionManagerService;\r\n if (sms) {\r\n lang = sms.getInterfaceLanguage();\r\n }\r\n\r\n this.detailsBaseEdu = \"https:\\/\\/eduid.ch\\/web\\/change-account-data\\/2\\/?lang=\" + lang;\r\n this.detailsBaseReg = \"https:\\/\\/registration.slsp.ch\\/library-card\\/?lang=\" + lang;\r\n this.exclude = ['STAFF', '11', '12', '13', '14', '15', '16', '91', '92', '99'];\r\n this.grpA = ['11', '91', '92'];\r\n this.grpB = ['12', '13', '14', '15', '16'];\r\n\r\n\r\n this.getPatronGrp = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let patron = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (!this.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 this.grpLabelA = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelA = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (this.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 this.grpLabelB = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelB = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (this.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 this.buttonMove = function () {\r\n let parentElement = angular.element(document.querySelector('prm-personal-info > div.layout-wrap.layout-align-center-start.layout-row > md-card:nth-child(2)'));\r\n let element = angular.element(document.querySelector('#SLSPeditPersonalDetails'));\r\n parentElement.append(element);\r\n }\r\n\r\n\r\n }\r\n catch (e) {\r\n console.error(\"***SLSP*** an error occured: EditPersonalDetailsController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspEditPersonalDetailsController.$inject = ['$scope'];\r\n\r\n","import {slspEditPersonalDetailsController} from './slsp-edit-personal-details.controller';\r\nimport {slspEditPersonalDetailsHtml} from './slsp-edit-personal-details.html';\r\n\r\n\r\nexport const slspEditPersonalDetailsModule = angular\r\n .module('slspEditPersonalDetailsModule', [])\r\n .controller('slspEditPersonalDetailsController', slspEditPersonalDetailsController)\r\n .component('slspEditPersonalDetailsComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspEditPersonalDetailsController',\r\n template: slspEditPersonalDetailsHtml\r\n })","import {slspEditPersonalDetailsModule} from './slsp-edit-personal-details/slsp-edit-personal-details.module';\r\n\r\n\r\nexport const slspPersonalInfoAfterModule = angular\r\n .module('slspPersonalInfoAfterModule', [])\r\n .component('prmPersonalInfoAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\n slspPersonalInfoAfterModule.requires.push(slspEditPersonalDetailsModule.name);\r\n\r\n","export class bcuLangSwitchController {\r\n\r\n constructor($element, $window) {\r\n this.$parent = $element.parent().parent()[0];\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$window = $window;\r\n }\r\n\r\n $onInit() {\r\n try {\r\n \r\n this.languages = [\"de\",\"fr\",\"it\",\"en\"];\r\n if (!this.languages.includes(this.parentCtrl.lang)) {\r\n this.changeLanguage(\"en\");\r\n }\r\n \r\n }\r\n catch (e) {\r\n console.error(\"***BCUFR*** bcuLangSwitchControler $onInit\");\r\n console.error(e.message);\r\n }\r\n };\r\n\r\n changeLanguage(lang) {\r\n \r\n this.parentCtrl.changeLangService.addLangParamToUrl(lang);\r\n let t = this.parentCtrl;\r\n this.parentCtrl.i18nService.setLanguage(lang).then(function(){\r\n t.$timeout(function(){return t.$state.go(t.$state.current,{lang:lang},{reload:!0})})\r\n });\r\n };\r\n\r\n}\r\nbcuLangSwitchController.$inject = ['$element'];","/**\r\n* @ngdoc module\r\n* @name bcuLangSwitchModule\r\n*\r\n* @description\r\n* - Add LangSwitch to user area\r\n* @example\r\n* each view\r\n*\r\n*/\r\nimport {bcuLangSwitchController} from './bcu-lang-switch.controller';\r\n\r\nexport const bcuLangSwitchModule = angular\r\n .module('bcuLangSwitchModule', [])\r\n .controller('bcuLangSwitchController', bcuLangSwitchController)\r\n .component('bcuLangSwitchComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'bcuLangSwitchController',\r\n// template: ''\r\n template: ''\r\n })\r\n","\r\nexport class slspIllSigninOrderLoggedOutController {\r\n\r\n constructor(slspIllSigninOrderLoggedOutService, $scope) {\r\n this.slspIllSigninOrderLoggedOutService = slspIllSigninOrderLoggedOutService;\r\n this.$scope = $scope;\r\n }\r\n\r\n $doCheck() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.usrNme = this.slspIllSigninOrderLoggedOutService.isGuest();\r\n\r\n if (this.$scope.usrNme == true) {\r\n let myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.addClass('logged-out')\r\n }\r\n \r\n else {\r\n let myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.removeClass('logged-out');\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: slspIllSigninOrderLoggedOutController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspIllSigninOrderLoggedOutController.$inject = ['slspIllSigninOrderLoggedOutService', '$scope'];\r\n \r\n\r\n","\r\n\r\n //--------ILL Signin Order - if logged out ---------------------------------------\r\n \r\n\r\n import {slspIllSigninOrderLoggedOutController} from './slsp-ill-signin-order-logged-out.controller';\r\n import {slspIllSigninOrderLoggedOutService} from './slsp-ill-signin-order-logged-out.service';\r\n\r\n export const slspIllSigninOrderLoggedOutModule = angular\r\n .module('slspIllSigninOrderLoggedOutModule', [])\r\n .factory('slspIllSigninOrderLoggedOutService', slspIllSigninOrderLoggedOutService)\r\n .controller('slspIllSigninOrderLoggedOutController', slspIllSigninOrderLoggedOutController)\r\n .component('slspIllSigninOrderLoggedOutComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspIllSigninOrderLoggedOutController',\r\n \r\n })\r\n ","\r\n\r\n export const slspIllSigninOrderLoggedOutService = ['jwtHelper', function( jwtHelper ){\r\n\r\n function getDecodedToken(){\r\n try{\r\n if (!sessionStorage){\r\n console.error(\"***SLSP*** no session storage\")\r\n return null;\r\n }\r\n let jwt = sessionStorage.getItem('primoExploreJwt');\r\n if (!jwt){\r\n return null;\r\n }\r\n return jwtHelper.decodeToken(jwt);\r\n }\r\n catch(e){\r\n console.error(\"**SLSP*** an error occured: userService.getDecodedToken:\");\r\n console.error(e.message);\r\n }\r\n }\r\n \r\n function isGuest(){\r\n try{\r\n let decodedToken = getDecodedToken();\r\n if (!decodedToken) {\r\n return null;\r\n }\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 catch(e){\r\n console.error(\"***SLSP*** an error occured: userService.isGuest:\");\r\n console.error(e.message);\r\n }\r\n }\r\n \r\n return {\r\n isGuest: isGuest,\r\n getDecodedToken: getDecodedToken\r\n };\r\n }]\r\n ","import {bcuLangSwitchModule} from './bcu-lang-switch/bcu-lang-switch.module';\r\nimport {slspIllSigninOrderLoggedOutModule} from './slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module';\r\n\r\nexport const slspUserAreaExpandableAfterModule = angular\r\n .module('slspUserAreaExpandableAfterModule', [])\r\n .component('prmUserAreaExpandableAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``,\r\n });\r\n\r\nslspUserAreaExpandableAfterModule.requires.push(bcuLangSwitchModule.name);\r\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', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'ArchivesAvailabilityLineController',\r\n template:''\r\n })\r\n\r\n .component('prmAlmaViewitAfter', {\r\n bindings: { parentCtrl: '<' },\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.$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 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/slsp-http-intercept-requests.module.js')\r\nmodule.exports = 'slspHttpInterceptRequests'","export const slspHttpInterceptRequests = angular.module('slspHttpInterceptRequests', ['ng'])\r\n .config(['$httpProvider', ($httpProvider) => {\r\n $httpProvider.interceptors.push(['$q', ($q) => {\r\n return {\r\n 'request': (request) => {\r\n return request\r\n },\r\n 'requestError': (request) => {\r\n return $q.reject(request)\r\n },\r\n 'responseError': (response) => {\r\n return $q.reject(response)\r\n },\r\n 'response': (response) => {\r\n try {\r\n if (/primaws\\/rest\\/priv\\/myaccount\\/requests/.test(response.config.url)) {\r\n if (response.status == 200 && response.data.status == \"ok\") {\r\n let interfaceLanguage = angular.element(document.querySelector('primo-explore')).injector().get('$rootScope').$$childHead.$ctrl.userSessionManagerService.getUserLanguage() ||\r\n window.appConfig['primo-view']['attributes-map'].interfaceLanguage\r\n\r\n let list_of_hold_states = {\r\n 'en': [\"in transit\", \"in process\", \"on hold shelf\"],\r\n 'de': [\"transfer\", \"in bearbeitung\", \"bereitgestellt\"],\r\n 'fr': [\"en cours de transfert\", \"en cours\", \"sur le rayon des réservations\"],\r\n 'it': [\"in transito\", \"in processo\", \"scaffale prenotazioni\"]\r\n }\r\n let list_of_photocopy_states = {\r\n 'en': [\"in transit\", \"in process\"],\r\n 'de': [\"transfer\", \"in bearbeitung\"],\r\n 'fr': [\"en cours de transfert\", \"en cours\"],\r\n 'it': [\"in transito\", \"in processo\"]\r\n }\r\n if (Object.keys(list_of_hold_states).includes(interfaceLanguage)) {\r\n let list_of_hold_states_regexp = RegExp(list_of_hold_states[interfaceLanguage].map(m => m.toLowerCase()).join('|'))\r\n // rewrite cancellable holds\r\n response.data.data.holds.hold.map((m) => {\r\n if (list_of_hold_states_regexp.test(m.holdstatus.toLowerCase())) {\r\n m.cancel = 'N'\r\n }\r\n })\r\n }\r\n else {\r\n throw `No mapping found for holds: ${interfaceLanguage}`\r\n }\r\n\r\n if (Object.keys(list_of_photocopy_states).includes(interfaceLanguage)) {\r\n let list_of_photocopy_states_regexp = RegExp(list_of_photocopy_states[interfaceLanguage].map(m => m.toLowerCase()).join('|'))\r\n // rewrite cancellable photocopies\r\n response.data.data.photocopies.photocopy.map((m) => {\r\n if (list_of_photocopy_states_regexp.test(m.requeststatus.toLowerCase())) {\r\n m.cancel = 'N'\r\n }\r\n })\r\n }\r\n else {\r\n throw `No mapping found for photocopies: ${interfaceLanguage}`\r\n }\r\n }\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n return response;\r\n }\r\n }\r\n }])\r\n }])\r\n"]} \ 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/factory/check_epfl_ip.factory.js","primo-explore/custom/src/js/factory/index.js","primo-explore/custom/src/js/filters/custom_translate.filter.js","primo-explore/custom/src/js/filters/index.js","primo-explore/custom/src/js/fullView/epfl-i-button.component.js","primo-explore/custom/src/js/fullView/epfl-i-button.controller.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/fullView/slspLocationItemsAfter.component.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-loan-after/slsp-loan-after.module.js","primo-explore/custom/src/js/slsp/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.controller.js","primo-explore/custom/src/js/slsp/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.module.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/slsp-i-button.controller.js","primo-explore/custom/src/js/slsp/prm-location-items-after/slsp-i-button/slsp-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-personal-info-after/slsp-edit-personal-details/slsp-edit-personal-details.controller.js","primo-explore/custom/src/js/slsp/prm-personal-info-after/slsp-edit-personal-details/slsp-edit-personal-details.module.js","primo-explore/custom/src/js/slsp/prm-personal-info-after/slsp-personal-info-after.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-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","primo-explore/custom/src/js/slsp_mod_epfl/epfl-courier-info.module.js","primo-explore/custom/src/js/slsp_mod_epfl/index.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","lang","m","value","match","$stateParams","collection_title","window","location","origin","vid","tab","context","err","return","briefview_module","angular","component","checkEpflIPFactory","parse_doi","txt","is_epfl_IP","is_epfl_ip","get_doi","addata","doi","control","recordtype","identifier","check_doi","set_url_pdf","url","method","then","response","status","pdf_link","data","fullTextFile","$element","is_link_to_suppress","$doCheck","suppress_original_link","is_pc","is_ebook","indexOf","type","toLowerCase","is_article","is_data_available","delivery","is_fulltext","availability","aval_lines","parentElement","querySelectorAll","aval_line","classList","contains","remove","is_publisher_url","_url","checked","isFullView","recordid","post","doc","publisher_url","electronicServices","serviceUrl","GetIt1","_typeof","rank","links","link","factory","jwtHelper","get_ip","jwt","sessionStorage","getItem","decodeToken","userIp","userIP","found","parseInt","_check_epfl_ip","factoryModule","requires","push","name","customTranslateFilter","filter","$translate","trad","contactEpflLibrary","fr","en","costWarningScan","de","it","costWarningScanEPFL","costWarningNetworkLoan","costWarningPEB","mainTitle","subTitle","switchEduID","illButton","feedbackLink","vpnMSG","feedbackLinkMSG","pdfAccess","seriesLink","includes","use","_custom_translate","filtersModule","img","view","loc","getElementsByTagName","libraryCode","setAttribute","getAttribute","configurationUtil","replace","mmsId","title","creationdate","creator","subject","get_txt","no_report_link","item","openaccess","oa","user_ip","join","ident","substring","userAgent","navigator","body","encodeURIComponent","fullview_module","active","begin","end","homepage_module","controllerAs","modified","document","readyState","elem","querySelector","removeAttribute","d_now","alert","Date","now","showTabsAndScopes","$location","absUrl","split","concat","_slspRenewItemText","slspLoanAfterModule","slspRenewItemTextModule","slspRenewItemTextController","_classCallCheck","getRenewText","renewstatuses","renewstatus","console","error","message","$inject","_ethLocationItemsFilter","_slspIButton","ethLocationItemsAfterModule","ethLocationItemsFilterModule","slspIButtonModule","ethLocationItemsFilterController","$timeout","$scope","_this","$watch","newValue","oldValue","scope","$ctrl","isLocationsFilterVisible","currentItemsArray","slspIButtonController","getLibrary","currLoc","librarycodeTranslation","getLibraryCode","getLanguage","userSessionManagerService","$$search","biblinkText","biblinkBase","_ethLocationsFilter","ethLocationsAfterModule","ethLocationsFilterModule","ethLocationsFilterController","slspEditPersonalDetailsController","sms","$root","$$childHead","getInterfaceLanguage","detailsBaseEdu","detailsBaseReg","exclude","grpA","grpB","getPatronGrp","personalInfoService","personalInfo","patron","patronstatus","registration","institution","patronstatuscode","grpLabelA","labelA","grpLabelB","labelB","buttonMove","element","append","_slspEditPersonalDetails","slspEditPersonalDetailsModule","slspPersonalInfoAfterModule","bcuLangSwitchController","$window","$parent","parent","languages","changeLanguage","changeLangService","addLangParamToUrl","i18nService","setLanguage","$state","go","current","reload","_bcuLangSwitch","bcuLangSwitchModule","slspIllSigninOrderLoggedOutController","slspIllSigninOrderLoggedOutService","usrNme","isGuest","removeClass","addClass","_slspIllSigninOrderLoggedOut","_slspIllSigninOrderLoggedOut2","slspIllSigninOrderLoggedOutModule","getDecodedToken","decodedToken","userGroup","userName","slspUserAreaExpandableAfterModule","$onInit","source","sourceid","guid","getElementById","add","originalsourceid","lastIndexOf","l","isLinktoOnline","translation","fullView","text","availabilityLine","changeButton","changeButtonText","button","html","slspHttpInterceptRequests","config","$httpProvider","interceptors","$q","request","_request","requestError","reject","responseError","_response","test","interfaceLanguage","injector","get","getUserLanguage","appConfig","list_of_hold_states","list_of_photocopy_states","Object","keys","list_of_hold_states_regexp","RegExp","map","holds","hold","holdstatus","cancel","list_of_photocopy_states_regexp","photocopies","photocopy","requeststatus","getAlert","ga","almaHowToGetitService","reqAlert","_htmlMsg","myEl2","$compile","$rootScope","form","htmlcompiled","formLength","children","typeFeeAlert","currentTypeFeeAlert","htmlwarning","getFeeAlert","get_peb_button","instant","insertBefore","replaceWith","defineProperty","configurable","getFilteredForm","key","options","sort","b","onTopInstitutions","isEPFL","requestService","_service","linkBase","requestHeader","allElements","parentNode","className","click_peb","click","href"],"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}\r\n","\"use strict\";\r\n\r\n/*\r\n Ce module ajoute le lien vers la notice de collection sur les notices\r\n filles.\r\n */\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\r\n // Vérifie si l'analyse a déjà été effectuée. Si oui, le lien est\r\n // directement retourné\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 // Pas de notice de série trouvée\r\n return null;\r\n }\r\n for (const serie of series){\r\n // On ne retient que les notices de séries dont l'identifiant\r\n // est un mms ID\r\n var m = serie.match(/\\$\\$Q(.*)\\$\\$Z(99\\d{16})/);\r\n\r\n if (m){\r\n // Un mms ID a été trouvé -> construction de l'url vers la notice.\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 // 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('slspSearchResultAvailabilityLineAfter', 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\n/*\r\n Ce module ajoute le lien direct vers le fichier pdf quand celui-ci\r\n est disponible via l'api de Browzine.\r\n */\r\n\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', 'checkEpflIPFactory', function($filter, $http, checkEpflIPFactory) {\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 = checkEpflIPFactory.is_epfl_ip();\r\n\r\n // Retourne le doi de la ressource en vérifiant plusieurs emplacements\r\n // dans le pnx.\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 // Vérifie si un doi est disponible. Dans le cas contraire\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 // Empêchera une nouvelle recherche via get_doi\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\r\n // Fonction interrogeant l'api de Browzine pour obtenir le lien direct vers\r\n // le pdf.\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 // 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', 'checkEpflIPFactory', '$element', function($filter, $http, checkEpflIPFactory, $element) {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n var vm = this\r\n vm.is_link_to_suppress = false;\r\n\r\n // Fonction pour s'assurer que l'élément à supprimer le sera correctement\r\n vm.$doCheck = function(){\r\n if (vm.is_link_to_suppress){\r\n vm.suppress_original_link()\r\n }\r\n }\r\n\r\n // Utilise le service pour vérifier si l'utilisateur est sur le réseau EPFL\r\n vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip();\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 var aval_lines = $element[0].parentElement.parentElement.parentElement.querySelectorAll('.not_restricted,.fulltext');\r\n\r\n // Tant que cet attribut est vrai, la fonction $doCheck va tenter de supprimer le lien\r\n vm.is_link_to_suppress = true;\r\n\r\n // console.log($element[0]);\r\n // console.log(aval_lines);\r\n for (var aval_line of aval_lines){\r\n if (!aval_line.classList.contains('no-delete')){\r\n aval_line.parentElement.parentElement.parentElement.remove();\r\n vm.is_link_to_suppress = false}\r\n break;\r\n }\r\n\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 // Ressource CDI\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 // Ressource non CDI\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\r\n } else if (vm.parentCtrl.isFullView && vm.parentCtrl.result.delivery.GetIt1 && typeof(vm.parentCtrl.result.delivery.GetIt1)==='object') {\r\n // Dans la vue détaillée, l'url est accessible sans avoir à interroger le service\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","/*\r\n DESCRIPTION:\r\n Permet de vérifier si l'utilisateur est connecté sur la plage\r\n réseau de l'EPFL.\r\n\r\n Le réseau EPFL doit commencer par 128.178 ou 128.179\r\n Pour 128.178, la plage ne commence qu'à 128.178.129\r\n\r\n Le service s'utilise de la manière suivante:\r\n module.exports = ['$filter', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) {\r\n vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip();}]\r\n*/\r\n\r\n// EPFL : Fonctions de vérification des types utilisateurs\r\nexport const checkEpflIPFactory = angular\r\n .module('checkEpflIPModule', [])\r\n .factory('checkEpflIPFactory', ['jwtHelper', function( jwtHelper ){\r\n\r\n const is_epfl_ip = function () {\r\n const userIP = get_ip()\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\r\n const 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\r\n return {'is_epfl_ip': is_epfl_ip,\r\n 'get_ip': get_ip};\r\n }]);\r\n","module.exports = 'factoryModule'\r\n\r\nimport {checkEpflIPFactory} from './check_epfl_ip.factory';\r\n\r\nexport const factoryModule = angular\r\n .module('factoryModule', [])\r\n\r\nfactoryModule.requires.push(checkEpflIPFactory.name);\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\nexport const customTranslateFilter = angular\r\n .module('customTranslateFilter', [])\r\n .filter('customTranslate', ['$translate', function($translate){\r\n return function(txt){\r\n var trad = {\r\n contactEpflLibrary:{\r\n fr: \"https://www.epfl.ch/campus/library/fr/informations-pratiques/#contact\",\r\n en: \"https://www.epfl.ch/campus/library/practical-information/#contact\"\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","import {customTranslateFilter} from './custom_translate.filter';\r\n\r\nexport const filtersModule = angular\r\n .module('filtersModule', []);\r\n\r\nfiltersModule.requires.push(customTranslateFilter.name);\r\n","module.exports = {\r\n bindings: {parentCtrl: '<'},\r\n controller: require('./epfl-i-button.controller.js')}\r\n","module.exports = ['$element', '$filter', function($element, $filter) {\r\n var vm = this;\r\n vm.$doCheck = function() {\r\n if (!vm.checked && vm.parentCtrl.loc){\r\n // Lien du module SLSP\r\n var link = $element[0].parentElement.parentElement.getElementsByTagName('slsp-i-button-component')[0].getElementsByTagName('a')[0];\r\n if (this.parentCtrl.loc.location.libraryCode==='E02'){\r\n link.setAttribute('href', $filter('customTranslate')('contactEpflLibrary'))\r\n }\r\n\r\n // Récupère l'icone avec le i.\r\n var img = link.getElementsByTagName('img')[0];\r\n\r\n // Modification de l'image\r\n if (img.getAttribute('src')=='/discovery/custom/41SLSP_NETWORK-CENTRAL_PACKAGE/img/information.png') {\r\n const view = vm.parentCtrl.configurationUtil.vid.replace(':', '-');\r\n img.setAttribute('src', `custom/${ view }/img/information.png`);\r\n // Réduit la taille de l'image\r\n img.setAttribute('width', '22');\r\n\r\n // Evite de modifier plusieurs fois\r\n vm.checked = true;\r\n }\r\n }\r\n }\r\n // console.log(vm);\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: {parentCtrl: '<'},\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', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) {\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 if (vm.parentCtrl.item.pnx){\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 = checkEpflIPFactory.is_epfl_ip();\r\n vm.user_ip = checkEpflIPFactory.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\n","\"use strict\";\r\n\r\n/*\r\n Ce module vient se greffer à la balise SLSP regroupe plusieurs modules en lien\r\n avec l'affichage détaillé:\r\n - Lien pour signaler les problèmes d'accès aux ressources électroniques\r\n */\r\n\r\nvar fullview_module = angular.module('fullviewModule', ['angularLoad']);\r\nfullview_module.component('slspAlmaViewitAfter', require('./epfl_almaviewit.component.js'));\r\nfullview_module.component('slspLocationItemsAfter', require('./slspLocationItemsAfter.component.js'));\r\nfullview_module.component('epflIButtonComponent', require('./epfl-i-button.component.js'));\r\n","\"use strict\";\r\n\r\nmodule.exports = {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n}\r\n","module.exports = {active: false,\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 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 de chaque digest.\r\n this.$doCheck = function() {\r\n\r\n // Vérifie si la page est chargée\r\n if (!vm.modified && document.readyState === 'complete'){\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 // L'élément n'est pas trouvé. Plus de nouvelles vérifications\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 // La valeur est écrasée par la suite si l'alerte est 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\r\n // déclenche l'affichage de l'alerte\r\n vm.active = true;\r\n }\r\n }\r\n\r\n // Renvoie le texte en fonction de la langue\r\n vm.get_txt = function(){\r\n var lang = ['en', 'fr'].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);\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 // Se base sur l'url courante pour fonctionner quel que soit l'environnement.\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- databases: pour l'instant il n'y a pas de personnalisation\r\n*/\r\n\r\n/*************/\r\n/* EPFL part */\r\n/*************/\r\n\r\nimport './briefview';\r\nimport './homepage';\r\nimport './fullView';\r\nimport './filters';\r\nimport './factory';\r\nimport './slsp_mod_epfl';\r\n\r\nconst epfl_modules = [\r\n 'briefviewModule',\r\n 'homepageModule',\r\n 'fullviewModule',\r\n 'filtersModule',\r\n 'factoryModule',\r\n 'epflCourierInfoModule',\r\n];\r\n\r\n/*************/\r\n/* SLSP part */\r\n/*************/\r\n\r\n// import './slsp-courier-info';\r\nimport './slsp/slsp-ill-signin-order-alert';\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/slsp-http-intercept-requests';\r\nimport './slsp/prm-user-area-expandable-after';\r\nimport './slsp/prm-loan-after';\r\nimport './slsp/prm-personal-info-after';\r\n\r\nconst slsp_modules = [\r\n // 'slspCourierInfo',\r\n 'slspIllSigninOrderAlert',\r\n 'ethLocationsAfterModule',\r\n 'ethLocationItemsAfterModule',\r\n 'slspArchivesHtgi',\r\n 'slspArchivesViewit',\r\n 'slspHttpInterceptRequests',\r\n 'slspUserAreaExpandableAfterModule',\r\n 'slspLoanAfterModule',\r\n 'slspPersonalInfoAfterModule'\r\n];\r\n\r\n\r\n\r\n// import './databases';\r\nvar app = angular.module('viewCustom', [].concat(['angularLoad'],\r\n epfl_modules,\r\n slsp_modules));\r\n","\r\nimport {slspRenewItemTextModule} from './slsp-renew-item-text/slsp-renew-item-text.module';\r\n\r\nexport const slspLoanAfterModule = angular\r\n .module('slspLoanAfterModule', [])\r\n .component('prmLoanAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\nslspLoanAfterModule.requires.push(slspRenewItemTextModule.name);\r\n","//--------Renewstatus display of loan items ---------------------------------------\r\n\r\nexport class slspRenewItemTextController {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n $onInit() {\r\n try {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.getRenewText = getRenewText;\r\n\r\n function getRenewText() {\r\n if (this.parentCtrl.item.renewstatuses !== undefined && this.parentCtrl.item.renewstatuses.renewstatus[0] !== undefined) {\r\n return this.parentCtrl.item.renewstatuses.renewstatus[0];\r\n }\r\n else {\r\n return\r\n }\r\n }\r\n }\r\n\r\n catch (e) {\r\n console.error(\"***SLSP*** an error occured: slspRenewItemTextController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspRenewItemTextController.$inject = [];\r\n\r\n","\r\n\r\n\r\n\r\n\r\n import {slspRenewItemTextController} from './slsp-renew-item-text.controller';\r\n import {slspRenewItemTextHtml} from './slsp-renew-item-text.html';\r\n\r\n export const slspRenewItemTextModule = angular\r\n .module('slspRenewItemTextModule', [])\r\n .controller('slspRenewItemTextController', slspRenewItemTextController)\r\n .component('slspRenewItemTextComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspRenewItemTextController',\r\n template: slspRenewItemTextHtml\r\n })","import {ethLocationItemsFilterModule} from './eth-location-items-filter/eth-location-items-filter.module';\r\nimport {slspIButtonModule} from './slsp-i-button/slsp-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(slspIButtonModule.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 slspIButtonController {\r\n\r\n constructor() {}\r\n \r\n $doCheck() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.getLibrary = getLibrary;\r\n this.getLibraryCode = getLibraryCode;\r\n this.getLanguage = getLanguage;\r\n this.biblinkText = \"Library\";\r\n this.biblinkBase = \"https:\\/\\/registration.slsp.ch\\/libraries\\/\\?library\\=\";\r\n\r\n function getLibrary() {\r\n return this.parentCtrl.currLoc.location.librarycodeTranslation;\r\n \r\n }\r\n function getLibraryCode() {\r\n return this.parentCtrl.currLoc.location.libraryCode;\r\n \r\n }\r\n function getLanguage() {\r\n return this.parentCtrl.userSessionManagerService.$location.$$search.lang;\r\n \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 slspIButtonController.$inject = [];\r\n\r\n "," import {slspIButtonController} from './slsp-i-button.controller';\r\n import {slspIButtonHtml} from './slsp-i-button.html';\r\n \r\n\r\n export const slspIButtonModule = angular\r\n .module('slspIButtonModule', [])\r\n .controller('slspIButtonController', slspIButtonController)\r\n .component('slspIButtonComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspIButtonController',\r\n template: slspIButtonHtml\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","\r\n\r\n//-----------------------------------------------\r\n\r\n\r\nexport class slspEditPersonalDetailsController {\r\n\r\n constructor($scope, $element) {\r\n this.$scope = $scope;\r\n this.$element = $element;\r\n\r\n }\r\n\r\n $doCheck() {\r\n try {\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n\r\n\r\n\r\n let lang = 'en';\r\n let sms = this.$scope.$root.$$childHead.$ctrl.userSessionManagerService;\r\n if (sms) {\r\n lang = sms.getInterfaceLanguage();\r\n }\r\n\r\n this.detailsBaseEdu = \"https:\\/\\/eduid.ch\\/web\\/change-account-data\\/2\\/?lang=\" + lang;\r\n this.detailsBaseReg = \"https:\\/\\/registration.slsp.ch\\/library-card\\/?lang=\" + lang;\r\n this.exclude = ['STAFF', '11', '12', '13', '14', '15', '16', '91', '92', '99'];\r\n this.grpA = ['11', '91', '92'];\r\n this.grpB = ['12', '13', '14', '15', '16'];\r\n\r\n\r\n this.getPatronGrp = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let patron = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (!this.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 this.grpLabelA = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelA = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (this.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 this.grpLabelB = function () {\r\n if (this.parentCtrl.personalInfoService.personalInfo !== undefined) {\r\n let labelB = this.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode;\r\n if (this.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 this.buttonMove = function () {\r\n let parentElement = angular.element(document.querySelector('prm-personal-info > div.layout-wrap.layout-align-center-start.layout-row > md-card:nth-child(2)'));\r\n let element = angular.element(document.querySelector('#SLSPeditPersonalDetails'));\r\n parentElement.append(element);\r\n }\r\n\r\n\r\n }\r\n catch (e) {\r\n console.error(\"***SLSP*** an error occured: EditPersonalDetailsController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspEditPersonalDetailsController.$inject = ['$scope'];\r\n\r\n","import {slspEditPersonalDetailsController} from './slsp-edit-personal-details.controller';\r\nimport {slspEditPersonalDetailsHtml} from './slsp-edit-personal-details.html';\r\n\r\n\r\nexport const slspEditPersonalDetailsModule = angular\r\n .module('slspEditPersonalDetailsModule', [])\r\n .controller('slspEditPersonalDetailsController', slspEditPersonalDetailsController)\r\n .component('slspEditPersonalDetailsComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspEditPersonalDetailsController',\r\n template: slspEditPersonalDetailsHtml\r\n })","import {slspEditPersonalDetailsModule} from './slsp-edit-personal-details/slsp-edit-personal-details.module';\r\n\r\n\r\nexport const slspPersonalInfoAfterModule = angular\r\n .module('slspPersonalInfoAfterModule', [])\r\n .component('prmPersonalInfoAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``\r\n });\r\n\r\n slspPersonalInfoAfterModule.requires.push(slspEditPersonalDetailsModule.name);\r\n\r\n","export class bcuLangSwitchController {\r\n\r\n constructor($element, $window) {\r\n this.$parent = $element.parent().parent()[0];\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$window = $window;\r\n }\r\n\r\n $onInit() {\r\n try {\r\n \r\n this.languages = [\"de\",\"fr\",\"it\",\"en\"];\r\n if (!this.languages.includes(this.parentCtrl.lang)) {\r\n this.changeLanguage(\"en\");\r\n }\r\n \r\n }\r\n catch (e) {\r\n console.error(\"***BCUFR*** bcuLangSwitchControler $onInit\");\r\n console.error(e.message);\r\n }\r\n };\r\n\r\n changeLanguage(lang) {\r\n \r\n this.parentCtrl.changeLangService.addLangParamToUrl(lang);\r\n let t = this.parentCtrl;\r\n this.parentCtrl.i18nService.setLanguage(lang).then(function(){\r\n t.$timeout(function(){return t.$state.go(t.$state.current,{lang:lang},{reload:!0})})\r\n });\r\n };\r\n\r\n}\r\nbcuLangSwitchController.$inject = ['$element'];","/**\r\n* @ngdoc module\r\n* @name bcuLangSwitchModule\r\n*\r\n* @description\r\n* - Add LangSwitch to user area\r\n* @example\r\n* each view\r\n*\r\n*/\r\nimport {bcuLangSwitchController} from './bcu-lang-switch.controller';\r\n\r\nexport const bcuLangSwitchModule = angular\r\n .module('bcuLangSwitchModule', [])\r\n .controller('bcuLangSwitchController', bcuLangSwitchController)\r\n .component('bcuLangSwitchComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'bcuLangSwitchController',\r\n// template: ''\r\n template: ''\r\n })\r\n","\r\nexport class slspIllSigninOrderLoggedOutController {\r\n\r\n constructor(slspIllSigninOrderLoggedOutService, $scope) {\r\n this.slspIllSigninOrderLoggedOutService = slspIllSigninOrderLoggedOutService;\r\n this.$scope = $scope;\r\n }\r\n\r\n $doCheck() {\r\n try{\r\n this.parentCtrl = this.afterCtrl.parentCtrl;\r\n this.$scope.usrNme = this.slspIllSigninOrderLoggedOutService.isGuest();\r\n\r\n if (this.$scope.usrNme == true) {\r\n let myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.addClass('logged-out')\r\n }\r\n \r\n else {\r\n let myEl = angular.element(document.querySelector('primo-explore'));\r\n return myEl.removeClass('logged-out');\r\n }\r\n }\r\n catch(e){\r\n console.error(\"***SLSP*** an error occured: slspIllSigninOrderLoggedOutController\\n\\n\");\r\n console.error(e.message);\r\n }\r\n }\r\n}\r\n\r\nslspIllSigninOrderLoggedOutController.$inject = ['slspIllSigninOrderLoggedOutService', '$scope'];\r\n \r\n\r\n","\r\n\r\n //--------ILL Signin Order - if logged out ---------------------------------------\r\n \r\n\r\n import {slspIllSigninOrderLoggedOutController} from './slsp-ill-signin-order-logged-out.controller';\r\n import {slspIllSigninOrderLoggedOutService} from './slsp-ill-signin-order-logged-out.service';\r\n\r\n export const slspIllSigninOrderLoggedOutModule = angular\r\n .module('slspIllSigninOrderLoggedOutModule', [])\r\n .factory('slspIllSigninOrderLoggedOutService', slspIllSigninOrderLoggedOutService)\r\n .controller('slspIllSigninOrderLoggedOutController', slspIllSigninOrderLoggedOutController)\r\n .component('slspIllSigninOrderLoggedOutComponent', {\r\n bindings: {afterCtrl: '<'},\r\n controller: 'slspIllSigninOrderLoggedOutController',\r\n \r\n })\r\n ","\r\n\r\n export const slspIllSigninOrderLoggedOutService = ['jwtHelper', function( jwtHelper ){\r\n\r\n function getDecodedToken(){\r\n try{\r\n if (!sessionStorage){\r\n console.error(\"***SLSP*** no session storage\")\r\n return null;\r\n }\r\n let jwt = sessionStorage.getItem('primoExploreJwt');\r\n if (!jwt){\r\n return null;\r\n }\r\n return jwtHelper.decodeToken(jwt);\r\n }\r\n catch(e){\r\n console.error(\"**SLSP*** an error occured: userService.getDecodedToken:\");\r\n console.error(e.message);\r\n }\r\n }\r\n \r\n function isGuest(){\r\n try{\r\n let decodedToken = getDecodedToken();\r\n if (!decodedToken) {\r\n return null;\r\n }\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 catch(e){\r\n console.error(\"***SLSP*** an error occured: userService.isGuest:\");\r\n console.error(e.message);\r\n }\r\n }\r\n \r\n return {\r\n isGuest: isGuest,\r\n getDecodedToken: getDecodedToken\r\n };\r\n }]\r\n ","import {bcuLangSwitchModule} from './bcu-lang-switch/bcu-lang-switch.module';\r\nimport {slspIllSigninOrderLoggedOutModule} from './slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module';\r\n\r\nexport const slspUserAreaExpandableAfterModule = angular\r\n .module('slspUserAreaExpandableAfterModule', [])\r\n .component('prmUserAreaExpandableAfter', {\r\n bindings: {parentCtrl: '<'},\r\n template: ``,\r\n });\r\n\r\nslspUserAreaExpandableAfterModule.requires.push(bcuLangSwitchModule.name);\r\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', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'ArchivesAvailabilityLineController',\r\n template:''\r\n })\r\n\r\n .component('prmAlmaViewitAfter', {\r\n bindings: { parentCtrl: '<' },\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.$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 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/slsp-http-intercept-requests.module.js')\r\nmodule.exports = 'slspHttpInterceptRequests'","export const slspHttpInterceptRequests = angular.module('slspHttpInterceptRequests', ['ng'])\r\n .config(['$httpProvider', ($httpProvider) => {\r\n $httpProvider.interceptors.push(['$q', ($q) => {\r\n return {\r\n 'request': (request) => {\r\n return request\r\n },\r\n 'requestError': (request) => {\r\n return $q.reject(request)\r\n },\r\n 'responseError': (response) => {\r\n return $q.reject(response)\r\n },\r\n 'response': (response) => {\r\n try {\r\n if (/primaws\\/rest\\/priv\\/myaccount\\/requests/.test(response.config.url)) {\r\n if (response.status == 200 && response.data.status == \"ok\") {\r\n let interfaceLanguage = angular.element(document.querySelector('primo-explore')).injector().get('$rootScope').$$childHead.$ctrl.userSessionManagerService.getUserLanguage() ||\r\n window.appConfig['primo-view']['attributes-map'].interfaceLanguage\r\n\r\n let list_of_hold_states = {\r\n 'en': [\"in transit\", \"in process\", \"on hold shelf\"],\r\n 'de': [\"transfer\", \"in bearbeitung\", \"bereitgestellt\"],\r\n 'fr': [\"en cours de transfert\", \"en cours\", \"sur le rayon des réservations\"],\r\n 'it': [\"in transito\", \"in processo\", \"scaffale prenotazioni\"]\r\n }\r\n let list_of_photocopy_states = {\r\n 'en': [\"in transit\", \"in process\"],\r\n 'de': [\"transfer\", \"in bearbeitung\"],\r\n 'fr': [\"en cours de transfert\", \"en cours\"],\r\n 'it': [\"in transito\", \"in processo\"]\r\n }\r\n if (Object.keys(list_of_hold_states).includes(interfaceLanguage)) {\r\n let list_of_hold_states_regexp = RegExp(list_of_hold_states[interfaceLanguage].map(m => m.toLowerCase()).join('|'))\r\n // rewrite cancellable holds\r\n response.data.data.holds.hold.map((m) => {\r\n if (list_of_hold_states_regexp.test(m.holdstatus.toLowerCase())) {\r\n m.cancel = 'N'\r\n }\r\n })\r\n }\r\n else {\r\n throw `No mapping found for holds: ${interfaceLanguage}`\r\n }\r\n\r\n if (Object.keys(list_of_photocopy_states).includes(interfaceLanguage)) {\r\n let list_of_photocopy_states_regexp = RegExp(list_of_photocopy_states[interfaceLanguage].map(m => m.toLowerCase()).join('|'))\r\n // rewrite cancellable photocopies\r\n response.data.data.photocopies.photocopy.map((m) => {\r\n if (list_of_photocopy_states_regexp.test(m.requeststatus.toLowerCase())) {\r\n m.cancel = 'N'\r\n }\r\n })\r\n }\r\n else {\r\n throw `No mapping found for photocopies: ${interfaceLanguage}`\r\n }\r\n }\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n return response;\r\n }\r\n }\r\n }])\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 }])\r\n\r\n .component('almaHowovpAfter', {\r\n bindings: { parentCtrl: '<' },\r\n controller: 'AlertMsgController',\r\n template: '
{{$ctrl.getAlert()}}
'\r\n });\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('epflCourierInfoModule', [])\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('./epfl-courier-info.module.js')\r\nmodule.exports = 'epflCourierInfoModule'\r\n"]} \ No newline at end of file diff --git a/primo-explore/custom/src/js/factory/check_epfl_ip.factory.js b/primo-explore/custom/src/js/factory/check_epfl_ip.factory.js index ce4257a..fa57e66 100644 --- a/primo-explore/custom/src/js/factory/check_epfl_ip.factory.js +++ b/primo-explore/custom/src/js/factory/check_epfl_ip.factory.js @@ -1,36 +1,41 @@ /* DESCRIPTION: Permet de vérifier si l'utilisateur est connecté sur la plage réseau de l'EPFL. Le réseau EPFL doit commencer par 128.178 ou 128.179 Pour 128.178, la plage ne commence qu'à 128.178.129 Le service s'utilise de la manière suivante: module.exports = ['$filter', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) { - vm.is_epfl_IP = checkEpflIPFactory();}] + vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip();}] */ // EPFL : Fonctions de vérification des types utilisateurs export const checkEpflIPFactory = angular .module('checkEpflIPModule', []) .factory('checkEpflIPFactory', ['jwtHelper', function( jwtHelper ){ - const isEpflIP = function () { - var jwt = sessionStorage.getItem('primoExploreJwt'); - if (!jwt) { - return; - } - const userIP = jwtHelper.decodeToken(jwt).userIp; + const is_epfl_ip = function () { + const userIP = get_ip() 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; - } + } + + const get_ip = function(){ + var jwt = sessionStorage.getItem('primoExploreJwt'); + if (!jwt) { + return; + } + return jwtHelper.decodeToken(jwt).userIp; + } - return isEpflIP; + return {'is_epfl_ip': is_epfl_ip, + 'get_ip': get_ip}; }]); diff --git a/primo-explore/custom/src/js/filters/custom_translate.filter.js b/primo-explore/custom/src/js/filters/custom_translate.filter.js index fa691b9..c5307f8 100644 --- a/primo-explore/custom/src/js/filters/custom_translate.filter.js +++ b/primo-explore/custom/src/js/filters/custom_translate.filter.js @@ -1,132 +1,135 @@ "use strict"; /***********************/ /* FILTRE : traduction */ /***********************/ /* OBJECTIF: traduire des éléments, tant des urls que du texte. UTILISATION: - Dans le template: 1. comme un filtre: {{ clé | customTranslate }} - Dans un controlleur: Même si les filtres sont d'abord prévus pour être utilisés dans le template, on peut les appeler dans les controlleurs. 1. Ajouter le service dans l'en-tête du controlleur 2. Appeler le service avec la fonction $filter EXEMPLE: controller:function($http, $filter){... var traduction = $filter('customTranslate')('cleTrad'); ...} CONFIGURATION: L'ajout de traduction se fait à travers des objets. La clé indique le terme à utiliser dans le template ou le controlleur pour ensuite renvoyer la traduction. Les noms associés n'appaaraissent donc pas tels quels. La structure de chaque élément traduit disponible est comme suit: clé1:{ fr: traductionFrançaise en: traductionAnglaise }, clé2:{ fr: traductionFrançaise en: traductionAnglaise } */ export const customTranslateFilter = angular .module('customTranslateFilter', []) .filter('customTranslate', ['$translate', function($translate){ return function(txt){ var trad = { - + contactEpflLibrary:{ + fr: "https://www.epfl.ch/campus/library/fr/informations-pratiques/#contact", + en: "https://www.epfl.ch/campus/library/practical-information/#contact" + }, 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." }, // vpnLink:{ // fr: "https://www.epfl.ch/campus/services/ressources-informatiques/network-services-reseau/acces-intranet-a-distance/clients-vpn-disponibles/", // en: "https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/", // de: "https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/", // it: "https://www.epfl.ch/campus/services/en/it-services/network-services/remote-intranet-access/vpn-clients-available/" // }, 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:" } }; if (['en', 'fr', 'it', 'de'].includes($translate.use())) { return trad[txt][$translate.use()] } else { return trad[txt].fr } }; }]); diff --git a/primo-explore/custom/src/js/fullview/almaviewit.component.js b/primo-explore/custom/src/js/fullview/almaviewit.component.js deleted file mode 100644 index f6f2d95..0000000 --- a/primo-explore/custom/src/js/fullview/almaviewit.component.js +++ /dev/null @@ -1,15 +0,0 @@ -"use strict"; - -/* - OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux - ressources électroniques. Un message d'avertissement s'affiche quand la - la personne n'est pas sur le réseau EPFL - - Englobe un module d'archive de l'ETH et un module de l'EPFL. - ETH: primo-explore\custom\src\js\slsp\slsp-archives-viewit\js\slsp-archives-viewit.module.js -*/ - -module.exports = { - bindings: {parentCtrl: '<'}, - template: `
-
`} diff --git a/primo-explore/custom/src/js/fullview/epfl-i-button.component.js b/primo-explore/custom/src/js/fullview/epfl-i-button.component.js new file mode 100644 index 0000000..8f2c03c --- /dev/null +++ b/primo-explore/custom/src/js/fullview/epfl-i-button.component.js @@ -0,0 +1,3 @@ +module.exports = { + bindings: {parentCtrl: '<'}, + controller: require('./epfl-i-button.controller.js')} diff --git a/primo-explore/custom/src/js/fullview/epfl-i-button.controller.js b/primo-explore/custom/src/js/fullview/epfl-i-button.controller.js index b5e658d..bcb08c4 100644 --- a/primo-explore/custom/src/js/fullview/epfl-i-button.controller.js +++ b/primo-explore/custom/src/js/fullview/epfl-i-button.controller.js @@ -1,50 +1,27 @@ +module.exports = ['$element', '$filter', function($element, $filter) { + var vm = this; + vm.$doCheck = function() { + if (!vm.checked && vm.parentCtrl.loc){ + // Lien du module SLSP + var link = $element[0].parentElement.parentElement.getElementsByTagName('slsp-i-button-component')[0].getElementsByTagName('a')[0]; + if (this.parentCtrl.loc.location.libraryCode==='E02'){ + link.setAttribute('href', $filter('customTranslate')('contactEpflLibrary')) + } + // Récupère l'icone avec le i. + var img = link.getElementsByTagName('img')[0]; -//--------"i" button --------------------------------------- - - - export class epflIButtonController { - - constructor() {} - - $onInit() { - try{ - this.parentCtrl = this.afterCtrl.parentCtrl; - // console.log(this); - this.getLibrary = getLibrary; - this.biblinkText = "Library"; - this.biblinkBase = "https:\/\/slsp.ch\/libraries"; - /********************/ - /* DEBUT AJOUT EPFL */ - this.getLibraryUrl = getLibraryUrl; - /* FIN AJOUT EPFL */ - /********************/ - - function getLibrary() { - return this.parentCtrl.currLoc ? this.parentCtrl.currLoc.location.librarycodeTranslation : ''; - - } - - /********************/ - /* DEBUT AJOUT EPFL */ - function getLibraryUrl() { - if (this.parentCtrl.loc && this.parentCtrl.loc.location.libraryCode==='E02') { - return "https://go.epfl.ch/library"; - } else { - return this.biblinkBase; - } - } - // View is useful to get the url img - this.view = this.parentCtrl.configurationUtil.vid.replace(':', '-'); - /* FIN AJOUT EPFL */ - /********************/ + // Modification de l'image + if (img.getAttribute('src')=='/discovery/custom/41SLSP_NETWORK-CENTRAL_PACKAGE/img/information.png') { + const view = vm.parentCtrl.configurationUtil.vid.replace(':', '-'); + img.setAttribute('src', `custom/${ view }/img/information.png`); + // Réduit la taille de l'image + img.setAttribute('width', '22'); - } - catch(e){ - console.error("***SLSP*** an error occured: slspIButtonController\n\n"); - console.error(e.message); + // Evite de modifier plusieurs fois + vm.checked = true; } } } - - epflIButtonController.$inject = []; + // console.log(vm); +}]; diff --git a/primo-explore/custom/src/js/fullview/epfl-i-button.html b/primo-explore/custom/src/js/fullview/epfl-i-button.html deleted file mode 100644 index 65c4acd..0000000 --- a/primo-explore/custom/src/js/fullview/epfl-i-button.html +++ /dev/null @@ -1,5 +0,0 @@ - diff --git a/primo-explore/custom/src/js/fullview/epfl-i-button.module.js b/primo-explore/custom/src/js/fullview/epfl-i-button.module.js deleted file mode 100644 index 148d5ca..0000000 --- a/primo-explore/custom/src/js/fullview/epfl-i-button.module.js +++ /dev/null @@ -1,38 +0,0 @@ - - -//--------"i" button --------------------------------------- - -// angular -// .module('slspIButton', []) - -// .controller('LibInfoController', [function () { -// var vm = this; -// vm.getLibrary = getLibrary; -// vm.biblinkText = "Library"; -// vm.biblinkBase = "https:\/\/slsp.ch\/libraries"; - -// function getLibrary() { -// return vm.parentCtrl.currLoc.location.librarycodeTranslation; -// } - -// }]) - -// .component('prmLocationItemsAfter', { -// bindings: { parentCtrl: '<' }, -// controller: 'LibInfoController', -// template: '' -// }); - - - - import {epflIButtonController} from './epfl-i-button.controller'; - import {epflIButtonHtml} from './epfl-i-button.html'; - - export const epflIButtonModule = angular - .module('epflIButtonModule', []) - .controller('epflIButtonController', epflIButtonController) - .component('epflIButtonComponent', { - bindings: {afterCtrl: '<'}, - controller: 'epflIButtonController', - template: epflIButtonHtml - }) diff --git a/primo-explore/custom/src/js/fullview/epfl_almaviewit.component.js b/primo-explore/custom/src/js/fullview/epfl_almaviewit.component.js index 85535b4..c329219 100644 --- a/primo-explore/custom/src/js/fullview/epfl_almaviewit.component.js +++ b/primo-explore/custom/src/js/fullview/epfl_almaviewit.component.js @@ -1,14 +1,14 @@ "use strict"; import {epfl_almaviewit_html} from './epfl_almaviewit.html' /* OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux ressources électroniques. Un message d'avertissement s'affiche quand la la personne n'est pas sur le réseau EPFL */ module.exports = { - bindings: {afterCtrl: '<'}, + bindings: {parentCtrl: '<'}, controller: require('./epfl_almaviewit.controller.js'), template: epfl_almaviewit_html} diff --git a/primo-explore/custom/src/js/fullview/epfl_almaviewit.controller.js b/primo-explore/custom/src/js/fullview/epfl_almaviewit.controller.js index 041f0a5..d454422 100644 --- a/primo-explore/custom/src/js/fullview/epfl_almaviewit.controller.js +++ b/primo-explore/custom/src/js/fullview/epfl_almaviewit.controller.js @@ -1,82 +1,81 @@ "use strict"; /* OBJECTIF: Ajouter un lien pour rapporter les problèmes d'accès aux ressources électroniques. Un message d'avertissement s'affiche quand la la personne n'est pas sur le réseau EPFL */ module.exports = ['$filter', 'checkEpflIPFactory', function($filter, checkEpflIPFactory) { - this.parentCtrl = this.afterCtrl.parentCtrl; var vm = this; vm.get_txt = function() { return $filter('customTranslate')('vpnMSG'); } vm.feedbackLink = ''; vm.is_epfl_IP = false; vm.no_report_link = false; if (vm.parentCtrl.item.pnx){ // Ne pas afficher le lien s'il s'agit d'open access if (vm.parentCtrl.item.pnx.addata.openaccess && vm.parentCtrl.item.pnx.addata.openaccess[0] === 'true') { vm.no_report_link = true; } // Ne pas afficher le lien s'il s'agit d'open access (notices CDI) if (vm.parentCtrl.item.pnx.addata.oa && vm.parentCtrl.item.pnx.addata.oa[0] === 'free_for_read') { vm.no_report_link = true; } if (!vm.no_report_link){ /* Obtient l'adresse ip depuis un service se trouvant dans le module \js\slsp\slsp-ill-signin-order-logged-out\js\epfl-ill-signin-order-logged-out.module.js */ - vm.is_epfl_IP = checkEpflIPFactory(); + vm.is_epfl_IP = checkEpflIPFactory.is_epfl_ip(); vm.user_ip = checkEpflIPFactory.get_ip(); // Récupération des métadonnées de la ressource var mmsId = vm.parentCtrl.item.pnx.control.recordid[0]; var title = ''; if (vm.parentCtrl.item.pnx.display.title && vm.parentCtrl.item.pnx.display.title.length > 0) { title = vm.parentCtrl.item.pnx.display.title[0]; } var creationdate = ''; if (vm.parentCtrl.item.pnx.display.creationdate && vm.parentCtrl.item.pnx.display.creationdate.length > 0) { creationdate = vm.parentCtrl.item.pnx.display.creationdate[0]; } var creator = ''; if (vm.parentCtrl.item.pnx.display.creator && vm.parentCtrl.item.pnx.display.creator.length > 0) { creator = vm.parentCtrl.item.pnx.display.creator.join(', '); } var type = ''; if (vm.parentCtrl.item.pnx.display.type && vm.parentCtrl.item.pnx.display.type.length > 0) { type = vm.parentCtrl.item.pnx.display.type[0]; } var identifier = ''; if (vm.parentCtrl.item.pnx.display.identifier && vm.parentCtrl.item.pnx.display.identifier.length > 0) { var ident = vm.parentCtrl.item.pnx.display.identifier[0]; if (ident.indexOf('ISBN') > -1) { identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\/b>/g, '').replace(//g, ''); } else if (ident.indexOf('ISSN') > -1) { identifier = vm.parentCtrl.item.pnx.display.identifier.join(', ').replace(/<\/b>/g, '').replace(//g, ''); } else if (ident.indexOf('ISBN') > -1) { identifier = 'ISBN: ' + ident.substring(ident.indexOf('$$V') + 3); } else if (ident.indexOf('ISSN') > -1) { identifier = 'ISSN: ' + ident.substring(ident.indexOf('$$V') + 3); } } var userAgent = navigator.userAgent; // Création de l'objet du message var subject = 'Access problem ' + mmsId + ' - "' + title + '"'; // Création du corps du message 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****'; vm.feedbackLink = 'mailto:eresources@epfl.ch' + '?subject=' + encodeURIComponent(subject) + '&body=' + encodeURIComponent(body) + '&Content-Type=text/html'; } } }] diff --git a/primo-explore/custom/src/js/fullview/index.js b/primo-explore/custom/src/js/fullview/index.js index 02ca4b8..ea6fed9 100644 --- a/primo-explore/custom/src/js/fullview/index.js +++ b/primo-explore/custom/src/js/fullview/index.js @@ -1,4 +1,12 @@ +"use strict"; + +/* + Ce module vient se greffer à la balise SLSP regroupe plusieurs modules en lien + avec l'affichage détaillé: + - Lien pour signaler les problèmes d'accès aux ressources électroniques + */ var fullview_module = angular.module('fullviewModule', ['angularLoad']); -fullview_module.component('prmAlmaViewitAfter', require('./almaviewit.component.js')); -fullview_module.component('prmEpflAlmaViewitAfter', require('./epfl_almaviewit.component.js')); +fullview_module.component('slspAlmaViewitAfter', require('./epfl_almaviewit.component.js')); +fullview_module.component('slspLocationItemsAfter', require('./slspLocationItemsAfter.component.js')); +fullview_module.component('epflIButtonComponent', require('./epfl-i-button.component.js')); diff --git a/primo-explore/custom/src/js/fullview/slspLocationItemsAfter.component.js b/primo-explore/custom/src/js/fullview/slspLocationItemsAfter.component.js new file mode 100644 index 0000000..3d8c852 --- /dev/null +++ b/primo-explore/custom/src/js/fullview/slspLocationItemsAfter.component.js @@ -0,0 +1,6 @@ +"use strict"; + +module.exports = { + bindings: {parentCtrl: '<'}, + template: `` +} diff --git a/primo-explore/custom/src/js/main.js b/primo-explore/custom/src/js/main.js index 56540eb..3896bbc 100644 --- a/primo-explore/custom/src/js/main.js +++ b/primo-explore/custom/src/js/main.js @@ -1,62 +1,63 @@ /************************/ /* List of used modules */ /************************/ /* Les paquets suivants ne sont pas en usage pour le moment: - databases: pour l'instant il n'y a pas de personnalisation */ /*************/ /* EPFL part */ /*************/ import './briefview'; import './homepage'; import './fullView'; import './filters'; import './factory'; +import './slsp_mod_epfl'; const epfl_modules = [ 'briefviewModule', 'homepageModule', 'fullviewModule', 'filtersModule', 'factoryModule', - // 'slspLoanAfterModule' + 'epflCourierInfoModule', ]; /*************/ /* SLSP part */ /*************/ // import './slsp-courier-info'; -// import './slsp-ill-signin-order-alert'; -// import './prm-locations-after'; -// import './prm-location-items-after'; +import './slsp/slsp-ill-signin-order-alert'; +import './slsp/prm-locations-after'; +import './slsp/prm-location-items-after'; import './slsp/slsp-archives-htgi'; import './slsp/slsp-archives-viewit'; import './slsp/slsp-http-intercept-requests'; import './slsp/prm-user-area-expandable-after'; import './slsp/prm-loan-after'; import './slsp/prm-personal-info-after'; const slsp_modules = [ // 'slspCourierInfo', - // 'slspIllSigninOrderAlert', - // 'ethLocationsAfterModule', - // 'ethLocationItemsAfterModule', + 'slspIllSigninOrderAlert', + 'ethLocationsAfterModule', + 'ethLocationItemsAfterModule', 'slspArchivesHtgi', 'slspArchivesViewit', 'slspHttpInterceptRequests', 'slspUserAreaExpandableAfterModule', 'slspLoanAfterModule', 'slspPersonalInfoAfterModule' ]; // import './databases'; var app = angular.module('viewCustom', [].concat(['angularLoad'], epfl_modules, slsp_modules)); diff --git a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/epfl-courier-info.module.js b/primo-explore/custom/src/js/slsp_mod_epfl/epfl-courier-info.module.js similarity index 99% rename from primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/epfl-courier-info.module.js rename to primo-explore/custom/src/js/slsp_mod_epfl/epfl-courier-info.module.js index 0ec2321..74d80cc 100644 --- a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/epfl-courier-info.module.js +++ b/primo-explore/custom/src/js/slsp_mod_epfl/epfl-courier-info.module.js @@ -1,171 +1,171 @@ /* ---------------- */ /* - VERSION EPFL - */ /* ---------------- */ /* AVERTISSEMENT: ce module est très différent de sa version originale d'SLSP. Il doit donc être considéré comme réécrit et les ajouts ne sont pas indiqués. Ce module permet d'afficher les boutons renvoyant à SWITCH edu-ID. FONCTIONNALITES: - Mettre l'EPFL en tête des possibilités de retrait. - Afficher les messages personnalisés pour les frais. */ angular - .module('epflCourierInfo', []) + .module('epflCourierInfoModule', []) .controller('CourierInfoController', ['$filter', '$element', function ($filter, $element, $compile, $scope, $rootScope) { var vm = this; //shortcut for convenience vm.form = $element[0].parentElement; //function for inserting block vm.$doCheck = function() { let form = false; let formLength = 2; // console.log(vm.form); if (vm.form.children[0].children[1] !== undefined && (vm.form.children[0].children[1].children[0] !== undefined || vm.typeFeeAlert()=='costWarningPEB')) { form = vm.form.children[0].children[1].children[0]; if (vm.typeFeeAlert()=='costWarningPEB'){ formLength = 3; } } else if (vm.form.children[0].children[0] !== undefined && vm.form.children[0].children[0].children[0] !== undefined) { form = vm.form.children[0].children[0].children[0]; formLength = 3; } // console.log(vm.typeFeeAlert()); //create and insert info block if not present // if (form){ // // console.log('---' + String(formLength) + ' - ' + String(form.children.length));} if (form && form.children.length == formLength && form.children.length > 1 || vm.hasOwnProperty('currentTypeFeeAlert') && vm.currentTypeFeeAlert != vm.typeFeeAlert()) { // console.log('cccc---' + String(formLength) + ' - ' + String(form.children.length)); vm.currentTypeFeeAlert = vm.typeFeeAlert(); var htmlwarning = `

${vm.getFeeAlert()}

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

${txt}

`; } htmlwarning += `

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

`; var htmlcompiled = angular.element(htmlwarning)[0]; // console.log('---' + String(formLength) + ' - ' + String(form.children.length)); if (form.children.length == formLength) { // console.log('---' + String(formLength) + ' - ' + String(form.children.length)); form.insertBefore(htmlcompiled, form.children[formLength - 1]); } else { // console.log(String(formLength) + ' - ' + String(form.children.length)); form.children[form.children.length - 2].replaceWith(htmlcompiled); } } } // Remonte l'EPFL dans la liste des bibliothèques Object.defineProperty(vm.parentCtrl, "form", { configurable: !0, get: function(){ // Mettre l'EPFL en première position var form = this.getFilteredForm(['label', 'multiLabel'], false); if (!vm.hasOwnProperty('pickupLocationsListOrdered')){ for (var i = 0; i < form.length; i++){ if (form[i].key == 'pickupInstitution'){ function compare( a, b ){ var onTopInstitutions = ['41SLSP_EPF', '41SLSP_EPFL']; a = onTopInstitutions.indexOf(a.value); b = onTopInstitutions.indexOf(b.value); if (a == b) {return 0}; return a < b ? 1 : -1; } form[i].options.sort(compare); vm['pickupLocationsListOrdered'] = true; } } } return form; } } ); // Vérifie si l'EPFL est la provenance de l'exemplaire sélectionné vm.isEPFL = function() { return vm.parentCtrl.requestService && vm.parentCtrl.requestService._service['link-to-service'].indexOf('institution=41SLSP_EPF') > 0 ? true : false; } vm.linkBase = "https:\/\/slsp.ch\/fees"; // Personnalisation du message des frais vm.typeFeeAlert = function() { // console.log(vm.parentCtrl.requestHeader); if (['almaRequest.header', 'almaRequestOther.header', 'almaItemRequest.header'].includes(vm.parentCtrl.requestHeader)) { return 'costWarningNetworkLoan'; // $filter('customTranslate')(costWarningNetworkLoan'); } else if (['almaDigitization.header', 'almaDigitizationOther.header', 'almaItemDigitization.header'] .includes(vm.parentCtrl.requestHeader)) { return vm.isEPFL() ? 'costWarningScanEPFL' : 'costWarningScan'; } else if (vm.parentCtrl.requestHeader === 'almaResourceSharing.header') { return 'costWarningPEB'; } else { return 'costWarningGeneral'; } } vm.getFeeAlert = function() { // console.log(vm.typeFeeAlert()); return $filter('customTranslate')(vm.typeFeeAlert()); } // Récupère le bouton PEB de la page afin de simuler un clic dessus vm.get_peb_button = function(){ var allElements = document.getElementsByTagName('span'); for (var i = 0, n = allElements.length; i < n; i++) { if (allElements[i].getAttribute('translate') === 'AlmaResourceSharing' && allElements[i].parentNode.className.indexOf('greenbutton') === -1) { return allElements[i]; } } } // Fonction simulant un clic sur le bouton PEB quand on clique sur les // frais. vm.click_peb = function(){ var button = vm.get_peb_button(); if (button) { button.click(); } else { window.location.href = window.location.origin + '/discovery/blankIll?vid=' + vm.parentCtrl.vid; } } // console.log(vm); }]) .component('prmRequestAfter', { bindings: { parentCtrl: '<' }, controller: 'CourierInfoController', }); diff --git a/primo-explore/custom/src/js/slsp_mod_epfl/index.js b/primo-explore/custom/src/js/slsp_mod_epfl/index.js new file mode 100644 index 0000000..75f72d8 --- /dev/null +++ b/primo-explore/custom/src/js/slsp_mod_epfl/index.js @@ -0,0 +1,2 @@ +require('./epfl-courier-info.module.js') +module.exports = 'epflCourierInfoModule' diff --git a/primo-explore/custom/src/js/slsp_old/README.md b/primo-explore/custom/src/js/slsp_old/README.md deleted file mode 100644 index aa122c6..0000000 --- a/primo-explore/custom/src/js/slsp_old/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Changes to customization js file from SLSP -`custom_slsp.js` - -This file contains all the changes to the master template provided by SLSP. - -Originally the file is named `custom.js` in the customization package. - -## List of Changes -* links to img: l. 42 - replace `custom/41SLSP_NETWORK-CENTRAL_PACKAGE` with `custom/41SLSP_EPF-prod` diff --git a/primo-explore/custom/src/js/slsp_old/main.js b/primo-explore/custom/src/js/slsp_old/main.js deleted file mode 100644 index 15dd272..0000000 --- a/primo-explore/custom/src/js/slsp_old/main.js +++ /dev/null @@ -1,4 +0,0 @@ -import './slsp-archives-htgi'; -import './slsp-archives-viewit'; - -var app = angular.module('viewCustom', ['angularLoad', 'slspArchivesHtgi', 'slspArchivesViewit' ]); diff --git a/primo-explore/custom/src/js/slsp_old/prm-loan-after/package.json b/primo-explore/custom/src/js/slsp_old/prm-loan-after/package.json deleted file mode 100644 index b07a093..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "prm-loan-after", - "version": "1.0.0", - "description": "", - "main": "slsp-loan-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_old/prm-loan-after/slsp-loan-after.module.js b/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-loan-after.module.js deleted file mode 100644 index f91096f..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-loan-after.module.js +++ /dev/null @@ -1,11 +0,0 @@ - -import {slspRenewItemTextModule} from './slsp-renew-item-text/slsp-renew-item-text.module'; - -export const slspLoanAfterModule = angular - .module('slspLoanAfterModule', []) - .component('prmLoanAfter', { - bindings: {parentCtrl: '<'}, - template: `` - }); - -slspLoanAfterModule.requires.push(slspRenewItemTextModule.name); diff --git a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/__package.json b/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/__package.json deleted file mode 100644 index 834025d..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/__package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-renew-item-text", - "version": "1.0.0", - "description": "Persistant renew info for items on loan", - "main": "index.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_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.controller.js b/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.controller.js deleted file mode 100644 index 4eb2287..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.controller.js +++ /dev/null @@ -1,32 +0,0 @@ -//--------Renewstatus display of loan items --------------------------------------- - -export class slspRenewItemTextController { - - constructor() { - - } - - $onInit() { - try { - this.parentCtrl = this.afterCtrl.parentCtrl; - this.getRenewText = getRenewText; - - function getRenewText() { - if (this.parentCtrl.item.renewstatuses !== undefined && this.parentCtrl.item.renewstatuses.renewstatus[0] !== undefined) { - return this.parentCtrl.item.renewstatuses.renewstatus[0]; - } - else { - return - } - } - } - - catch (e) { - console.error("***SLSP*** an error occured: slspRenewItemTextController\n\n"); - console.error(e.message); - } - } -} - -slspRenewItemTextController.$inject = []; - diff --git a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.html b/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.html deleted file mode 100644 index b8fe770..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.html +++ /dev/null @@ -1,8 +0,0 @@ -
- - -
- {{$ctrl.getRenewText()}} - -
- \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.module.js b/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.module.js deleted file mode 100644 index 2dbfc1a..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-loan-after/slsp-renew-item-text/slsp-renew-item-text.module.js +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - import {slspRenewItemTextController} from './slsp-renew-item-text.controller'; - import {slspRenewItemTextHtml} from './slsp-renew-item-text.html'; - - export const slspRenewItemTextModule = angular - .module('slspRenewItemTextModule', []) - .controller('slspRenewItemTextController', slspRenewItemTextController) - .component('slspRenewItemTextComponent', { - bindings: {afterCtrl: '<'}, - controller: 'slspRenewItemTextController', - template: slspRenewItemTextHtml - }) \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/EPFL-eth-location-items-after.module.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/EPFL-eth-location-items-after.module.js deleted file mode 100644 index 4978949..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/EPFL-eth-location-items-after.module.js +++ /dev/null @@ -1,13 +0,0 @@ -import {ethLocationItemsFilterModule} from './eth-location-items-filter/eth-location-items-filter.module'; -import {epflIButtonModule} from '../../fullview/epfl-i-button.module'; // VERSION EPFL -// import {epflIButtonModule} from './slsp-i-button/epfl-i-button.module'; - -export const ethLocationItemsAfterModule = angular - .module('ethLocationItemsAfterModule', []) - .component('prmLocationItemsAfter', { - bindings: {parentCtrl: '<'}, - template: `` - }); - -ethLocationItemsAfterModule.requires.push(ethLocationItemsFilterModule.name); -ethLocationItemsAfterModule.requires.push(epflIButtonModule.name); diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-after.module.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-after.module.js deleted file mode 100644 index eaf813c..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-after.module.js +++ /dev/null @@ -1,12 +0,0 @@ -import {ethLocationItemsFilterModule} from './eth-location-items-filter/eth-location-items-filter.module'; -import {slspIButtonModule} from './slsp-i-button/slsp-i-button.module'; - -export const ethLocationItemsAfterModule = angular - .module('ethLocationItemsAfterModule', []) - .component('prmLocationItemsAfter', { - bindings: {parentCtrl: '<'}, - template: `` - }); - -ethLocationItemsAfterModule.requires.push(ethLocationItemsFilterModule.name); -ethLocationItemsAfterModule.requires.push(slspIButtonModule.name); diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.controller.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.controller.js deleted file mode 100644 index ac4939c..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.controller.js +++ /dev/null @@ -1,44 +0,0 @@ -export class ethLocationItemsFilterController { - - constructor($timeout, $scope) { - this.$timeout = $timeout; - this.$scope = $scope; - } - - $onInit() { - try{ - this.parentCtrl = this.afterCtrl.parentCtrl; - this.$scope.$watch('this.$ctrl.parentCtrl.loc.location.librarycodeTranslation', (newValue, oldValue, scope) => { - - if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){ - - this.$scope.$watch('this.$ctrl.parentCtrl.loc.items', (currentItemsArray) => { - - if (angular.isArray(currentItemsArray) && currentItemsArray.length > 1){ - - this.$timeout(() => { - scope.$ctrl.parentCtrl.isLocationsFilterVisible = true; - }, 0); - - } - - }) - } - - }, true); - - - - - - - } - catch(e){ - console.error("***SLSP*** an error occured: ethLocationItemsFilterController\n\n"); - console.error(e.message); - } - } -} - -ethLocationItemsFilterController.$inject = ['$timeout', '$scope']; - diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.css b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.css deleted file mode 100644 index ad1fcf3..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.css +++ /dev/null @@ -1,4 +0,0 @@ -/* locations filter by default; hide filter button */ -prm-locations button[ng-if='$ctrl.displayFiltersButton && !$ctrl.locationsPrefilterActive'], prm-location-items button[ng-if='($ctrl.isFilter || $ctrl.isFiltered) && $ctrl.isAnyFilterFilled()']{ - display: none !important; -} diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.module.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.module.js deleted file mode 100644 index a931862..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/eth-location-items-filter/eth-location-items-filter.module.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @ngdoc module -* @name ethLocationsFilterModule -* -* @description -* -* Customization for the locations filter:
-* - the locations filter is visible by default -* -* If there is 1 location: prmLocationItemsAfter -* -* If there are multiple locations: prmLocationAfter; -* after all locations: prmLocationsAfter; -* after choosing a location: prmLocationItemsAfter -* -* -* AngularJS Dependencies
-* -* -* CSS/Image Dependencies
-* CSS eth-locations-filter.css -* -* -*/ -import {ethLocationItemsFilterController} from './eth-location-items-filter.controller'; - -export const ethLocationItemsFilterModule = angular - .module('ethLocationItemsFilterModule', []) - .controller('ethLocationItemsFilterController', ethLocationItemsFilterController) - .component('ethLocationItemsFilterComponent', { - bindings: {afterCtrl: '<'}, - controller: 'ethLocationItemsFilterController' - }) diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/package.json b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/package.json deleted file mode 100644 index f7aa0c5..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "prm-location-items-after", - "version": "1.0.0", - "description": "", - "main": "eth-location-items-after.module.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "Bernd Uttenweiler, edit: Philipp Schulz", - "license": "ISC" -} diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/__package.json b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/__package.json deleted file mode 100644 index f47d25d..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/__package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-i-button", - "version": "1.0.0", - "description": "Library Information Button", - "main": "index.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_old/prm-location-Items-after/slsp-i-button/index.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/index.js deleted file mode 100644 index 3a1931e..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/slsp-i-button.module.js') -module.exports = 'slspIButton' \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.controller.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.controller.js deleted file mode 100644 index 1943cad..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.controller.js +++ /dev/null @@ -1,42 +0,0 @@ - - -//--------"i" button --------------------------------------- - - - export class slspIButtonController { - - constructor() {} - - $doCheck() { - try{ - this.parentCtrl = this.afterCtrl.parentCtrl; - this.getLibrary = getLibrary; - this.getLibraryCode = getLibraryCode; - this.getLanguage = getLanguage; - this.biblinkText = "Library"; - this.biblinkBase = "https:\/\/registration.slsp.ch\/libraries\/\?library\="; - - function getLibrary() { - return this.parentCtrl.currLoc.location.librarycodeTranslation; - - } - function getLibraryCode() { - return this.parentCtrl.currLoc.location.libraryCode; - - } - function getLanguage() { - return this.parentCtrl.userSessionManagerService.$location.$$search.lang; - - } - - } - catch(e){ - console.error("***SLSP*** an error occured: slspIButtonController\n\n"); - console.error(e.message); - } - } - } - - slspIButtonController.$inject = []; - - \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.html b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.html deleted file mode 100644 index ceeaee3..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.html +++ /dev/null @@ -1,6 +0,0 @@ - \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.module.js b/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.module.js deleted file mode 100644 index 3d5f6a2..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-location-Items-after/slsp-i-button/slsp-i-button.module.js +++ /dev/null @@ -1,12 +0,0 @@ - import {slspIButtonController} from './slsp-i-button.controller'; - import {slspIButtonHtml} from './slsp-i-button.html'; - - - export const slspIButtonModule = angular - .module('slspIButtonModule', []) - .controller('slspIButtonController', slspIButtonController) - .component('slspIButtonComponent', { - bindings: {afterCtrl: '<'}, - controller: 'slspIButtonController', - template: slspIButtonHtml - }) \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-after.module.js b/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-after.module.js deleted file mode 100644 index aea1f69..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-after.module.js +++ /dev/null @@ -1,10 +0,0 @@ -import {ethLocationsFilterModule} from './eth-locations-filter/eth-locations-filter.module'; - -export const ethLocationsAfterModule = angular - .module('ethLocationsAfterModule', []) - .component('prmLocationsAfter', { - bindings: {parentCtrl: '<'}, - template: `` - }); - -ethLocationsAfterModule.requires.push(ethLocationsFilterModule.name); diff --git a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.controller.js b/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.controller.js deleted file mode 100644 index a18be6d..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.controller.js +++ /dev/null @@ -1,26 +0,0 @@ -export class ethLocationsFilterController { - - constructor($timeout, $scope) { - this.$timeout = $timeout; - this.$scope = $scope; - } - - $onInit() { - try{ - this.parentCtrl = this.afterCtrl.parentCtrl; - this.$scope.$watch('this.$ctrl.parentCtrl.locations[0].location.librarycodeTranslation', (newValue, oldValue, scope) => { - if(!scope.$ctrl.parentCtrl.isLocationsFilterVisible && newValue && newValue != ''){ - this.$timeout(() => { - scope.$ctrl.parentCtrl.isLocationsFilterVisible = true; - }, 0); - } - }, true); - } - catch(e){ - console.error("***ETH*** an error occured: ethLocationsFilterController\n\n"); - console.error(e.message); - } - } -} - -ethLocationsFilterController.$inject = ['$timeout', '$scope']; diff --git a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.css b/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.css deleted file mode 100644 index ad1fcf3..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.css +++ /dev/null @@ -1,4 +0,0 @@ -/* locations filter by default; hide filter button */ -prm-locations button[ng-if='$ctrl.displayFiltersButton && !$ctrl.locationsPrefilterActive'], prm-location-items button[ng-if='($ctrl.isFilter || $ctrl.isFiltered) && $ctrl.isAnyFilterFilled()']{ - display: none !important; -} diff --git a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.module.js b/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.module.js deleted file mode 100644 index 1b8d6fa..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-locations-after/eth-locations-filter/eth-locations-filter.module.js +++ /dev/null @@ -1,33 +0,0 @@ -/** -* @ngdoc module -* @name ethLocationsFilterModule -* -* @description -* -* Customization for the locations filter:
-* - the locations filter is visible by default -* -* If there is 1 location: prmLocationItemsAfter -* -* If there are multiple locations: prmLocationAfter; -* after all locations: prmLocationsAfter; -* after choosing a location: prmLocationItemsAfter -* -* -* AngularJS Dependencies
-* -* -* CSS/Image Dependencies
-* CSS eth-locations-filter.css -* -* -*/ -import {ethLocationsFilterController} from './eth-locations-filter.controller'; - -export const ethLocationsFilterModule = angular - .module('ethLocationsFilterModule', []) - .controller('ethLocationsFilterController', ethLocationsFilterController) - .component('ethLocationsFilterComponent', { - bindings: {afterCtrl: '<'}, - controller: 'ethLocationsFilterController' - }) diff --git a/primo-explore/custom/src/js/slsp_old/prm-locations-after/package.json b/primo-explore/custom/src/js/slsp_old/prm-locations-after/package.json deleted file mode 100644 index 4ca925d..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-locations-after/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "prm-locations-after", - "version": "1.0.0", - "description": "", - "main": "eth-locations-after.module.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "Bernd Uttenweiler, edit: Philipp Schulz", - "license": "ISC" -} diff --git a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js b/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js deleted file mode 100644 index 77b0027..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.controller.js +++ /dev/null @@ -1,36 +0,0 @@ -// 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_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js b/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js deleted file mode 100644 index 6a83b60..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/bcu-lang-switch/bcu-lang-switch.module.js +++ /dev/null @@ -1,21 +0,0 @@ -/** -* @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_old/prm-user-area-expandable-after/package.json b/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/package.json deleted file mode 100644 index a389326..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "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_old/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_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js deleted file mode 100644 index 95ab539..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.controller.js +++ /dev/null @@ -1,33 +0,0 @@ - -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_old/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_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js deleted file mode 100644 index c86d35e..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.module.js +++ /dev/null @@ -1,17 +0,0 @@ - - - //--------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_old/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_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js deleted file mode 100644 index 3f82364..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/slsp-ill-signin-order-logged-out/slsp-ill-signin-order-logged-out.service.js +++ /dev/null @@ -1,68 +0,0 @@ -// 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: slspIllSigninOrderLoggedOutService.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: slspIllSigninOrderLoggedOutService.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_old/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js b/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js deleted file mode 100644 index 73a38ae..0000000 --- a/primo-explore/custom/src/js/slsp_old/prm-user-area-expandable-after/slsp-user-area-expandable-after.module.js +++ /dev/null @@ -1,12 +0,0 @@ -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_old/slsp-archives-htgi/index.js b/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/index.js deleted file mode 100644 index fce9641..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/slsp-archives-htgi.module.js') -module.exports = 'slspArchivesHtgi' diff --git a/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/js/slsp-archives-htgi.module.js b/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/js/slsp-archives-htgi.module.js deleted file mode 100644 index 97444f4..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/js/slsp-archives-htgi.module.js +++ /dev/null @@ -1,80 +0,0 @@ -angular - .module('slspArchivesHtgi', []) - - // "how to get it" section for resources of archives MFA, TMA (CMI STAR) - - .controller('ArchivesHtgiController', [function () { - - this.$onInit = function () { - try{ - if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){ - return; - } - this.source = this.parentCtrl.item.pnx.display.source[0]; - // CMI STAR sources - if(this.source === 'ETH_MaxFrischArchiv' || this.source === 'ETH_ThomasMannArchiv'){ - // hide content of htgi section - let section = document.getElementById('full-view-container'); - section.classList.add('slsp-archives-hide'); - - // get guid of CMIStar - let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0]; - let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1); - - // different sources: concat url - if(this.source === 'ETH_ThomasMannArchiv'){ - this.url = 'http://www.online.tma.ethz.ch/home/#/content/' + guid; - // only for test - //this.label = 'Detailed information in Thomas Mann-Archiv Online (metadata only)'; - } - else if (this.source === 'ETH_MaxFrischArchiv') { - this.url = 'http://maxfrischarchiv-online.ethz.ch/home/#/content/' + guid; - // only for test - //this.label = 'Request via Max Frisch-Archiv Online'; - } - } - } - catch(e){ - console.error("***SLSP*** an error occured: ArchivesHtgiController\n\n"); - console.error(e.message); - } - } - }]) - - .component('almaHtgiSvcAfter', { - bindings: { parentCtrl: '<' }, - controller: 'ArchivesHtgiController', - template: ` -
- - - {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}} - {{$ctrl.label}} -
- -
-
-
-
-
- No request possible. The digitized item can be consulted in the Thomas Mann Archives reading room upon advance registration ( - - Contact - - - ). -
-
-
-
- Informationen zu Bestellung und Benutzung siehe - - Bedienungshinweise - - - . -
-
-
- ` - }); diff --git a/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/package.json b/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/package.json deleted file mode 100644 index 26652a1..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-htgi/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-archives-htgi", - "version": "1.0.0", - "description": "How to get it for archives without holdings", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "Bernd Uttenweiler", - "license": "ISC" -} diff --git a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/index.js b/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/index.js deleted file mode 100644 index ef92187..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/slsp-archives-viewit.module.js') -module.exports = 'slspArchivesViewit' diff --git a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/js/slsp-archives-viewit.module.js b/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/js/slsp-archives-viewit.module.js deleted file mode 100644 index ee45545..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/js/slsp-archives-viewit.module.js +++ /dev/null @@ -1,146 +0,0 @@ -angular -.module('slspArchivesViewit', []) - - .component('prmSearchResultAvailabilityLineAfter', { - bindings: { parentCtrl: '<' }, - controller: 'ArchivesAvailabilityLineController', - template:'' - }) - - .component('prmAlmaViewitAfter', { - bindings: { parentCtrl: '<' }, - controller: 'ArchivesViewitController', - template: ` -
- - - {{('customized.archives.' + $ctrl.source + '.linktext' | translate)}} - {{$ctrl.label}} -
- -
-
-
-
-
- Informationen zu Bestellung und Benutzung siehe - - Bedienungshinweise - - - . -
-
-
- ` - }) - - // viewit section for archives when there are only partial digitized items, e.g. "ETH Hochschularchiv" (CMI STAR) - .controller('ArchivesViewitController', ['$translate', function ($translate) { - this.$onInit = function () { - try{ - if(!this.parentCtrl.item.pnx.display.source || this.parentCtrl.item.pnx.display.source.length === 0){ - return; - } - this.source = this.parentCtrl.item.pnx.display.source[0]; - // CMI STAR sources - if(this.source === 'ETH_Hochschularchiv'){ - 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){ - - // there is an online resource: return and do nothing - let aOnlineLink = this.parentCtrl.item.delivery.GetIt1[0].links.filter( l => { - if(l.isLinktoOnline && l.link !== ''){ - return true; - } - return false; - }); - if (aOnlineLink.length > 0) { - return; - } - - // there is no online resource - // change section heading - $translate('nui.getit.service_howtogetit').then((translation) => { - let fullView = document.getElementById('fullView'); - angular.element(fullView.querySelector("h4[translate='nui.getit.service_viewit']")).text(translation); - angular.element(fullView.querySelector("#services-index span[translate='nui.getit.service_viewit']")).text(translation); - }); - - } - // hide content of viewit section - let section = document.getElementById('full-view-container'); - section.classList.add('slsp-archives-hide'); - - // get guid of CMIStar - let sourceid = this.parentCtrl.item.pnx.control.originalsourceid[0]; - let guid = sourceid.substring(sourceid.lastIndexOf(':') + 1); - - // different sources: concat url - if(this.source === 'ETH_Hochschularchiv'){ - this.url = 'http://archivdatenbank-online.ethz.ch/hsa/#/content/' + guid; - // only for test - //this.label = 'Bestellen über Hochschularchiv Online'; - } - } - } - catch(e){ - console.error("***SLSP*** an error occured: ArchivesViewitController\n\n"); - console.error(e.message); - } - } - }]) - - // change availability line, if there is no digitization - .controller('ArchivesAvailabilityLineController', ['$translate', function ($translate) { - this.$onInit = function () { - try{ - this.changeButton = false; - if(!this.parentCtrl.result.pnx.display.source || this.parentCtrl.result.pnx.display.source.length === 0){ - return; - } - this.source = this.parentCtrl.result.pnx.display.source[0]; - if(!(this.source === 'ETH_Hochschularchiv'))return; - 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; - - let aOnlineLink = this.parentCtrl.result.delivery.GetIt1[0].links.filter( l => { - if(l.isLinktoOnline && l.link !== ''){ - return true; - } - return false; - }); - if (aOnlineLink.length === 0) { - // there is no online resource - $translate('delivery.code.no_inventory').then((translation) => { - this.changeButton = true; - this.changeButtonText = translation; - }); - let availabilityLine = this.parentCtrl.$element[0]; - if(availabilityLine) { - availabilityLine.classList.add('slsp-hsa-no-online'); - } - } - } - catch(e){ - console.error("***SLSP*** an error occured: ArchivesAvailabilityLineController\n\n"); - console.error(e.message); - } - } - - this.$doCheck = function () { - try{ - if (this.changeButton){ - let availabilityLine = this.parentCtrl.$element[0]; - let button = availabilityLine.querySelector('.availability-status'); - if(angular.element(button) && angular.element(button).length > 0){ - angular.element(button).html(this.changeButtonText); - this.changeButton = false; - this.changeButtonText = ''; - } - } - } - catch(e){ - console.error("***ETH*** an error occured: ArchivesAvailabilityLineController $doCheck\n\n"); - console.error(e.message); - } - } - }]) diff --git a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/package.json b/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/package.json deleted file mode 100644 index ce695fe..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-archives-viewit/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-archives-viewit", - "version": "1.0.0", - "description": "Viewit section for archives when there are only partial digitized items", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "Bernd Uttenweiler", - "license": "ISC" -} diff --git a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/index.js b/primo-explore/custom/src/js/slsp_old/slsp-courier-info/index.js deleted file mode 100644 index a17d0c2..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/epfl-courier-info.module.js') -module.exports = 'slspCourierInfo' diff --git a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/slsp-courier-info.module.js b/primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/slsp-courier-info.module.js deleted file mode 100644 index f361650..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/js/slsp-courier-info.module.js +++ /dev/null @@ -1,44 +0,0 @@ -// angular -// .module('slspCourierInfo', []) -// -// //--------Fees messages --------------------------------------- -// -// .controller('CourierInfoController', ['$element', function ($element) { -// -// //shortcut for convenience -// -// this.form = $element[0].parentElement; -// -// //function for inserting block -// -// this.$doCheck = function () { -// let form = false; -// let formLength = 2; -// if (this.form.children[0].children[1] !== undefined && this.form.children[0].children[1].children[0] !== undefined) { -// form = this.form.children[0].children[1].children[0]; -// } -// else if (this.form.children[0].children[0] !== undefined && this.form.children[0].children[0].children[0] !== undefined) { -// form = this.form.children[0].children[0].children[0]; -// formLength = 3; -// } -// -// //create and insert info block if not present -// -// if (form && form.children.length == formLength) { -// let info = document.createElement('DIV'); -// info.className = "courier-info bar alert-bar"; -// info.innerHTML = -// `

${this.parentCtrl.$translate.instant('customize.fullview.feesTitle')}

-//

${this.parentCtrl.$translate.instant('customize.fullview.feesInfo')}

-//

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

`; -// form.insertBefore(info, form.children[formLength - 1]); -// } -// } -// -// }]) -// -// .component('prmRequestAfter', { -// bindings: { parentCtrl: '<' }, -// controller: 'CourierInfoController' -// }); diff --git a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/package.json b/primo-explore/custom/src/js/slsp_old/slsp-courier-info/package.json deleted file mode 100644 index 7e292bf..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-courier-info/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-courier-info", - "version": "1.0.0", - "description": "Courier Information", - "main": "index.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_old/slsp-edit-personal-details/index.js b/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/index.js deleted file mode 100644 index c58b236..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/epfl-edit-personal-details.module.js') -module.exports = 'epflEditPersonalDetails' diff --git a/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/js/epfl-edit-personal-details.module.js b/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/js/epfl-edit-personal-details.module.js deleted file mode 100644 index 9300b85..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/js/epfl-edit-personal-details.module.js +++ /dev/null @@ -1,158 +0,0 @@ -/* --------------------- */ -/* - Début ajouts EPFL - */ -/* - -Ce module permet d'afficher les boutons renvoyant à SWITCH edu-ID. - -- "this" a été remplacé partout par une variable "vm". C'est indispensable -pour garder la bonne référence dans les promesses. -- Les boutons sont ajoutés avant l'adresse ce qui ne peut pas passer par -un template - -*/ -/* - Fin ajouts EPFL - */ -/* ------------------- */ - - -angular - .module('epflEditPersonalDetails', []) - - - - //------------------------------ edit personal details --------------------------- - - .controller('EditPersonalDetailsController', ['$scope', '$element', '$translate' , function ($scope, $element, $translate) { - var vm = this; // Ajout EPFL - let lang = 'en'; - let sms = $scope.$root.$$childHead.$ctrl.userSessionManagerService; - if (sms) { - lang = sms.getInterfaceLanguage(); - } - - vm.detailsBaseEdu = "https:\/\/eduid.ch\/web\/change-account-data\/2\/?lang=" + lang; - vm.detailsBaseReg = "https:\/\/registration.slsp.ch\/library-card\/?lang=" + lang; - vm.exclude = ['STAFF', '11', '12', '13', '14', '15', '16', '91', '92']; - vm.grpA = ['11', '91', '92']; // comptes locaux - vm.grpB = ['12', '13', '14', '15', '16']; // comptes institutionnels - - - vm.getPatronGrp = function() { - if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) { - let patron = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode; - if (!vm.exclude.includes(patron)) { - return true; - } - else { - return false; - } - } - return false; - } - - vm.grpLabelA = function() { - if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) { - let labelA = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode; - if (vm.grpA.includes(labelA)) { - return true; - } - else { - return false; - } - } - return false; - } - - - vm.grpLabelB = function() { - if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) { - let labelB = vm.parentCtrl.personalInfoService.personalInfo.patronstatus[0].registration[0].institution[0].patronstatuscode; - if (vm.grpB.includes(labelB)) { - return true; - } - else { - return false; - } - } - return false; - } - - - /* --------------------- */ - /* - Début ajouts EPFL - */ - - vm.test = 0; - vm.testPersonalInfo = function() { - /* Constructeur de la promesse. Cette promess échoue quand - les informations utilisateur ne sont pas ou pas encore - disponible. */ - return new Promise((persInfoAv, persInfoNotAv) => { - if (vm.parentCtrl.personalInfoService.personalInfo !== undefined) { - persInfoAv(); - } else { - persInfoNotAv(); - } - }) - } - vm.persInfoAv = function() { - /* Succès de la promesse: le groupe utilisateur a été trouvé et - les boutons adéquats s'afichent. */ - let html = ''; - var htmlcompiled = angular.element(html)[0]; - var place_to_insert = $element[0].parentElement.children[1].children[0]; - place_to_insert.insertBefore(htmlcompiled, place_to_insert.children[1]); - } - vm.persInfoNotAv = function() { - vm.test += 1; - if (vm.test < 10) { - /* En cas d'échec, on attend 0.5 second et on relance le test */ - setTimeout(() => vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv), 500); - } - } - if (vm.test === 0) { - /* Premier lancement du test pour voir si les infos utilisateur - sont disponibles */ - vm.testPersonalInfo().then(vm.persInfoAv, vm.persInfoNotAv); - } - /* - Fin ajouts EPFL - */ - /* ------------------- */ - - - }]) - - - .component('prmPersonalInfoAfter', { - bindings: { parentCtrl: '<' }, - controller: 'EditPersonalDetailsController', - /* Suppression EPFL */ - // template: '

' - }); diff --git a/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/package.json b/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/package.json deleted file mode 100644 index 9595ef2..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-edit-personal-details/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-edit-personal-details", - "version": "1.0.0", - "description": "Edit Personal Details Button - Restriction for different Patron Groups", - "main": "index.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_old/slsp-http-intercept-requests/README.md b/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/README.md deleted file mode 100644 index 7569e4c..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/README.md +++ /dev/null @@ -1,17 +0,0 @@ - -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_old/slsp-http-intercept-requests/index.js b/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/index.js deleted file mode 100644 index 5d1df3e..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/index.js +++ /dev/null @@ -1,2 +0,0 @@ -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_old/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js b/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js deleted file mode 100644 index 2816e20..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/js/slsp-http-intercept-requests.module.js +++ /dev/null @@ -1,68 +0,0 @@ -export const slspHttpInterceptRequests = 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)) { - if (response.status == 200 && response.data.status == "ok") { - 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"] - } - let list_of_photocopy_states = { - 'en': ["in transit", "in process"], - 'de': ["transfer", "in bearbeitung"], - 'fr': ["en cours de transfert", "en cours"], - 'it': ["in transito", "in processo"] - } - 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('|')) - // rewrite 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 holds: ${interfaceLanguage}` - } - - if (Object.keys(list_of_photocopy_states).includes(interfaceLanguage)) { - let list_of_photocopy_states_regexp = RegExp(list_of_photocopy_states[interfaceLanguage].map(m => m.toLowerCase()).join('|')) - // rewrite cancellable photocopies - response.data.data.photocopies.photocopy.map((m) => { - if (list_of_photocopy_states_regexp.test(m.requeststatus.toLowerCase())) { - m.cancel = 'N' - } - }) - } - else { - throw `No mapping found for photocopies: ${interfaceLanguage}` - } - } - } - } - catch (error) { - console.error(error); - } - return response; - } - } - }]) - }]) diff --git a/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/package.json b/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/package.json deleted file mode 100644 index b9c84da..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-http-intercept-requests/package.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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_old/slsp-ill-signin-order-alert/index.js b/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/index.js deleted file mode 100644 index 8a00d99..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./js/slsp-ill-signin-order-alert.module.js') -module.exports = 'slspIllSigninOrderAlert' \ No newline at end of file diff --git a/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/js/slsp-ill-signin-order-alert.module.js b/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/js/slsp-ill-signin-order-alert.module.js deleted file mode 100644 index fc79181..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/js/slsp-ill-signin-order-alert.module.js +++ /dev/null @@ -1,29 +0,0 @@ -//--------ILL Signin Order - if Alert Message --------------------------------------- - -angular - .module('slspIllSigninOrderAlert', []) - - .controller('AlertMsgController', ['$scope', function ($scope) { - var vm = this; - vm.getAlert = getAlert - - function getAlert() { - var ga = vm.parentCtrl.almaHowToGetitService.reqAlert._htmlMsg; - var myEl2 = angular.element(document.querySelector('primo-explore')); - - if (ga.length > 0) { - return myEl2.addClass('alert'); - - } - else { - - return myEl2.removeClass('alert'); - } - } - }]) - - .component('almaHowovpAfter', { - bindings: { parentCtrl: '<' }, - controller: 'AlertMsgController', - template: '
{{$ctrl.getAlert()}}
' - }); diff --git a/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/package.json b/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/package.json deleted file mode 100644 index 33014a9..0000000 --- a/primo-explore/custom/src/js/slsp_old/slsp-ill-signin-order-alert/package.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "slsp-ill-signin-order-alert", - "version": "1.0.0", - "description": "ILL Signin Order - if Alert Message", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "author": "Philipp Schulz", - "license": "ISC" -}