Bug 26592: [20.05] Prevent XSS vulnerabilities when circ/ysearch.pl is used
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / includes / js_includes.inc
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE AudioAlerts %]
4 [% USE To %]
5 [%# Prevent XFS attacks -%]
6 [% UNLESS popup %]
7     <script>
8        if (self === top) {
9            var antiClickjack = document.getElementById("antiClickjack");
10            antiClickjack.parentNode.removeChild(antiClickjack);
11        } else {
12            top.location = self.location;
13        }
14     </script>
15 [% END %]
16
17 [% Asset.js("lib/jquery/jquery-2.2.3.min.js") | $raw %]
18 [% Asset.js("lib/jquery/jquery-migrate-1.3.0.min.js") | $raw %]
19 [% Asset.js("lib/jquery/jquery-ui-1.11.4.min.js") | $raw %]
20 [% Asset.js("lib/shortcut/shortcut.js") | $raw %]
21 [% Asset.js("lib/jquery/plugins/jquery.cookie.min.js") | $raw %]
22 [% Asset.js("lib/js-cookie/js.cookie-2.2.1.min.js") | $raw %]
23 [% Asset.js("lib/jquery/plugins/jquery.highlight-3.js") | $raw %]
24 [% Asset.js("lib/bootstrap/bootstrap.min.js") | $raw %]
25 [% Asset.js("lib/jquery/plugins/jquery.validate.min.js") | $raw %]
26 <!-- koha core js -->
27 [% Asset.js("js/staff-global.js") | $raw %]
28
29 [% INCLUDE 'validator-strings.inc' %]
30 [% IF ( IntranetUserJS ) %]
31     <!-- js_includes.inc: IntranetUserJS -->
32     <script>
33     [% IntranetUserJS | $raw %]
34     </script>
35     <!-- / js_includes.inc: IntranetUserJS -->
36 [% END %]
37
38 <!-- js_includes.inc -->
39 [% IF ( virtualshelves || intranetbookbag ) %]
40     <script>
41         // virtualshelves || intranetbookbag
42         var MSG_BASKET_EMPTY = _("Your cart is currently empty");
43         var MSG_RECORD_IN_BASKET = _("This item is already in your cart");
44         var MSG_RECORD_ADDED = _("This item has been added to your cart");
45         var MSG_NRECORDS_ADDED = _("%s item(s) added to your cart");
46         var MSG_NRECORDS_IN_BASKET = _("%s already in your cart");
47         var MSG_NO_RECORD_SELECTED = _("No item was selected");
48         var MSG_NO_RECORD_ADDED = _("No item was added to your cart (already in your cart)!");
49         var MSG_CONFIRM_DEL_BASKET = _("Are you sure you want to empty your cart?");
50         var MSG_CONFIRM_DEL_RECORDS = _("Are you sure you want to remove the selected items?");
51         var MSG_IN_YOUR_CART = _("Items in your cart: %s");
52         var MSG_ITEM_NOT_IN_CART = _("Add to cart");
53         var MSG_ITEM_IN_CART = _("In your cart");
54         var MSG_RECORD_REMOVED = _("The item has been removed from your cart");
55     </script>
56
57     [% Asset.js("js/basket.js") | $raw %]
58 [% END %]
59
60 [% IF LocalCoverImages %]
61     [% Asset.js("js/localcovers.js") | $raw %]
62     <script>
63         // LocalCoverImages
64         var NO_LOCAL_JACKET = _("No cover image available");
65     </script>
66 [% END %]
67
68 [% IF Koha.Preference('AudioAlerts') || AudioAlertsPage %]
69     <script>
70         // AudioAlerts
71         var AUDIO_ALERT_PATH = '[% interface | html %]/[% theme | html %]/sound/';
72         var AUDIO_ALERTS = JSON.parse( "[% To.json(AudioAlerts.AudioAlerts) | $raw %]" );
73
74         $( document ).ready(function() {
75             if ( AUDIO_ALERTS ) {
76                 for ( var k in AUDIO_ALERTS ) {
77                     var alert = AUDIO_ALERTS[k];
78                     if ( $( alert.selector ).length ) {
79                         playSound( alert.sound );
80                         break;
81                     }
82                 }
83             }
84         });
85     </script>
86 [% END %]
87
88 [% IF ( CAN_user_circulate_circulate_remaining_permissions ) %]
89     [% IF ( PatronAutoComplete ) %]
90         <script>
91             // PatronAutoComplete && CAN_user_circulate_circulate_remaining_permissions
92             $(document).ready(function(){
93                 var obj = $( "#findborrower" ).autocomplete({
94                     source: "/cgi-bin/koha/circ/ysearch.pl",
95                     minLength: 3,
96                     select: function( event, ui ) {
97                         window.location.href = ui.item.link;
98                     }
99                 }).data( "ui-autocomplete" );
100                 if( obj ) {
101                     obj._renderItem = function( ul, item ) {
102                         item.link = "/cgi-bin/koha/circ/circulation.pl?borrowernumber=" + item.borrowernumber;
103                         var cardnumber = "";
104                         if( item.cardnumber != "" ){
105                             // Display card number in parentheses if it exists
106                             cardnumber = " (" + ( item.cardnumber ? item.surname.escapeHtml() : "" ) + ") ";
107                         }
108                         return $( "<li></li>" )
109                         .data( "ui-autocomplete-item", item )
110                         .append( "<a href=\"" + item.link + "\">" + ( item.surname ? item.surname.escapeHtml() : "" ) + ", " + ( item.firstname ? item.firstname.escapeHtml : "" ) + ( cardnumber ? cardnumber.escapeHtml() : "" ) + " <small>" + ( item.dateofbirth ? item.dateofbirth.escapeHtml() : "" ) + " " + ( item.address ? item.address.escapeHtml() : "" ) + " " + ( item.city ? item.city.escapeHtml() : "" ) + " " + ( item.zipcode ? item.zipcode.escapeHtml() : "" ) + " " + ( item.country ? item.country.escapeHtml() : "" ) + "</small></a>" )
111                         .appendTo( ul );
112                     };
113                 }
114             });
115         </script>
116     [% END %]
117 [% END %]
118 [% IF ( PatronAutoComplete ) %]
119     <script>
120     // PatronAutoComplete
121     $(document).ready(function(){
122         var obj = $( "#searchmember" ).autocomplete({
123             source: "/cgi-bin/koha/circ/ysearch.pl",
124             minLength: 3,
125             select: function( event, ui ) {
126                 window.location.href = ui.item.link;
127             }
128         }).data( "ui-autocomplete" );
129         if( obj ) {
130             obj._renderItem = function( ul, item ) {
131                 item.link = "/cgi-bin/koha/members/moremember.pl?borrowernumber=" + item.borrowernumber;
132                 var cardnumber = "";
133                 if( item.cardnumber != "" ){
134                     // Display card number in parentheses if it exists
135                     cardnumber = " (" + item.cardnumber + ") ";
136                 }
137                 return $( "<li></li>" )
138                 .data( "ui-autocomplete-item", item )
139                 .append(
140                     "<a href=\"" + item.link + "\">" + ( item.surname ? item.surname.escapeHtml() : "" ) + ", "
141                         + ( item.firstname ? item.firstname.escapeHtml() : "" )
142                         + cardnumber.escapeHtml()
143                         + " <small>"
144                             + ( item.dateofbirth ? item.dateofbirth.escapeHtml() : "" ) + " "
145                             + ( item.address     ? item.address.escapeHtml() : "" )     + " "
146                             + ( item.city        ? item.city.escapeHtml() : "" )        + " "
147                             + ( item.zipcode     ? item.zipcode.escapeHtml() : "" )     + " "
148                             + ( item.country     ? item.country.escapeHtml() : "" )
149                         + "</small>"
150                     + "</a>" )
151                 .appendTo( ul );
152             };
153         }
154     });
155     </script>
156 [% END %]
157 <!-- / js_includes.inc -->