Bug 33144: Unescape text from authority lookup for advanced editor
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / authorities / blinddetail-biblio-search.tt
1 [% USE To %]
2 [% SET footerjs = 1 %]
3 [% INCLUDE 'doc-head-open.inc' %]
4 <title>Authority details &rsaquo; Koha</title>
5 [% INCLUDE 'doc-head-close.inc' %]
6 </head>
7
8 <body id="auth_blinddetail-biblio-search" class="auth">
9
10     <div class="main container-fluid">
11         <div class="row">
12             <div class="col-md-8 col-md-offset-2">
13
14         <div id="loading"> <img src="[% interface | html %]/[% theme | html %]/img/spinner-small.gif" alt="" /> Loading </div>
15
16             </div>
17         </div>
18
19 [% MACRO jsinclude BLOCK %]
20     <script>
21         $(document).ready(function(){
22             [% IF rancor %]
23                 function RancorReplaceField( new_text, ind_1, ind_2 ){
24                     var cur_field = opener.opener.jQuery(".CodeMirror")[0].CodeMirror.marceditor.getCurrentField();
25                     // The new_text is entity-encoded and we want decoded text
26                     new_text = new DOMParser().parseFromString(new_text, 'text/html').body.innerText;
27                     cur_field.setText(new_text);
28                     [% IF update_ind1 %]cur_field.setIndicator1(ind_1);[% END %]
29                     [% IF update_ind2 %]cur_field.setIndicator2(ind_2);[% END %]
30                     return true;
31                 }
32                 [% IF ( clear ) %]
33                     var new_line = "";
34                 [% ELSE %]
35                 var new_line = "
36                     [%- FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP -%]‡
37                         [%- To.json( SUBFIELD_LOO.marc_subfield ) | html -%]
38                         [%- FOREACH marc_value IN SUBFIELD_LOO.marc_values -%]
39                             [%- To.json( marc_value ) | html -%]
40                         [%- END -%]
41                     [%- END -%]‡9[% authid | html %]";
42                 [% END %]
43                 RancorReplaceField( new_line, "[% indicator1 | html %]", "[% indicator2 | html %]" );
44             [% ELSE %]
45                 var index_start = "[% index | html %]";
46                 var whichfield;
47                 try {
48                     whichfield = opener.opener.document.getElementById(index_start);
49                     autolinker_dialog = opener.opener.document.getElementById("autolinker_dialog");
50                 } catch(e) {
51                     whichfield = opener.document.getElementById(index_start);
52                     autolinker_dialog = opener.document.getElementById("autolinker_dialog");
53                 }
54                 var field_start = whichfield.parentNode.parentNode.parentNode.parentNode;
55
56                 // Sets the good number of form fields for the specified subfield
57                 // Returns false if the cloning failed
58                 function SetSubfieldNumber(subfield_name, nb) {
59                     // Nothing to do if we only have one value
60                     if(nb <= 1) {
61                         return true;
62                     }
63
64                     // Find the subfield we want to clone
65                     var re = new RegExp('^subfield' + subfield_name,'g');
66                     var subfields = $(field_start).children('ul').children('li').filter( function() {
67                         return this.id.match(re);
68                     });
69
70                     // Try to add as many clones as needed
71                     try {
72                         for(var i=0; i<nb-subfields.length; i++) {
73                             window.opener.opener.CloneSubfield(subfields[0].getAttribute('id'),'[% advancedMARCEditor | html %]');
74                         }
75                     }
76                     catch(err) {
77                         return false;
78                     }
79                     return true;
80                 }
81
82                 // Fills the subfield with the values entered in argument
83                 function SetSubfieldValues() {
84                     // Get the arguments
85                     var subfield_name = arguments[0];
86                     var values = new Array();
87                     for(var i=1; i<arguments.length; i++) {
88                         values.push(arguments[i]);
89                     }
90
91                     // Create the correct number of form fields for all values
92                     // If the field cloning failed, only the first value will be added to the form.
93                     SetSubfieldNumber(subfield_name, values.length);
94
95                     // Find the subfields where we will add the new values
96                     var re = new RegExp('^subfield' + subfield_name,'g');
97                     var subfields = $(field_start).children('ul').children('li').filter( function() {
98                         return this.id.match(re);
99                     });
100
101                     // Add the new values to those subfields, empty the additional fields
102                     var i=0;
103                     subfields.each(function() {
104                         var new_value;
105                         if (i in values) {
106                             new_value = values[i];
107                         }
108                         else {
109                             new_value = "";
110                         }
111                         $(this).find('.input_marceditor').val(new_value);
112                         i++;
113                     });
114                 }
115
116                 function ReOrderSubField(){
117                     var isFirst=1;
118                     var subfield_start = $(field_start).children('ul')[0];
119                     var first = subfield_start.firstElementChild;
120
121                     [% FOREACH SUBFIELD IN SUBFIELD_LOOP %]
122                         // grab all subfields
123                         var subfield_name = "[% To.json(tag_number) | $raw %][% To.json(SUBFIELD.marc_subfield) | $raw %]"
124                         var re = new RegExp('^subfield' + subfield_name,'g');
125                         var subfields = $(subfield_start).children('li').filter( function() {return this.id.match(re); });
126                         for (var i=0; i<subfields.length; i++){
127                             var subfield = subfields[i];
128                             if (isFirst ==1){
129                                 first = subfield_start.insertBefore(subfield, first);
130                                 isFirst=0;
131                             }
132                             else{
133                                 first = subfield_start.insertBefore(subfield, first.nextSibling);
134                             }
135                         }
136                     [% END %]
137                 }
138
139                 [% UNLESS ( clear ) %]
140                     ReOrderSubField()
141                     [% FOREACH SUBFIELD_LOO IN SUBFIELD_LOOP %]
142                         SetSubfieldValues(
143                             "[% To.json(tag_number) | $raw %][% To.json(SUBFIELD_LOO.marc_subfield) | $raw %]"
144                         [% FOREACH marc_value IN SUBFIELD_LOO.marc_values %]
145                             ,"[% To.json( marc_value ) | $raw %]"
146                         [% END %]
147                         );
148                     [% END %]
149                     var indicators = field_start.getElementsByClassName('indicator flat');
150                     [% IF update_ind1 %]
151                         indicators[0].value="[% indicator1 | html %]";
152                     [% END %]
153                     [% IF update_ind2 %]
154                         indicators[1].value="[% indicator2 | html %]";
155                     [% END %]
156                 [% END %]
157
158                 // browse all its subfields (clear and $9)
159                 var subfields = field_start.getElementsByTagName('input');
160                 var re = /^tag_\d*_code_/;
161                 for(var i=0, len = subfields.length ; i< len ; i++) { // browse all subfields
162                     if(subfields[i].hasAttribute('name') == 0 ) {continue; }  // div elements specific to Select2
163                     if(subfields[i].getAttribute('name').match(re)){ // it s a subfield
164                         var code     = subfields[i];   // code is the first input
165                         var subfield = subfields[i+1]; // subfield the second
166
167                     [% IF ( clear ) %]
168                         if (subfield){subfield.value="" ;}
169                     [% ELSE %]
170                         if(code.value=='9'){
171                             subfield.value = "[% To.json(authid) | $raw %]";
172                             subfield.className = subfield.className.replace("no_matching_authority_field", "matching_authority_field");
173                             break;
174                         }
175                     [% END %]
176                     }
177                 }
178
179                 //Delete create authority button and status
180                 var linkinfos = field_start.getElementsByTagName('i');
181                 for (index = linkinfos.length - 1; index >= 0; index--) {
182                     linkinfos[index].parentNode.removeChild(linkinfos[index]);
183                 }
184                 //Change message autolinker_dialog
185                 var subfield_dialog = $(autolinker_dialog).children('ul').children('li');
186                 for (index = subfield_dialog.length - 1; index >= 0; index--){
187                     var tag_field = field_start.id.split("_")[1];
188                     if (subfield_dialog[index].innerHTML.indexOf(tag_field) !== -1 ){
189                         subfield_dialog[index].innerHTML = subfield_dialog[index].innerHTML.replace(_("No matching authority found."), _("No matching authority found. A new authority was created or imported"));
190                         break;
191                     }
192                 }
193             [% END %]
194             opener.close();
195             window.close();
196             return false;
197         });
198     </script>
199 [% END %]
200
201 [% INCLUDE 'intranet-bottom.inc' popup_window = 1 %]