Ignore:
Timestamp:
2019-07-02T11:32:34+12:00 (5 years ago)
Author:
davidb
Message:

Javascript code to implements favourites. Done in a way to be compatible with keeping the original berry-picking code functional also

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/berrybasket/berrybasket.js

    r33252 r33259  
    3333
    3434
     35var countFavourites = function(callback) {
     36    // identical AJAX call to countBerries()
     37    return countBerries(callback);
     38}
     39
     40
    3541// adds berries onto page
    36 var checkout = function(){
     42var berryCheckout = function(){
    3743
    3844    if ( document.getElementById('berrybasket') == null ) return;
     
    120126}
    121127
     128// display selected favourites (filled-in star icon) on page
     129var favouritesCheckout = function(){
     130
     131    if ( document.getElementById('berrybasket') == null ) return;
     132   
     133    var request_type = "GET";
     134    var url = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=ItemNum&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&c=";
     135
     136    var responseSuccess = function(o){
     137       
     138        var response = o.responseXML;
     139        var size = response.getElementsByTagName('size').item(0).getAttribute('value');
     140
     141        var items = response.getElementsByTagName('item');
     142
     143        berryList = new Array();
     144        for (var i=0;i < items.length ; i++ ){
     145
     146            var itemID = items[i].getAttribute('collection')+":"+items[i].getAttribute('name');
     147            var item = YAHOO.util.Dom.get(itemID);
     148
     149            if (item != null){
     150                    item.src = gs.variables.selected_favourite_icon_url;
     151                    item.setAttribute("data-is-favourite","true");
     152            }
     153            berryList[berryList.length] = items[i];
     154        }
     155
     156        // set favourite images visible
     157        // they are set to be invisible to prevent flickering when first loaded (see berry.css)
     158
     159        var berries = document.getElementsByTagName('img');
     160
     161        for (var j=0; j < berries.length; j++){
     162            var berry = berries[j];
     163            var parent = berry.parentNode;
     164            if (parent !=null && parent.id == "documentberries"){
     165                var root = YAHOO.util.Dom.get(berry.id+":root");
     166                var section = YAHOO.util.Dom.get(berry.id+":section");
     167                if(root!=null && root.id.indexOf(berry.id) !=-1){
     168                    root.style.visibility ="visible" ;
     169                }
     170
     171                if(section!=null && section.id.indexOf(berry.id) !=-1){
     172                    section.style.visibility ="visible" ;
     173                }
     174            }
     175
     176            if (berry.className && berry.className == 'pick'){
     177                berry.style.visibility = "visible";
     178                // new ygDDPlayer(berry.id,'basket',berryList); // **** can go
     179            }
     180        }
     181        updateFavouritesCount();
     182    }
     183
     184    var responseFailure = function(o){
     185        console.error("Berry Basket GetItems AJAX call failed:" + url);
     186    }
     187
     188    var callback = {
     189        success: responseSuccess,
     190        failure: responseFailure
     191    }
     192
     193    //var date = new Date();
     194    //url += "&rand=" + date.getTime();
     195    YAHOO.util.Connect.asyncRequest(request_type , url , callback);
     196}
     197
     198
    122199function updateBerryImages(){
    123200
     
    171248}
    172249
     250function updateFavouritesCount() {
     251    var favouritesCountElement = YAHOO.util.Dom.get('favouritesCountDisplay');
     252    if ( favouritesCountElement == null ) return;
     253    if ( berryList.length == 0 ) {
     254        favouritesCountElement.innerHTML = "(0)";
     255    } else {
     256        favouritesCountElement.innerHTML = "(" + berryList.length + ")";
     257    }
     258}
     259
    173260function basketUpdate(e) {
    174 //alert( arguments.callee );
     261
    175262    var target = e.target;
    176263    if ((target.id.toLowerCase() == 'berrybasket' || target.id.toLowerCase() == 'berries') && !show){
     
    190277
    191278function showBasket() {
    192 //alert( arguments.callee );
     279
    193280    var berryBasket = YAHOO.util.Dom.get('berrybasket');
    194281    var basketHandle = YAHOO.util.Dom.get('baskethandle');
     
    281368
    282369function hideBasket() {
    283 //alert( arguments.callee );
    284370    var i = 0;
    285371    var berryBasket = YAHOO.util.Dom.get('berrybasket');
     
    414500}
    415501
    416 YAHOO.util.Event.addListener(window, 'load', checkout);
     502
     503
     504function addFavourite(el){
     505    var addurl = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=AddItem&c=&s1.id=2&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&s1.item=" + el.id;
     506
     507    var addSuccess = function(o){
     508        var result = o.responseXML;
     509        var items = result.getElementsByTagName('item');
     510
     511        if (items.length > 0){
     512                // assumes that there is only 1 item to add
     513            var item = items[0];
     514            berryList[berryList.length]= item;
     515
     516                    updateFavouritesCount();
     517        }
     518
     519    }
     520
     521    var addFailure = function(o){
     522    }
     523
     524    var addcallback = {
     525        success:addSuccess,
     526        failure:addFailure
     527    }
     528   
     529    YAHOO.util.Connect.asyncRequest(request_type , addurl , addcallback);
     530}
     531
     532
     533function deleteFavourite(el){
     534    var delurl = gs.xsltParams.library_name + "?a=pr&rt=r&ro=1&s=DeleteItems&c=&o=XML&hhf="+makeURLComponentSafe("[{\"name\":\"Cache-Control\", \"value\":\"no-cache\"}]")+"&s1.items=" + el.id;
     535
     536    var delSuccess = function(o){
     537
     538            for (var i in berryList) {
     539                        var berry = berryList[i];
     540                console.log(berry);
     541                        var id = berry.getAttribute('collection')+":"+berry.getAttribute('name');
     542
     543                        if (id == el.id){
     544                                berryList.splice(i,1);
     545
     546                                break;
     547                        }
     548
     549                }
     550            updateFavouritesCount();
     551       
     552    }
     553
     554    var delFailure = function(o){
     555    }
     556
     557    var delcallback = {
     558        success:delSuccess,
     559        failure:delFailure
     560    }
     561   
     562    YAHOO.util.Connect.asyncRequest(request_type , delurl , delcallback);
     563}
     564
     565
     566
     567function toggleFavourite(el)
     568{
     569    var is_favourite = el.getAttribute("data-is-favourite");
     570    if (is_favourite == "true") {
     571    deleteFavourite(el);
     572    el.src = gs.variables.unselected_favourite_icon_url;
     573    el.setAttribute("data-is-favourite","false")
     574    }
     575    else {
     576    addFavourite(el);
     577    el.src = gs.variables.selected_favourite_icon_url;
     578    el.setAttribute("data-is-favourite","true")
     579    }
     580}
     581
     582if(gs.cgiParams.berrybasket == "on")
     583{
     584    YAHOO.util.Event.addListener(window, 'load', berryCheckout);
     585}
     586else {
     587    // assumption is that favouritesbasket is on
     588    YAHOO.util.Event.addListener(window, 'load', favouritesCheckout);
     589}
     590
    417591//YAHOO.util.Event.addListener(window, 'click', basketUpdate);
    418592
Note: See TracChangeset for help on using the changeset viewer.