Skip to content

Instantly share code, notes, and snippets.

@timhodson
Last active February 6, 2025 16:47
Show Gist options
  • Save timhodson/cfc22d17548a8539bf9bb0808e55868d to your computer and use it in GitHub Desktop.
Save timhodson/cfc22d17548a8539bf9bb0808e55868d to your computer and use it in GitHub Desktop.
Primo VE - Talis Aspire Customisation
// Insert this code into the primo VE customisation folder `js/custom.js` anywhere after the line that reads:
// var app = angular.module('viewCustom', ['angularLoad']);
// and before the line that reads:
// })();
// this code can coexist wth other customisations that you may have for other products.
// === begin Talis Aspire Code ===
// Configuration
window.talis_aspire = {
/* === You have to set these up! === */
http_base_url: "http://resourcelists.my_uni.ac.uk/", // Your http base URL or the same as base_url
base_url: 'https://mytenancy.rl.talis.com/', // Your Readinglists tenancy base url with a trailing slash
mms_id_institution_code: 1234, // The last four digits of your MMS_IDs
/* === customise the related lists === */
related_lists_display_label: 'Cited on reading lists:', // Text to display to users
/* === customise the boommark this button === */
display_bookmark_this_button: true, // set to false to hide the button
bookmark_this_title_attribute: 'bookmark this item to reading lists', // tooltip for the bookmark this button
bookmark_this_button_text: 'Send To Reading Lists', // Clickable text for the bookmark this button
/* === Don't need to change anything below this comment. === */
// A helper function to loop through all the values to check for the local MMSID
checkMMSIDcontainsInstitutionCode: function (mms_id) {
// Does it match the format for our local MMSID?
// the last four digits reflect your local values
var mmsidCheck = new RegExp('^99[0-9]*' + talis_aspire.mms_id_institution_code + '$');
if (mmsidCheck.test(mms_id) == true){
return mms_id;
}
}
}
// Whitelisting for Talis Aspire API Requests
app.constant('AspireTrustBaseUrl', talis_aspire.base_url).config(['$sceDelegateProvider', 'AspireTrustBaseUrl', function ($sceDelegateProvider, AspireTrustBaseUrl) {
var urlWhitelist = $sceDelegateProvider.resourceUrlWhitelist();
urlWhitelist.push(AspireTrustBaseUrl + '**');
$sceDelegateProvider.resourceUrlWhitelist(urlWhitelist);
}]);
// End of whitelisting
// Show bookmark this button
// prmBriefResultAfter - After the Title and Author display at the top of the page
// prmBriefResultContainerAfter - After all the availability stuff
// prmActionContainerAfter - After the 'send to' buttons
app.component('prmActionContainerAfter',{
bindings: { parentCtrl: '<' },
controller: 'DisplayBookMarkThisController',
template: '<div style="text-align: center;"><button style="display: inline-block; padding: 5px; margin: 5px auto;" ng-click="bookmarkThisClick(mmsid.url)" ng-repeat="mmsid in bookmarkable_mmsids" title="{{mmsid.title}}" class="button"><span>{{mmsid.action_text}}</span></button></div>'
});
app.controller('DisplayBookMarkThisController', function ($scope) {
if (talis_aspire.display_bookmark_this_button == true) {
var mms_id_arr = [];
// Loop through all MMS_IDs using our function above.
// The last MMSID found that matches will be the one used.
$scope.$parent.$ctrl.item.pnx.display.mms.forEach( function (mmsID){
let result = talis_aspire.checkMMSIDcontainsInstitutionCode(mmsID);
mms_id_arr.push(result);
});
var bookmarkable_mmsids = [];
mms_id_arr.forEach(function (theMMSID){
var url = talis_aspire.base_url + 'ui/forms/bookmarklet.html?bibid=' + theMMSID;
var title = talis_aspire.bookmark_this_title_attribute
var action_text = talis_aspire.bookmark_this_button_text
bookmarkable_mmsids.push({url:url, title:title, action_text:action_text});
});
$scope.bookmarkable_mmsids = bookmarkable_mmsids;
$scope.bookmarkThisClick = function(url){
window.location.href = url;
};
}
});
// Show reading lists this item appears on
app.component('prmServiceDetailsAfter', {
bindings: { parentCtrl: '<' },
controller: 'DisplayAspireListsController',
template: '<div ng-show="listsFound != null"><span class="bold text">'+talis_aspire.related_lists_display_label+'</span><ul><li ng-repeat="(url,listname) in listsFound"><a href="{{url}}">{{listname}} </a></li></ul></div>'
});
app.controller('DisplayAspireListsController', function ($scope, $http) {
// Declare a global variable to hold the MMSID when it comes from the function
var mms_id_arr = [];
// Loop through all MMS_IDs using our function above.
// The last MMSID found that matches will be the one used.
$scope.$parent.$ctrl.item.pnx.display.mms.forEach( function (mmsID){
let result = talis_aspire.checkMMSIDcontainsInstitutionCode(mmsID);
mms_id_arr.push(result);
});
mms_id_arr.forEach(function(theMMSID){
if (typeof(theMMSID) !== 'undefined') {
var url = talis_aspire.base_url + 'lcn/' + theMMSID + '/lists.json';
// Make the call to Aspire
$http.jsonp(url,{jsonpCallbackParam: 'cb'})
.then(function handleSuccess(response) {
let updatedData = {};
const data = response.data;
Object.keys(data).forEach(function (oldKey) {
const newKey = oldKey.replace(talis_aspire.http_base_url, talis_aspire.base_url);
updatedData[newKey] = data[oldKey];
});
$scope.listsFound = updatedData;
});
}
});
});
// === End Talis Aspire Code ===
@timhodson
Copy link
Author

Updated the gist to support generation of HTTPS URLs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment