Changeset 33259 for main


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

Location:
main/trunk/greenstone3/web/interfaces/default/js
Files:
4 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
  • main/trunk/greenstone3/web/interfaces/default/js/berrybasket/berrycheckout.js

    r33254 r33259  
    114114        var berry = docList[i];
    115115        var berry_id = berry['collection'] + ":" + berry['name'];
    116        
     116               
    117117        for(var j = searchForNextSelectedIdFromIndex; j >= 0; j--) {
    118118            if(idsToDelete[j] == berry_id) {
     
    148148        } 
    149149        content.appendChild(document.createTextNode('Your berry basket is empty.'));
    150    
     150        var berryBasketDelOptions = YAHOO.util.Dom.get('delOptions');
     151        if (berryBasketDelOptions != null) {
     152        berryBasketDelOptions.setAttribute("style","display:none;");
     153        }
     154
    151155        var trashbin =  YAHOO.util.Dom.get('trashbin');
    152156        if ( trashbin !=null){
     
    155159    }
    156160
    157     // Ensure the select-all, delete-all and delete-selected checkboxes are deselected
    158     YAHOO.util.Dom.get('select-all-checkbox').checked = false;
    159     YAHOO.util.Dom.get('delete-selected-checkbox').checked = false;
    160     YAHOO.util.Dom.get('delete-all-checkbox').checked = false;
     161    var have_checkboxes = YAHOO.util.Dom.get('select-all-checkbox'); // just pick one for the test
     162    if (have_checkboxes) {
     163        // Ensure the select-all, delete-all and delete-selected checkboxes are deselected
     164        YAHOO.util.Dom.get('select-all-checkbox').checked = false;
     165        YAHOO.util.Dom.get('delete-selected-checkbox').checked = false;
     166        YAHOO.util.Dom.get('delete-all-checkbox').checked = false;
     167    }
    161168    }
    162169
     
    173180    YAHOO.util.Connect.asyncRequest(request_type, delurl , delcallback);
    174181}
     182
     183function deleteFavouriteFromCheckout(el)
     184{
     185    var  delurl = delurlPath; // var delurlPath is declared in ygDDPlayer.js.
     186
     187    var doc_id = el.getAttribute('id');
     188    delurl += doc_id;
     189
     190    var deleteAll = false;
     191    var selectedList = [ el ];
     192    var idsToDelete = [ doc_id ];
     193    doDelete(deleteAll, delurl, selectedList, idsToDelete);
     194}
     195
    175196
    176197function navigate(e){
     
    267288}
    268289
    269 function showFullView(){
     290function showFullView() {
     291    if (gs.cgiParams.berrybasket == "on") {
     292    showFullViewBerries();
     293    }
     294    else {
     295    // assumption is that favouritesbasket is on
     296    showFullViewFavourites();
     297    }   
     298}
     299   
     300function showFullViewBerries(){
    270301
    271302    var content =  YAHOO.util.Dom.get('berryBasketContent');
     
    320351}
    321352
     353function showFullViewFavourites(){
     354
     355    var content =  YAHOO.util.Dom.get('berryBasketContent');
     356    var fullview =  YAHOO.util.Dom.get('fullview');
     357    berryCheckoutPageClear();
     358
     359        var berryBasketDelOptions = YAHOO.util.Dom.get('delOptions');
     360    if (docList.length == 0){
     361        content.appendChild(document.createTextNode(gs.text.berry.empty_basket));
     362        if (berryBasketDelOptions != null) {
     363        berryBasketDelOptions.setAttribute("style","display:none;");
     364        }
     365
     366        return;
     367    }
     368        if (berryBasketDelOptions != null) {
     369       berryBasketDelOptions.setAttribute("style","display:block;");
     370    }
     371
     372    var dlist = document.createElement('div');
     373    content.appendChild(dlist);
     374    var ul = document.createElement('ul');
     375    dlist.appendChild(ul);
     376
     377    ul.setAttribute("id", "berryDocsList");
     378        ul.setAttribute("style","list-style: none;");
     379
     380    for (var i in docList){
     381        var doc = docList[i];
     382        var li = document.createElement('li');
     383            var img = document.createElement('img');
     384        var text ="";
     385
     386        var doc_id = doc['collection']+":"+ doc['name'];       
     387       
     388        img.setAttribute("src", gs.variables.selected_favourite_icon_url);
     389        img.setAttribute("id", doc_id);
     390        img.setAttribute("height", "20px");
     391        img.setAttribute("width", "20px");
     392            img.setAttribute("style","padding-right: 5px;"); // **** better to do this with CSS
     393        img.setAttribute("onClick", "deleteFavouriteFromCheckout(this)");
     394        li.appendChild(img);
     395
     396        generateDocDisplay(li, doc, doc_id)
     397        li.className = 'berrydoc';
     398        ul.appendChild(li);
     399    }
     400
     401}
     402
    322403function generateDocDisplay(li, doc, doc_id) {
    323     var checkbox = document.createElement('input');
    324     checkbox.setAttribute("type", "checkbox");
    325     checkbox.setAttribute("id", doc_id+"-checkbox");
    326     checkbox.setAttribute("name", "select-berry-checkbox");
    327     checkbox.setAttribute("value", "select-"+doc_id);
    328    
    329404    var a = document.createElement('a');
    330405    var text="";
     
    335410    li.appendChild(document.createTextNode(doc['root_Title']+": "));
    336411    }
    337     li.appendChild(checkbox);
     412
    338413    li.appendChild(a);
    339414    li.appendChild(document.createTextNode(" ("+doc['collection']+")"));
     
    348423
    349424}
    350  
     425
    351426function showTextView(){
    352427
  • main/trunk/greenstone3/web/interfaces/default/js/classifier_scripts.js

    r33217 r33259  
    129129            url = url + "&berrybasket=on";
    130130        }
     131        if(gs.cgiParams.favouritesbasket == "on")
     132        {
     133            url = url + "&favouritesbasket=on";
     134        }
    131135
    132136        if(url.indexOf("#") != -1)
     
    148152            if(gs.cgiParams.berrybasket == "on")
    149153            {
    150                 checkout();
     154                    berryCheckout();
    151155            }
    152             else if(gs.cgiParams.documentbasket == "on")
     156            if(gs.cgiParams.favouritesbasket == "on")
     157            {
     158                favouritesCheckout();
     159            }
     160            if(gs.cgiParams.documentbasket == "on")
    153161            {
    154162                dmcheckout();
  • main/trunk/greenstone3/web/interfaces/default/js/facet-scripts.js

    r33154 r33259  
    5757            $("#resultsArea").html("");
    5858            $("#resultsArea").html(response.substring(response.indexOf(">") + 1, response.lastIndexOf("<")));
    59                 checkout(); // called to add back in berries (if berrybasket active)
     59            if(gs.cgiParams.berrybasket == "on") {
     60                    berryCheckout(); // called to add back in berries (if berrybasket active)
     61            }
     62            if(gs.cgiParams.favouritesbasket == "on") {
     63                    favouritesCheckout(); // called to add back in favourites icons (if favouritesbasket active)
     64            }
    6065        });
    6166}
Note: See TracChangeset for help on using the changeset viewer.