IntranetUserJS/mellansjo

Från Svenska kohanätverkets wiki
Hoppa till navigering Hoppa till sök

Väntfunktionen VIKTIGT

Lägg denna högst upp i intranetuserjs under $(document).ready(function() {, Viktig funktion för att scripten ska fungera.

// Vänt-funktion
var waitForEl = function(selector, callback) {
  if (jQuery(selector).length) {
    callback();
  } else {
    setTimeout(function() {
      waitForEl(selector, callback);
    }, 100);
  }
};

Periodika / Ta emot

Lättare att se hembibliotekets prenumeration genom att markera den grön och förstora rutan vid sökning. ver 1 2019-03-22 Periodika.png

if ($('#ser_serials-home').length) {
  waitForEl('.dataTables_wrapper', function() {
    var logbib = localStorage.getItem('loggedinbranch');
    $('.dataTables_wrapper td:nth-child(5)').each(function() {
      if ($(this).text().indexOf(logbib) > -1) {
        $(this).closest('tr').children().css('background-color','#d4efb7');
        $(this).closest('tr').children().css('padding','30px 4px');
      };
    });
  });
};

Katalog / Sökning

Skapar språkfält vid enkel sökning i katalogen. Språk hämtas från 008 och 040 fler språk går att lägga till.

Sprakfalt.png

if ($('#header_search').length) {

  $('<select id="language-limit" name="limit" style="margin-left:3px;"><option value="">Alla språk</option><option value="ln,rtrn:alb">Albanska</option><option value="ln,rtrn:ara">Arabiska</option><option value="ln,rtrn:bos">Bosniska</option><option value="ln,rtrn:dan">Danska</option><option value="ln,rtrn:eng">Engelska</option><option value="ln,rtrn:fin">Finska</option><option value="ln,rtrn:fre">Franska</option><option value="ln,rtrn:heb">Hebreiska</option><option value="ln,rtrn:ita">Italienska</option><option value="ln,rtrn:hrv">Kroatiska</option><option value="ln,rtrn:chi">Kinesiska</option><option value="ln,rtrn:nob">Norskt bokmål</option><option value="ln,rtrn:nno">Nynorsk</option><option value="ln,rtrn:per">Persiska</option><option value="ln,rtrn:pol">Polska</option><option value="ln,rtrn:prs">Dari</option><option value="ln,rtrn:por">Portugisiska</option><option value="ln,rtrn:rum">Romani</option><option value="ln,rtrn:rus">Ryska</option><option value="ln,rtrn:srp">Serbiska</option><option value="ln,rtrn:slo">Slovakiska</option><option value="ln,rtrn:slv">Slovenska</option><option value="ln,rtrn:som">Somaliska</option><option value="ln,rtrn:spa">Spanska</option><option value="ln,rtrn:swe">Svenska</option><option value="ln,rtrn:tha">Thailändska</option><option value="ln,rtrn:tgl">Tagalog </option><option value="ln,rtrn:tir">Tigriska</option><option value="ln,rtrn:tur">Turkiska</option><option value="ln,rtrn:ger">Tyska</option><option value="ln,rtrn:urd">Urdu</option></select>').insertAfter('#header_search #search-form');

};


Cirkulation / Återlämning

Meddelande om återlämnad Magasin-bok.

Magasinsmeddelande.png

if ($('#circ_returns').length) {

  if ($('#checkedintable tbody tr:first .ci-type').text().indexOf('Magasin') > -1) {
    $('#bd .yui-g:first').append('<div class="dialog message"><h3 class="problem" style="margin:25px;color:#990000">Detta exemplar tillhör Magasin</hr></div>');
  };
};


Cirkulation / Omlån

Skapar en egen låna om-knapp för varje utlånat exemplar.

Omlanknapp.PNG

// IntranetUserJS

if ($('#circ_circulation').length) {

  waitForEl('.renew', function() {
    $('.renew:visible').each(function() {
      var itemId = $(this).attr('value');
      $(this).parent().parent().append('<button class="btn btn-default btn-xs renewlink" value="' + itemId + '">Låna om</a>');
    });
    $('.renewlink').on('click', function(event) {
      event.preventDefault();
      var id = $(this).attr('value');
      console.log('Button pressed! - ' + id);
      $(".renew:visible").prop("checked", false);
      $(this).siblings().find('.renew').prop('checked', true);
      $('#RenewCheckinChecked').trigger('click');
      $(".renew:visible").prop("checked", true);
    });

    $('.renewals-disabled:visible').each(function() {
       $(this).parent().append('<i class="fa fa-frown-o" style="float:right;font-size:x-large;color:#d0d0d0;"></i>');
    });

  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

/* Lånaom-knapp */
.renewlink {
  font-size: smaller !important;
}

.renewals-disabled {
  color: #c00;
}

Katalog / Reservationer

Hämta mer information om reservationer på detaljsidan.

Reservationsinfo.PNG

// IntranetUserJS

if ($('#catalog_detail').length) {
  var bibnr = $('input[name="bib"]').attr('value');
  if ($('.number_box').length) {
    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=463&sql_params=' + bibnr, "json").done(function(data) {

      function countResStat(type) { 
        val = 0;
        for (i = 0;i < data.length;i++) {
          if (data[i][2] === type) {
            val = val + 1;
          };
        };
        return val;
      };
       
      var res = data[data.length - 1][3];
      var trans = countResStat('T');
      var waiting = countResStat('W');

      if (res > 0) {
        $('.number_box').parent().append('<span class="resDetail">Antal i kö: ' + res + '</span>');
      };
      if (trans > 0) {
        $('.number_box').parent().append('<span class="resDetail">På väg: ' + trans + '</span>');
      };
      if (waiting > 0) {
        $('.number_box').parent().append('<span class="resDetail">Aviserade: ' + waiting + '</span>');
      };
    });
  };
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

//IntranetUserCSS

.resDetail { /* Detaljsidan: Reservationsdetaljer avstånd */
  padding: 10px;
  color: #900;
}

.resExtra {
  padding: 20px !important;
  font-size: large;  
}

Katalog / Shelving location

Lägg till en pil och ändra färg på shelving locations på detaljsidan.

Shelvinglocationpil.PNG

// IntranetUserJS

if ($('#bibliodetails').length) {
  $('.shelvingloc').each(function() {
    if ($(this).text().length) {
      var loc = $(this).text();
      $(this).html('<span class="pil">↳ </span>' + loc);
    };
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.shelvingloc {
  color: olive;
}

.pil { /* Pil framför Lokal placering under Hembibliotek */
  font-style: normal; /* Normal font */
  color: #900; /* Färg (rödaktig) */
  font-size: large; /* Större text */
}

Katalog / postsammanslagning

Skapar en sammanslagningsknapp på resultatsidan för enklare hantering av dublettposter.

Sammanslagning.PNG

// IntranetUserJS

if ($('#catalog_results').length) {

  $('#selection_ops').append('<div class="btn-group"><button id="mergeposts" class="btn btn-default btn-xs" type="submit"><i class="fa fa-compress"></i> Slå samman</button></div>');

  $('#mergeposts').on('click', function() {

    var selIDs = [];
    var link = 'https://' + window.location.hostname + '/cgi-bin/koha/cataloguing/merge.pl?';

    $('.selection').each(function() {
      if ($(this).is(':checked')) {
        selIDs.push($(this).attr('value'));
      };
    });

    for (i = 0; i < selIDs.length; i++) {
      link = link + 'biblionumber=' + selIDs[i] + '&';
    }

    link = link.substring(0, link.length -1);

    if (selIDs.length > 1) {
      window.open(link);
    } else {
      alert('Välj vilka poster du vill slå samman först...');
    };
  });
};


Katalog / Knappar

Skapar knappar för Kopiera streckkod, Återlämna exemplar och Radera exemplar bredvid streckkoden i katalogen.

Knapparstreckkod.PNG

// IntranetUserJS

if ($('#catalog_detail').length) {

  $('#holdings_table tbody tr td:nth-child(9), #otherholdings_table tbody tr td:nth-child(9)').each(function() {

  $(this).append('<br /><a href="#" class="btn btn-default btn-xs bcopy" data-toggle="tooltip" title="Kopiera"><i class="fa fa-copy"></i></a><a href="#" class="btn btn-default btn-xs breturn" data-toggle="tooltip" title="Återlämna"><i class="fa fa-sign-in"></i></a><a href="#" class="btn btn-default btn-xs btrash" data-toggle="tooltip" title="Radera"><i class="fa fa-trash"></i></a>');

  });

// Kopiera

  $('.bcopy').on('click', function(event) {
    event.preventDefault();

    $('a').removeClass('bcSel');
    $(this).siblings('a:first').addClass('bcSel');

    var bcLink = document.querySelector('.bcSel');
    var range = document.createRange();
    range.selectNode(bcLink);
    window.getSelection().addRange(range);

    try {
      document.execCommand('copy');
    } catch(e) {
      alert(e);
    };

    window.getSelection().removeAllRanges();
  });

// Återlämna

  $('.breturn').on('click', function(event) {
    event.preventDefault();
    var bc = $(this).siblings('a:first').text();
     if(confirm("Är du säker på att du vill återlämna detta exemplaret? \n\r\n\r" + bc)){
      window.location.href = 'https://' + window.location.hostname + '/cgi-bin/koha/circ/returns.pl?barcode=' + bc;
    };
  });

// Radera

  $('.btrash').on('click', function(event) {
    event.preventDefault();
    var bc = $(this).siblings('a:first').text();
    var itemnr = $(this).siblings('a:first').attr('href');
    itemnr = itemnr.slice(itemnr.indexOf('itemnumber=') + 11, itemnr.indexOf('&biblionumber'));
    var bibnr = $('.yui-b #menu li:first a').attr('href');
    bibnr = bibnr.slice(bibnr.indexOf('biblionumber') + 13);
    var link = 'https://' + window.location.hostname + '/cgi-bin/koha/tools/batchMod.pl?op=show&del=1&itemnumber=' + itemnr + '&src=%2Fcgi-bin%2Fkoha%2Fcatalogue%2Fdetail.pl%3Fbiblionumber%3D' + bibnr;

    if (confirm("Är du säker på att du vill radera detta exemplaret? \n\r\n\r" + bc)) {
      window.location.href = link;
    };
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.bcSel {
  background-color: gold;
}

.bcopy, .breturn, .btrash {
  min-width: 22px;
  margin: 5px 7px 2px 0;
}

Cirkulation / Knappar

Skapar knappar för Kopiera streckkod och Återlämna bredvid streckkod på utlåningssidan.

Knapparutlaning.PNG

// IntranetUserJS

if ($('#circ_circulation').length | $('#pat_moremember').length) {

  waitForEl('#issues-table tbody tr td:nth-child(2)', function() {

    $('#issues-table tbody tr td:nth-child(2)').each(function() {
      $(this).append('</br><a href="#" class="btn btn-default btn-xs bcopy" data-toggle="tooltip" title="Kopiera"><i class="fa fa-copy"></i><a href="#" class="btn btn-default btn-xs breturn" data-toggle="tooltip" title="Återlämna"><i class="fa fa-sign-in"></i></a>');
    });

// Kopiera

    $('.bcopy').on('click', function(event) {
      event.preventDefault();

      var isSupported = document.queryCommandSupported('copy');
      console.log('Går kopiera? = ' + isSupported);

      $('td a').removeClass('bcSel');
      $(this).siblings('a:first').addClass('bcSel');

      var bcLink = document.querySelector('.bcSel');
      var range = document.createRange();
      range.selectNode(bcLink);
      window.getSelection().addRange(range);

      try {
        document.execCommand('copy');
      } catch(e) {
        alert(e);
      };

      window.getSelection().removeAllRanges();

    });

// Återlämna
  
    $('.breturn').on('click', function(event) {
      event.preventDefault();
      var bc = $(this).siblings('a:first').text();

      if(confirm("Är du säker på att du vill återlämna detta exemplaret? \n\r\n\r" + bc)){
        window.location.href = 'https://' + window.location.hostname + '/cgi-bin/koha/circ/returns.pl?barcode=' + bc;
      };

    });
  });
};

OBS. Detta stycke här under måste även läggas till i "IntranetUserCSS"

// IntranetUserCSS

.bcSel {
  background-color: gold;
}

.bcopy, .breturn, .btrash {
  min-width: 22px;
  margin: 5px 7px 2px 0;
}

Katalog / Visning

Visa antal exemplar på flikarna för både egna och andra bibliotek.

Flikexemplar.PNG


$('#holdings').each(function() {

  var nrex = $('#holdings tbody tr').length;
  var nroex = $('#otherholdings tbody tr').length;  

  $('a[href="#holdings"]').append('<span> (' + nrex + ')</span>');

  $('a[href="#otherholdings"]').append('<span> (' + nroex + ')</span>');
  
});



Katalog / Barnmedia

Ändrar automatiskt till itemtype "BARNBOK" om man skriver in Hcf, Hcg eller något med litet u i Full call number vid exemplarinläggning eller redigering.


$('#subfield952o input:first').change(function() {

  if ($(this).val().indexOf('Hcf') > -1 | $(this).val().indexOf('Hcg') > -1 | ($(this).val().startsWith('u',0) && $(this).val().charAt(1) === $(this).val().charAt(1).toUpperCase()) | $(this).val().indexOf(',u') > -1 ) {

    $('select[id^="tag_952_subfield_y"]').select2('val','BARNBOK');

  };

});

Katalog / Exemplar

Döljer onödiga fält vid exemplarredigering/registrering.

Doldafalt.PNG


if ($('#cat_additem').length) {

  var hiddenArr = ['1','3','5','6','f','j','t','u','w'];

  for (i = 0; i < hiddenArr.length; i++) {

    $('.subfield_line label').each(function() {
      if ($(this).text().charAt(0) == hiddenArr[i]) {
        $(this).closest('li').hide();
      };
    });
  };
};


Låntagare / Registrering

Tvingar stor bokstav i början på alla namn och adresser på låntagaranmälan och redigering.


jQuery.fn.capitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var stringStart = box.selectionStart;
        var stringEnd = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
            return $word.toUpperCase();
        }));
        box.setSelectionRange(stringStart , stringEnd);
    });

   return this;
}


jQuery.fn.capitalizefw = function() {
    $(this).keyup(function(event) {
            var textBox = event.target;
            var start = textBox.selectionStart;
            var end = textBox.selectionEnd;
            textBox.value = textBox.value.charAt(0).toUpperCase() + textBox.value.slice(1);
            textBox.setSelectionRange(start, end);
    });

   return this;
}


$('#surname, #firstname, #city, #country, #B_city, #B_country').addClass('capitalizer');
$('#address, #address2, #B_address, #B_address2').addClass('capitalizerfw');


$('.capitalizer').on('input', function() {
  $(this).capitalize();
});

$('.capitalizerfw').on('input', function() {
  $(this).capitalizefw();
});

Endast småbokstäver i e-postfält.


jQuery.fn.decapitalize = function() {
    $(this[0]).keyup(function(event) {
        var box = event.target;
        var txt = $(this).val();
        var stringStart = box.selectionStart;
        var stringEnd = box.selectionEnd;
        $(this).val(txt.replace(/^(.)|(\s|\-)(.)/g, function($word) {
            return $word.toLowerCase();
        }));
        box.setSelectionRange(stringStart , stringEnd);
    });

   return this;
}

$('#email').addClass('decapitalizer');

$('.decapitalizer').on('input', function() {
  $(this).decapitalize();
});


Cirkulation / Utlåning och detaljer för låntagare

Meddelanden på låntagarsidan går nu redigera så man slipper skriva en nya varje gång.

Meddelande.png


$('<a class="editmsg btn btn-link btn-sm" href="#"><i class="fa fa-edit"></i>Ändra</a>').insertAfter('#messages .circ-hlt');

$('.editmsg').on('click', function() {

  var delmsglink = $(this).next().attr('href');
  var msg =  $(this).closest('li').find('span.circ-hlt i').text().slice(1,-1);
  localStorage.setItem('editmsg', msg);

  $('#addnewmessageLabel').trigger('click');

  $('#borrower_message').val(msg);

  $('.modal-footer button.btn.btn-default.approve').on('click', function (event) {
    event.preventDefault();
    $.get('https://' + window.location.hostname + delmsglink).done(function(datan) {
      $('form#message_form').trigger('submit');
    });
  });

  $('.modal-footer button.btn.btn-default.deny.cancel').on('click', function () {
    $('#borrower_message').val(msg);
  });
});



Exemplar / Streckkoder

Markera innehållet i Streckkodsrutan när man klickar i rutan, förenklar så man kan dra streckkoden direkt när man ställer sig i rutan.

Streckkodsrutan.PNG


$('input[id^="tag_952_subfield_p"]').each(function() {
  $(this).addClass('bcselect');
});

$('.bcselect').on('focus', function(){
  $(this).select(); 
});

$('input[id^="tag_952_subfield_p"]').on('click', function() {
  if (!$('input[id^="tag_952_subfield_p"]').val() > -1) {
    $(this).select();
  };
});


Cirkulation / Reservationer

Visar antal reservationer i kö vid utlån.

Antalreservationervidutlan.PNG


$('#circ_needsconfirmation').each(function() { 
  var barcode = sessionStorage.getItem('lastbarcode');

  if ($('#circ_needsconfirmation ul li').text().indexOf('Efterfrågat') > -1 | $('#circ_needsconfirmation ul li').text().indexOf('High demand') > -1) {

    $('#circ_needsconfirmation ul').append('<li>Antal reservationer i kö:\t <span id="antal"><i>Hämtar...</i></span></li>');

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=454&sql_params=' + barcode, "json").done(function(data) {

      var res = data[data.length - 1][4];
      var link = '/cgi-bin/koha/reserve/request.pl?biblionumber=' + data[0][5];

      $('#antal').html('<b>' + res + '</b><a href="https://' + window.location.hostname + link +'" target="_blank"> (Öppna kön i ny flik)</a>');

    });  
  };
});



Cirkulation / Sparade lån

SPARADE LÅN - Varning med datum, Vid försök av lån tidigare lånad bok så anges nu senast lånat datum i bekräftelserutan, även om annan streckkod av samma titel försöker lånas.

Sparadelandatum.PNG


$('form#mainform').on('submit', function(event) {  // Spara senast dragna streckkod vid utlån i webbläsaren
  sessionStorage.setItem('lastbarcode',$('#barcode').val());
});

$('#circ_needsconfirmation').each(function() {  // Bekräfta lån-rutan
  var link = $.cookie('patronlink');
  var barcode = sessionStorage.getItem('lastbarcode');
 
  if (link.indexOf("findborrower") > -1) {
    var type = "cardnumber=";
  }
  else {
    var type = "borrowernumber=";
  };

  link = link.slice(link.indexOf('=')+1);

  if ($('#circ_needsconfirmation ul li').text().indexOf('previously ') > -1 | $('#circ_needsconfirmation ul li').text().indexOf('tidigare') > -1) {

    $('#circ_needsconfirmation ul').append('<h4 id="lastdateloading">Hämtar information... vänta</h4>');

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/svc/report?id=450&sql_params=' + link + '&sql_params=' + barcode, "json").done(function(data) {

      var lastdate = data[0][5];

      if (lastdate == null) {
        lastdate = 0;
      };

      $('#circ_needsconfirmation #lastdateloading').remove();
      if (lastdate == 0) {
        $('#circ_needsconfirmation ul').append('<li id="lastdate">Senast lånad:\t <b>Okänt</b> <i>(före övergång till koha)</i></li>');
        sessionStorage.removeItem('lastbarcode');
      }
      else {
        $('#circ_needsconfirmation ul').append('<li id="lastdate">Senast lånad:\t <b>' + lastdate + '</b></li>');
        sessionStorage.removeItem('lastbarcode');
      };
    
    });
  };
});


Exemplar / Skolbibliotek

Vid redigering/registrering av exemplar så sparas exemplaret automatisk ifall man drar streckkoden, man behöver alltså inte klicka på knappen "Spara" vid redigering av exemplar.


$('#cataloguing_additem_newitem #f').has('#edititem').each(function() {

  $('#subfield952p input').keypress(function(event) {
    var keycode = event.keyCode || event.which;
    if(keycode == '13') {
      if ($(this).val()) {
        $('input[onclick="return Check(this.form)"]').trigger('click'); 
      }
    }
  });
});

Låntagare / Personnummer

Personnummerfältet låst till endast 10 siffror och flytta fältet till ovan födelsedatum samt autofyll födelsedagsdatum. Känner av att det är ett giltigt personnr annars rensar den fältet och ger ett meddelande. Kontrollerar även nu också att inte personnumret finns registrerat i katalogen.


var validatePersonalNumber = function(input) {  // Valideringsscript för svenskt personnummer
  // Kontrollera godkänd längd och form
  if (!input) return false;

  if (input.indexOf('-') == -1) {
    if (input.length === 10) {
      input = input.slice(0, 6) + "-" + input.slice(6);
    } else {
      input = input.slice(0, 8) + "-" + input.slice(8);
    }
  }
  if (!input.match(/^(\d{2})(\d{2})(\d{2})\-(\d{4})|(\d{4})(\d{2})(\d{2})\-(\d{4})$/)) return false;

  // Snygga till input
  input = input.replace('-', '');
  if (input.length == 12) {
    input = input.substring(2);
  }

  // Deklarera variabler
  var d = new Date(((!!RegExp.$1) ? RegExp.$1 : RegExp.$5), (((!!RegExp.$2) ? RegExp.$2 : RegExp.$6)-1), ((!!RegExp.$3) ? RegExp.$3 : RegExp.$7)),
    sum = 0,
    numdigits = input.length,
    parity = numdigits % 2,
    i,
    digit;

  // Kontrollera godkänt datum 
  if (Object.prototype.toString.call(d) !== "[object Date]" || isNaN(d.getTime())) return false;

  // Kontrollera luhn algoritmen
  for (i = 0; i < numdigits; i = i + 1) {
    digit = parseInt(input.charAt(i))
    if (i % 2 == parity) digit *= 2;
      if (digit > 9) digit -= 9;
        sum += digit;
  }
  return (sum % 10) == 0;
};


$('#patron_attr_3').attr('maxlength','10').attr('placeholder','10 siffror (ÅÅMMDDNNNN)').attr('style','width: 174px; height: 22px;'); // Ge fältet rätt attribut

$('#patron_attr_3').parent().insertBefore('li label[for="dateofbirth"]'); // Flyttar personnrfältet till innan födelsedagsdatumfältet

$('#patron_attr_3').change(function() {  // Känner av ändring i personnrfältet och uppdaterar födelsedagsdatumfältet och OPAC användarnamnet

  if (validatePersonalNumber($(this).val())) {
    var d = new Date(); // Kollar det aktuella datumet
    var year = d.getFullYear(); // Sorterar ut vilket år det är
    year = year.toString().slice(0,2); // Gör om till sträng och ta bara med de två första siffrorna, dvs 19 eller 20
    
    var patronyear = $(this).val().slice(0,2); // Kollar personnummrets två första siffror och sparar det till variable

    if (patronyear > year) { // Kontrollerar om personen är mer än hundra år, om inte gör detta följande
      $('input#dateofbirth').val('19' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
    }
    else {  // Personen är äntingen över hundra år (inte så troligt) så då förutsätter vi att personen är född på 2000-talet
      $('input#dateofbirth').val('20' + $(this).val().slice(0,2) + '-' + $(this).val().slice(2,4) + '-' + $(this).val().slice(4,6));
    };
  
    $('input#userid').val($(this).val());  // Kopierar även personnr till OPAC Användarnamnet

    chkpnr = $(this).val();

    $.get('https://' + window.location.hostname + '/cgi-bin/koha/circ/circulation.pl?findborrower=' + chkpnr).done(function(datan) {

      var contents = datan.slice(datan.indexOf('<title>')+7, datan.indexOf('</title>'));

      if (contents.indexOf('Låna ut') > -1 | contents.indexOf('Checking') > -1) {

        alert('Personnumret finns redan registrerat!');
        $('#patron_attr_3').css('background','red').focus().select();
    
      } else {
   
        $('#patron_attr_3').css('background','#d4efb7');
      };
    });

  }
  else {
    $('textarea[id="patron_attr_3"]').val(null);  // Rensa fältet
    alert("Personnummret är felaktigt, var god ändra.");  // Varna för fel personnr
    setTimeout(function(){$('textarea[id="patron_attr_3"]').focus();}, 1); // Ställ markören i fältet igen
  };
});


Låntagare / Smsnummer

Lägger automatiskt in samma nummer som fylls i fältet Annan telefon(other phone) till SMSnummer.


$('input#mobile').change(function() {
    $('input#SMSnumber').val($(this).val());
});


Låntagare / Nummerfält

Tillåt endast siffror i telefonnummer och personnummer.


$("input#mobile , #patron_attr_3").keydown(function (e) {
  var isModifierkeyPressed = (e.metaKey || e.ctrlKey || e.shiftKey);
  var isCursorMoveOrDeleteAction = ([46,8,9,35,36,37,38,39,40].indexOf(e.keyCode) != -1);
  var isNumKeyPressed = (e.keyCode >= 48 && e.keyCode <= 58) || (e.keyCode >=96 && e.keyCode <= 105);
  var vKey = 86, cKey = 67,aKey = 65, xKey = 88;
  switch(true){
    case isCursorMoveOrDeleteAction:
    case isModifierkeyPressed == false && isNumKeyPressed:
    case (e.metaKey || e.ctrlKey) && ([vKey,cKey,aKey,xKey].indexOf(e.keyCode) != -1):
    break;
    default:
    e.preventDefault();
  }
});


Exemplar / Skolbibliotek

Skapar knappen ”lägg till och duplicera för enklare registrering av flera exemplar av samma bok utan extra knapptryck, ställer sig i streckkodsfältet när en bok är färdig. Behöver endast dra streckkod på exemplaren efter det så sparas exemplaren automatiskt. Markering av senast inlagt exemplar i listan med grönt.

Duplicera.PNG


$('input[name="add_duplicate_submit"]').on('click', function(event) {
  localStorage.setItem('lastbarcode',$('#subfield952p input').val());
  localStorage.setItem('addmulti','yes');
});

$('body#cat_additem').each(function() {
if (localStorage.getItem('addmulti')) {
  $('#subfield952p input:eq(0)').focus().select();
  $('#subfield952p input:eq(0)').css('background-color','#d4efb7');
  $('#subfield952p input:eq(0)').attr('placeholder','Fortsätt dra nästa exemplar...');
  $('#subfield952p input').keypress(function(event) {
    var keycode = event.keyCode || event.which;
    if(keycode == '13') {
      if ($(this).val()) {
        localStorage.setItem('lastbarcode',$(this).val());
        $('input[name="add_duplicate_submit"]').trigger('click'); 
      }
    }
  });
};
});

$('#itemst td').text(function () {
  var lastbarcode = localStorage.getItem('lastbarcode');
  if ($(this).text() == lastbarcode) {
    $(this).closest('tr').children().css('background-color','#d4efb7');
    localStorage.removeItem('lastbarcode');
  }
});


Startsidan

Gömmer redigeringsknapparna för nyheterna.


$("p.newsfooter a").hide(); 

$("p.newsfooter").each(function() {
  var text = $(this).html().replace(/\|/g, ' ');
  $(this).html(text); 
});


Katalog / Sökning

När sökning sker i fel fält, t.ex Katalogsökning i ”låna ut”. Trycker man enter(eller knappen) så görs automatiskt samma sökning i katalogen istället.

Felsökning.PNG


$('body#circ_circulation #doc3 #bd #yui-main .yui-b h4').each(function() {
  if ($(this).text().indexOf('Ingen låntagare hittad') >= 0) {
    $('<br /><h2>Sökte du på fel ställe kanske? Ingen fara!</h2> <br /><span>Prova sökknappen eller tryck ENTER igen.<br /><br /></span><button id="searchcat" class="btn btn-success btn-sm">Sök i katalogen</button>').insertAfter(this);
  };
});

$('#patronsearch').bind('submit',function(event) {
   if ($('#findborrower').val() == '') {
      event.preventDefault();
      $('#searchcat').trigger('click'); 
   }
});

$('#searchcat').on('click', function(event){
  var string = $('body#circ_circulation #doc3 #bd #yui-main .yui-b h4 span').text();
  var location = window.location.hostname;
  localStorage.setItem('lastsearch', string.slice(1,-1));
  window.location.assign("https://" + location + "/cgi-bin/koha/catalogue/search.pl?idx=kw&q=" + string);
});

$('body#catalog_results #search-form').attr('value', localStorage.getItem('lastsearch')).select();

$('#main_intranet-main').ready(function () {
    localStorage.removeItem('lastsearch');
});

$('#cat-search-block').bind('submit',function(event) {
  var string = $('#search-form').attr('value');
  localStorage.setItem('lastsearch', string);
});


Katalog / Resultat

Klickbara hyllsignaturer.


$('td.itemcallnumber').each(function() {
  var itemcallnr = $(this).text().slice(1);
  var location = window.location.hostname;
  $(this).html('<a href="https://'+location+'/cgi-bin/koha/catalogue/search.pl?idx=callnum&q='+itemcallnr+'">'+itemcallnr+'</a>');
});


Katalog / Klassifikation

Gör klassifikationer i katalogposten klickbara.


$(".results_summary.oc").each(function() {
  var oc = $(this).text();
  var newtext = oc.slice(0,oc.indexOf(':')+2);
  $(this).text(newtext);
  oc = oc.slice(oc.indexOf(':')+2);
  ocarr = oc.trim().split(' | ');
  for (i = 0 ; i < ocarr.length ; i++) {
    $(this).append('<a href="https://' + window.location.hostname + '/cgi-bin/koha/catalogue/search.pl?idx=kw&q=lcn%3A' + ocarr[i] + '">' + ocarr[i] + '</a>');
    if (i < (ocarr.length -1)) {
      $(this).append(' | ');
    }
  };
});


Katalog / Informationslänkar

Gör ISBN i katalogposten klickbara för att komma till Adlibris, Btj, Legimus och LIBRIS, samt förhandsvisning av post hos Adlibris när man har muspekaren över Adlibris-länken.

Adlibrisbtjlegimus.PNG


$(".results_summary.isbn").each(function() {
  var isbn = $(this).text().slice(6,-1);
  isbn = isbn.replace('-', '');
  if (isbn.indexOf(';') > -1) {
    isbn = isbn.replace(';', ' ').replace(/\s+/g,' ').trim();
    isbnarr = isbn.split(' ');
    isbn = isbnarr[0].toString();   
  };
  isbn = isbn.replace(/\D/g,'');
  $(this).append('<span class="isbncont"></span>')

// Adlibris
  $('.isbncont' ,this).append('<span class="label"> Öppna i: </span><a href="https://www.adlibris.com/se/organisationer/product.aspx?isbn=' + isbn + '" target="_blank" class="pvframelink">Adlibris</a> | ');
// Btj
  $('.isbncont' ,this).append('<a href="http://butik.btj.se/default.aspx?search=' + isbn + '" target="_blank">Btj</a> | ');
// Legimus
  $('.isbncont' ,this).append('<a href="http://www.legimus.se/search?isbn=' + isbn + '" target="_blank">Legimus</a> | ');
// Libris
  $('.isbncont' ,this).append('<a href="http://libris.kb.se/hitlist?d=libris&q=numm%3a' + isbn + '&f=ext&spell=true&hist=true&p=1" target="_blank">Libris</a>');

});

$('.pvframelink').on('mouseover', function() {
  isbn = $(this).attr('href');
  isbn = isbn.slice(isbn.indexOf('=')+1);

  $('<div class="previewbox"><iframe class="pvframe" src="https://www.adlibris.com/se/organisationer/product.aspx?isbn=' + isbn + '#ctl00_content" width="720px" height="700px"></iframe></div>').insertAfter(this);

});

$('.pvframelink').on('mouseout', function() {
  $('.previewbox').remove();
});


Låntagare / Sökning

Spara senaste låntagare som lånat eller återlämnat med hjälp av cookies, spara även de 15 senaste med timestamp när.

Senastelantagare.PNG


var midnight = new Date();
midnight.setHours(23,59,59,0);


$('#checkedintable tr:nth-child(1) td.ci-patron a:first, #hold-request-form a:first').each(function(){  // Senaste låntagaren som återlämnat eller reserverat
  var checkedinpatron = $(this).attr('href');
  var name = $(this).text();  
  if (name.indexOf(',') > -1) {
    var surname = name.slice(name.indexOf(',')+2, name.indexOf('('));
    var lastname = name.slice(2, name.indexOf(','));
    var patronname = surname.concat(lastname);

    document.cookie = "lastpatron=" + patronname + " [ Återlämnat ]; expires=" + midnight + "; path=/ " ; 

  }
  else {
    var patronname = $(this).text();
    document.cookie = "lastpatron=" + patronname + "; expires=" + midnight + "; path=/ " ; 
  };

  var patronlink = checkedinpatron.slice(checkedinpatron.indexOf('?')+1);
  document.cookie = "patronlink=" + patronlink + "; expires=" + midnight + "; path=/ " ; 

  savePatron();

});


$('div.patroninfo h5').each(function(){  // Spara senaste låntagaren som laddats
  var name = $(this).text().replace(/\s+/g, " ");
  var borrowernumber = $('.patronborrowernumber').text();
  borrowernumber = borrowernumber.slice(16);
  var patronlink = 'borrowernumber=' + borrowernumber;  

  document.cookie = "lastpatron=" + name + "; expires=" + midnight + "; path=/ " ; 
  document.cookie = "patronlink=" + patronlink + "; expires=" + midnight + "; path=/ " ; 

  savePatron();

});


function savePatron() {  // Spara ner låntagare i listan ifall hen inte finns med förut

  var d = new Date();
  time = d.toTimeString();
  time = time.split(' ')[0];

  document.cookie = "timestamp=" + time + "; expires=" + midnight + "; path=/ " ; 

  var name = $.cookie('lastpatron');
  var link = $.cookie('patronlink');
  var time = $.cookie('timestamp');

  if ($.cookie('lastpatrons')) {
    
    var theString = $.cookie('lastpatrons');
    var lastpatrons = theString.split(",");
    var theString2 = $.cookie('patronlinks');
    var patronlinks = theString2.split(",");
    var theString3 = $.cookie('timestamps');
    var timestamps = theString3.split(",");

    if (patronlinks.indexOf(link) > -1) {  

      var indexnr = $.inArray(link, patronlinks);
      patronlinks.splice(indexnr, 1);
      lastpatrons.splice(indexnr, 1);
      timestamps.splice(indexnr, 1);
    };
  }
  else {
    var lastpatrons = [];
    var patronlinks = [];
    var timestamps = [];
  };

  lastpatrons.unshift(name);
  patronlinks.unshift(link);
  timestamps.unshift(time);

  if (lastpatrons.length > 15) {
    lastpatrons.pop();
    patronlinks.pop();
    timestamps.pop();
  };

  document.cookie = "lastpatrons=" + lastpatrons + "; expires=" + midnight + "; path=/ "; 
  document.cookie = "patronlinks=" + patronlinks + "; expires=" + midnight + "; path=/ " ; 
  document.cookie = "timestamps=" + timestamps + "; expires=" + midnight + "; path=/ " ; 

};


if ($.cookie('lastpatron')) { // Visa knappen ifall det finns en sparad låntagare
  var lpatron = $.cookie('lastpatron');
  $('<span> </span><button id="lastpatron">Senaste låntagare</button>').insertAfter('input[id="autocsubmit"]');
  $('<a href="#" id="clearlpatron"> Rensa</a>').insertAfter('#lastpatron');
};

$("<a href='#' id='patronspan'> "+lpatron+"</a>").insertBefore('#clearlpatron').hide();  

$('#lastpatron').mouseover(function(event){
  event.preventDefault();
  $("#clearlpatron").hide();  
  $("#patronspan").show();
});

$('#lastpatron').mouseout(function(event){
  event.preventDefault();
  $("#clearlpatron").show();  
  $("#patronspan").hide();
});

$('#lastpatron').on('click', function(event){ // Öppna senaste låntagare
  if ($.cookie('lastpatron')) {
    event.preventDefault();
    var patronlink = $.cookie('patronlink');
    var location = window.location.hostname;
    window.location.assign("https://" + location + "/cgi-bin/koha/circ/circulation.pl?" + patronlink);
  };
});

$('#clearlpatron').on('click', function(event){ // Rensa senaste låntagare

  $.removeCookie('patronlink', { path: '/' });
  $.removeCookie('lastpatron', { path: '/' });
  $.removeCookie('lastpatrons', { path: '/' });
  $.removeCookie('patronlinks', { path: '/' });
  $.removeCookie('timestamp', { path: '/' });
  $.removeCookie('timestamps', { path: '/' });

  $('#lastpatron').hide();
  $('#clearlpatron').hide();
  $('#lastpatrons').hide();  
});


// Knapp för att visa flera av senaste låntagare

$('<span> </span><div class="btn-group" style="vertical-align:unset;"><button id="lastpatrons" class="dropdown-toggle" data-toggle="dropdown">Fler<span class="caret"></span></button><ul id="patron-dropdown" class="dropdown-menu"></ul></div>').insertAfter('#lastpatron');


$('#lastpatrons').on('click', function(event){ // Öppna listan med senaste låntagare

  var lp = $.cookie('lastpatrons');
  var names = lp.split(",");
  var pl = $.cookie('patronlinks');
  var links = pl.split(",");
  var ts = $.cookie('timestamps');
  var times = ts.split(",");
  var list = $("#patron-dropdown");
  var parent = list.parent();
  var location = window.location.hostname;

  list.detach().empty().each(function(i){
    for (var x = 0; x < names.length; x++){
      $(this).append('<li><a href="https://' + location + '/cgi-bin/koha/circ/circulation.pl?' + links[x] + '"><span class="timestamps">' + times[x].slice(0,5) + ' </span>' + names[x] + '</a></li>');
      if (x == names.length - 1){
        $(this).appendTo(parent);
      }
    }
  });
});


Cirkulation / Reservation

Snabbaccess till senaste låntagare vid reservation.

Senastelantagarereservation.PNG


if ($.cookie('lastpatron')) {
  var name = $.cookie('lastpatron');
  var link = $('#holds_patronsearch').attr('action');
  var location = window.location.hostname;
  var patronlink = $.cookie('patronlink');
  $('<br /><br /><span>eller reservera för senaste låntagaren: </span><a href="https://' + location + '/cgi-bin/koha/reserve/' + link + '&' + patronlink +'" id="hold">' + name + '</a>').insertAfter('#holds_patronsearch input[type="submit"]');

  $('<span> </span><div class="btn-group" style="vertical-align:unset;"><button id="lastpatrons_res" class="dropdown-toggle" data-toggle="dropdown">Fler<span class="caret"></span></button><ul id="patron-dropdown2" class="dropdown-menu"></ul></div>').insertAfter('#hold');

  $('#lastpatrons_res').on('click', function(event){ // Öppna listan med senaste låntagare

    var reslp = $.cookie('lastpatrons');
    var resnames = reslp.split(",");
    var respl = $.cookie('patronlinks');
    var reslinks = respl.split(",");
    var rests = $.cookie('timestamps');
    var restimes = rests.split(",");
    var reslist = $("#patron-dropdown2");
    var resparent = reslist.parent();
    var location = window.location.hostname;
    var reslink = $('#holds_patronsearch').attr('action');

    reslist.detach().empty().each(function(i){
      for (var x = 0; x < resnames.length; x++){
        $(this).append('<li><a href="https://' + location + '/cgi-bin/koha/reserve/' + link + '&' + reslinks[x] +'" id="hold"><span class="timestamps">' + restimes[x].slice(0,5) + ' </span>' + resnames[x] + '</a></li>');
        if (x == resnames.length - 1){
          $(this).appendTo(resparent);
        }
      }
    });
  });
};


Cirkulation / Tidsstämpel

Ta bort tidsstämpeln på återlämnade böcker.


$("td.ci-duedate:contains('23:59')").each(function() {
  var text = $(this).html().replace('23:59', '');
  $(this).html(text); 
});


Cirkulation / Exemplar

Markerar raden med det aktuella exemplaret efter sökt streckkod.

Markerarad.PNG


$('#cat-search-block .submit').on('click', function(){  // Vanlig katalogsökning
  $('input[type="text"]').each(function(){    
    var id = $(this).attr('id');
    var value = $(this).val();
    localStorage.setItem(id, value);
  });   
});

$('form[action="search.pl"] .btn').on('click', function(){ // Avancerad sökning
  $('input[type="text"]').each(function(){    
    var value = $(this).val();
    if (value !== '') {
      localStorage.setItem('search-form', value);
    }
  });   
});

$('td a[href^="/cgi-bin/koha/catalogue/moredetail.pl"]').text(function () {
  var storedsearch = localStorage.getItem('search-form');
  if ($(this).text() == storedsearch) {
    $(this).closest('tr').children().css('background-color','#d4efb7');
    localStorage.removeItem('search-form');
  }
});


Exemplar / Nytt exemplar

Lägger in taggen #additema så fokus hamnar på exemplarinläggningen vid Nytt exemplar.


$('#cataloguing_additem_newitem #f').attr('action', '/cgi-bin/koha/cataloguing/additem.pl#additema');


Katalog / Resultat

Visa fler/färre på resultatsidan, Märker även tillgängligheten med grön/röd.

Visaflerfarre.PNG


if ($('.logged-in-branch-name:first()').text().length > 0) {
  var loggedinbranch = $('.logged-in-branch-name:first()').text();
  localStorage.setItem('loggedinbranch', loggedinbranch);
};

$('.availability').each(function() {
  var LiN = $(this).find('li').length;

  if( LiN > 0) {    
    $('li', this).hide().addClass('toggleable');
    $(this).append('<span class="more">Visa fler...</span>');    
  }
});

$('.availability li').each(function() {
  var loggedinbranch = $('.logged-in-branch-name:first()').text();
    if ($(this).text().indexOf(loggedinbranch) > -1 ) {

      $(this).removeClass('toggleable').show();

      if ($(this).parent().prev().hasClass('status') | $(this).parent().prev().hasClass('unavailable')) {
        $(this).css('background','#ffe7e7');
      } else {
        $(this).css('background','#d4efb7');
      };

// Karlsborg - Undenäs - Mölltorp

      if (loggedinbranch.indexOf('Karlsborg') > -1 | loggedinbranch.indexOf('Undenäs') > -1 | loggedinbranch.indexOf('Mölltorp') > -1 ) {
        $('.availability li').each(function() {
          if ($(this).text().indexOf('Karlsborg') > -1 | $(this).text().indexOf('Undenäs') > -1 | $(this).text().indexOf('Mölltorp') > -1 ) {
            $(this).removeClass('toggleable').show();

            if ($(this).parent().prev().hasClass('status') | $(this).parent().prev().hasClass('unavailable')) {
              $(this).css('background','#ffe7e7');
            } else {
              $(this).css('background','#d4efb7');
            };
          };
        });
      };

// Tidaholm - KVA

      if (loggedinbranch.indexOf('Tidaholm') > -1 ) {
        $('.availability li').each(function() {
          if ($(this).text().indexOf('Tidaholm') > -1 ) {
            $(this).removeClass('toggleable').show();

            if ($(this).parent().prev().hasClass('status') | $(this).parent().prev().hasClass('unavailable')) {
              $(this).css('background','#ffe7e7');
            } else {
              $(this).css('background','#d4efb7');
            };
          };
        });
      };



    };
});

$('.availability').on('click','.more', function() {
  if( $(this).hasClass('less') ) {    
    $(this).text('Visa fler...').removeClass('less');    
  }
  else {
    $(this).text('Visa färre...').addClass('less'); 
  }
  $(this).parent().children('ul').children('li.toggleable').slideToggle("fast");
}); 


Katalog / Sortering

Sortera biblioteken i träfflistan i alfabetisk ordning.


$(".availability ul").each(function() {
  $(this).html(
    $(this).children("li").sort(function (a, b) {
      return $(a).text().toUpperCase().localeCompare(
      $(b).text().toUpperCase());
    }) 
  );
});


Katalog / Tillgängligt

Markera "Tillgänglig" med grönt på detaljsidan.

Grontillganglig.PNG


$('#bibliodetails .status').each(function() {
  if ($(this).text().indexOf('Tillgänglig') > -1 | $(this).text().indexOf('Available') > -1 ) {
    $(this).css('color', 'green');
  };
});


Låntagare / Dölj fält

Göm Alternativ adress och Mer information som standard vid låntagaranmälan


$('#memberentry_address ol, #memberentry_patron_attributes ol').hide();

$('legend').click(function() {
  $(this).parent().find('ol').slideToggle("fast");
});


Övergripande / Genvägar

När man trycker på Pause-Break knappen laddas kohas startsida.


document.onkeydown=function keypress(e) {
  e=(e||window.event);  
    if (e.keyCode == 19) {
      try{e.preventDefault();}//Non-IE
      catch(x){e.returnValue=false;} //IE (verkade inte fungera!)
      window.location.href = "https://" + window.location.hostname;
    };
}


Översättningar / Svenska


$('a[href="#otherholdings"]').text(function () {
  return $(this).text().replace('Andra reservationer', 'Andra bibliotek');
});

$('label[for="mobile"]').text(function () {
  return $(this).text().replace('Annan telefon', 'Mobiltelefon');
});

$('#circmessages h3').html(function() {
  return $(this).html().replace('Till', 'Upplysningar');
});

$('#printquickslip').text(function () {
  return $(this).text().replace('Skriv ut snabbkvitto', 'Skriv ut endast nya lån');
});