Bug 33173: Save and continue button in standard cataloging module broken
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / cataloguing / addbiblio.tt
1 [% USE raw %]
2 [% USE Asset %]
3 [% USE Koha %]
4 [% INCLUDE 'doc-head-open.inc' %]
5 <title>[% IF ( biblionumber ) %]Editing [% title | html %] (Record number [% biblionumber | html %])[% ELSE %]Add MARC record[% END %] &rsaquo; Cataloging &rsaquo; Koha</title>
6 [% INCLUDE 'doc-head-close.inc' %]
7 [% INCLUDE 'calendar.inc' %]
8 [% Asset.js("lib/hc-sticky.js") | $raw %]
9 [% INCLUDE 'select2.inc' %]
10 <script>
11     [% IF Koha.Preference('CreateAVFromCataloguing') && CAN_user_parameters_manage_auth_values %]
12         var auth_values_creation = 1;
13     [% ELSE %]
14         var auth_values_creation = 0;
15     [% END %]
16     $.fn.select2.defaults.set("width", "100%" );
17 </script>
18 [% Asset.js("js/cataloging.js") | $raw %]
19 [% Asset.js("js/browser.js") | $raw %]
20 <script>
21     var browser = KOHA.browser('[% searchid | html %]', parseInt('[% biblionumber | html %]', 10));
22     browser.show();
23
24     $(window).load(function(){
25         $("#loading").hide();
26     });
27     var Sticky;
28     $(document).ready(function() {
29
30         [% IF bib_doesnt_exist %]
31             $("#addbibliotabs").hide();
32             $("#toolbar").hide();
33         [% END %]
34
35         $("a[data-toggle='tab']").on("shown.bs.tab", function (e) {
36             $( e.target.hash + " .input_marceditor:visible:eq(0)").focus();
37         });
38
39         /* On page load, check for location.hash in the page URL */
40         /* If present the location hash will be used to activate the correct tab */
41         var hash = location.hash;
42         var hashPieces = hash.split('?');
43         if( hashPieces[0] !== "" ){
44             selectTab( hashPieces[0] );
45             window.scrollTo( 0, 0 );
46         }
47
48         $( "ul.sortable_field", "#addbibliotabs" ).sortable({
49             axis: "y",
50             containment: $("#addbibliotabs")
51         });
52         $( "ul.sortable_subfield", "#addbibliotabs" ).sortable({
53             axis: "y",
54             containment: "parent"
55         });
56
57         [% IF tab %]
58             hash = "#[% tab | html %]";
59             selectTab( hash );
60         [% END %]
61
62         Sticky = $("#toolbar");
63         Sticky.hcSticky({
64             stickTo: "#f",
65             stickyClass: "floating"
66         });
67
68         /* check cookie to hide/show marcdocs*/
69         if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
70             toggleMARCdocLinks(false);
71         } else {
72             toggleMARCdocLinks(true);
73         }
74
75         $("#marcDocsSelect").click(function(){
76             if( Cookies.get("marcdocs_[% borrowernumber | html %]") == 'hide'){
77                 toggleMARCdocLinks(true);
78             } else {
79                 toggleMARCdocLinks(false);
80             }
81         });
82
83         /* check cookie to hide/show marc tags*/
84         var marctags_cookie = Cookies.get("marctags_[% borrowernumber | html %]");
85         if( marctags_cookie == 'hide'){
86             toggleMARCTagLinks(false);
87         } else if( marctags_cookie == 'show'){
88             toggleMARCTagLinks(true)
89         } else {
90             [% UNLESS Koha.Preference("hide_marc") %]
91                 toggleMARCTagLinks(true)
92             [% ELSE %]
93                 toggleMARCTagLinks(false);
94             [% END %]
95         }
96
97         $("#marcTagsSelect").click(function(){
98             if( Cookies.get("marctags_[% borrowernumber | html %]") == 'hide'){
99                 toggleMARCTagLinks(true)
100             } else {
101                 toggleMARCTagLinks(false);
102             }
103         });
104
105         $("#z3950search").click(function(){
106             PopupZ3950();
107         });
108
109         $("#linkerbutton").click(function(){
110             AutomaticLinker();
111         });
112
113         $("#saverecord").click(function(){
114             $(".btn-group").removeClass("open");
115             onOption();
116             return false;
117         });
118
119         $("#saveandview").click(function(){
120             $(".btn-group").removeClass("open");
121             redirect("view");
122             return false;
123         });
124
125         $("#saveanditems").click(function(){
126             $(".btn-group").removeClass("open");
127             redirect("items");
128             return false;
129         });
130         $("#saveandcontinue").click(function(){
131             $(".btn-group").removeClass("open");
132             var tab = $("#addbibliotabs div.active:first").attr('id');
133             $("#current_tab").val(tab);
134             redirect("just_save", tab);
135             return false;
136         });
137
138         $( '#switcheditor' ).click( function() {
139             var breedingid = [% breedingid || "null" | html %];
140
141             if ( !confirm( breedingid ? _("This record cannot be transferred to the advanced editor. Continue?") : _("Any changes will not be saved. Continue?") ) ) return false;
142
143             Cookies.set( 'catalogue_editor_[% logged_in_user.borrowernumber | html %]', 'advanced', { expires: 365, path: '/', sameSite: 'Lax'  } );
144
145             var biblionumber = [% biblionumber || "null" | html %];
146
147             if ( biblionumber ) {
148                 window.location = '/cgi-bin/koha/cataloguing/editor.pl#catalog/' + biblionumber;
149             } else {
150                 window.location = '/cgi-bin/koha/cataloguing/editor.pl';
151             }
152
153             return false;
154         } );
155         $(".change-framework").on("click", function(){
156             var frameworkcode = $(this).data("frameworkcode");
157             $("#frameworkcode").val( frameworkcode );
158             Changefwk();
159         });
160
161         $(".toolbar-tabs a").on("click",function(e){
162             e.preventDefault();
163             selectTab( this.hash );
164         });
165
166         $(".tag_anchor").on("click", function(e){
167             e.preventDefault();
168             $(".tag_anchor").removeClass("selected");
169             $(this).addClass("selected");
170             var link = this.href;
171             var linkid = link.substring( link.indexOf("#") + 1 );
172             window.scrollTo( 0, getScrollto( linkid, "toolbar" ) );
173         });
174
175         $("body").on("click", ".linkfield", function(e){
176             e.preventDefault();
177             var tab = $(this).data("tab");
178             var field = $(this).data("field");
179             var tablink = $("a[data-tabid='" + tab + "']" ).get(0).hash;
180             selectTab( tablink );
181             window.scrollTo( 0, getScrollto( field, "toolbar" ) );
182         });
183
184         $("body").on("click", ".show-errors", function(e){
185             document.getElementById("form-errors").scrollIntoView();
186         });
187
188     });
189
190     function selectTab( tablink ){
191         let a = $("a[href='" + tablink + "']");
192         $(".toolbar-tabs li").removeClass("selected");
193         a.tab("show").parent().addClass("selected");
194         var tabid = a.data("tabid");
195         $(".tag_anchors").removeClass("tab_selected").hide();
196         $(".tag_anchors_" + tabid ).addClass("tab_selected").show();
197     }
198
199     /**
200     * Returns a roughly ideal position to scroll an element into view
201     * @param {string} target - The HTML id of the element to scroll into view
202     * @param {string} elemid - The HTML id of the element which might obscure
203     *                          the view of the target element e.g. a floating toolbar
204     * @return {number} - The y-coordinate to pass to window.scrollTo()
205     */
206     function getScrollto( target, elemid ){
207         var dest = $("#" + target );
208         var yoffset = dest.offset();
209
210         if( elemid != "" ){
211             var element = $("#" + elemid );
212             var elem_height = element.outerHeight();
213         } else {
214             elem_height = 0;
215         }
216         return yoffset.top - elem_height - 20;
217     }
218
219     function redirect(dest){
220         $("#redirect").attr("value",dest);
221         return Check();
222     }
223
224     [% IF ( CAN_user_editcatalogue_edit_items ) %]
225         var onOption = function () {
226             return Check();
227         }
228     [% END %]
229
230 /**
231 * this function append button for create new authority if not found
232 */
233
234 function addCreateAuthorityButton(tag_subfield_line, heading, tag_index) {
235     var title = _("Create authority");
236     var elem = $('<a href="#" title="' + title + '"><i class="fa fa-plus-circle"></i></a>');
237     tag_subfield_line.append(elem);
238     var tag_subfield_line_a = $('.subfield_line[id^=subfield' + heading.tag + 'a]').eq(tag_index);
239     var subfield_a = tag_subfield_line_a.find('.input_marceditor').eq(0);
240     var index = subfield_a.attr('id');
241     elem.click(function() {
242         var popup = window.open("", "new_auth_popup",'fullscreen,toolbar=false,scrollbars=yes');
243         if(popup !== null) {
244             // Create a new form that will be POSTed in the new window
245             var form = $('<form>').attr({
246             method: 'post',
247             action: "/cgi-bin/koha/authorities/authorities.pl",
248             target: "new_auth_popup"
249             });
250             //add the authtypecode
251             form.append($('<input>').attr({
252                 type: 'hidden',
253                 name: 'authtypecode',
254                 value: heading.auth_type
255             }));
256             form.append($('<input>').attr({
257                 type: 'hidden',
258                 name: 'tagreport',
259                 value: heading.tag_to_report
260             }));
261             form.append($('<input>').attr({
262                 type: 'hidden',
263                 name: 'tagbiblio',
264                 value: heading.tag
265             }));
266             form.append($('<input>').attr({
267                 type: 'hidden',
268                 name: 'index',
269                 value: index
270             }));
271             $('.tag[id^=tag_' + heading.tag + '_]').eq(tag_index).find(':input').each(function(){
272                 form.append($('<input>').attr({
273                     type: 'hidden',
274                     name: this.name.split('_',4).join(''),
275                     value: $(this).val()
276                 }));
277             });
278             $('body').append(form);
279             form.submit();
280             form.remove();
281         }
282         return false;
283     });
284
285 }
286
287 /**
288  * Updates the authid for every heading field
289  * Adds visual feedback for the changes made on the form.
290  */
291 function updateHeadingLinks(links) {
292     var current_tag = '';
293     var tag_index = 0;
294
295     // Delete the old message dialog and create a new one
296     $('#autolinker_dialog').remove();
297     var message_dialog = $('<div id="autolinker_dialog" class="dialog message"><strong>' + _("Automatic authority link results:") + '</strong><ul></ul></div>');
298     var message_dialog_ul = message_dialog.find('ul');
299
300     $.each(links, function(index, heading) {
301         if(current_tag == heading.tag) {
302             tag_index++;
303         }
304         else {
305             current_tag = heading.tag;
306             tag_index = 0;
307         }
308
309         // Find the $9 field to update
310         var tag_subfield_line = $('.subfield_line[id^=subfield' + heading.tag + '9]').eq(tag_index);
311         if( tag_subfield_line.length < 1 ){ return; }
312
313         var subfield = tag_subfield_line.find('.input_marceditor').eq(0);
314         subfield.removeClass("matching_authority_field no_matching_authority_field");
315
316         // Delete the old status if one exists
317         tag_subfield_line.children('.subfield_status').remove();
318
319         // If the field wasn't modified. Skip it.
320         if(heading.status == 'UNCHANGED') {
321             return;
322         }
323
324
325         // Make the subfield line visible and update its value
326         tag_subfield_line.show();
327         subfield.val(heading.authid);
328
329         // Add the new status
330         var image = '<i class="fa fa-close subfield_status no_matching_authority" </i> ';
331         var message = '';
332         var field_class = 'no_matching_authority_field';
333         switch(heading.status) {
334             case 'LOCAL_FOUND':
335                 image = '<i class="fa fa-check subfield_status matching_authority"</i> ';
336                 message = _("A matching authority was found in the local database.");
337                 field_class = 'matching_authority_field';
338                 break;
339             case 'CREATED':
340                 image = '<i class="fa fa-check subfield_status matching_authority"></i> ';
341                 message = _("No matching authority found. A new authority was created automatically.");
342                 field_class = 'matching_authority_field';
343                 break;
344             case 'MULTIPLE_MATCH':
345                 message = _("More than one local match found. Possibly a duplicate authority!");
346                 break;
347             case 'NONE_FOUND':
348                 message = _("No matching authority found.");
349                 break;
350             default:
351                 message = heading.status;
352                 break;
353         }
354
355         subfield[0].classList.add(field_class);
356         tag_subfield_line.find('i').each(function() {
357             this.remove();
358         });
359         tag_subfield_line.append(image);
360
361         // Add the message to the dialog
362         message_dialog_ul.append('<li><strong>' + heading.tag + '</strong> - ' + message + '</li>');
363
364         // Add a link to create a new authority if none was found
365         if(heading.status == 'NONE_FOUND' && tag_subfield_line.find('i').length == 1) {
366             addCreateAuthorityButton(tag_subfield_line, heading , tag_index);
367         }
368     });
369
370     if(message_dialog.find('li').length == 0) {
371         message_dialog_ul.append("<li>" + _("No authority link was changed.") + "</li>");
372     }
373     $('#addbibliotabs').before(message_dialog);
374 }
375
376 /**
377  * Use an ajax request to automatically find authority links for the current record
378  */
379 function AutomaticLinker() {
380     // Show the Loading overlay
381     $("#loading").show();
382
383     // Remove fields that are completely empty
384     $('#f').find('.tag').each(function() {
385         var empty = true;
386         $(this).find('.input_marceditor').each(function() {
387             if($(this).val() != '') {
388                 empty = false;
389                 return false;
390             }
391         });
392         if(empty) {
393             UnCloneField($(this).attr('id'));
394         }
395     });
396
397     // Get all the form values to post via AJAX
398     var form_data = {};
399     $('#f').find(':input').each(function(){
400         form_data[this.name] = $(this).val();
401     });
402     delete form_data[''];
403
404     // Send the data to automatic_linker.pl
405     $.ajax({
406         url:'/cgi-bin/koha/svc/cataloguing/automatic_linker.pl',
407         type:'post',
408         data: form_data,
409         dataType: 'json',
410         error: function(xhr) {
411             alert("Error : \n" + xhr.responseText);
412         },
413         success: function(json) {
414             switch(json.status) {
415                 case 'UNAUTHORIZED':
416                     alert(_("Error : You do not have the permissions necessary to use this functionality."));
417                     break;
418                 case 'OK':
419                     updateHeadingLinks(json.links);
420                     break;
421             }
422         },
423         complete: function() {
424             $("#loading").hide();
425         }
426     });
427 }
428
429
430 function PopupMARCFieldDoc(field) {
431     [% IF Koha.Preference('marcfielddocurl') %]
432         var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','&quot;') | html %]";
433         docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
434         docurl = docurl.replace("{FIELD}", ""+field);
435         docurl = docurl.replace("{LANG}", "[% lang | html %]");
436         window.open(docurl);
437     [% ELSIF ( marcflavour == 'MARC21' ) %]
438         _MARC21FieldDoc(field);
439     [% ELSIF ( marcflavour == 'UNIMARC' ) %]
440         _UNIMARCFieldDoc(field);
441     [% END %]
442 }
443     function confirmnotdup(redirect){
444         $("#confirm_not_duplicate").attr("value","1");
445         $("#redirect").attr("value",redirect);
446         Check();
447     }
448
449     function Dopop(link,i) {
450         defaultvalue = document.getElementById(i).value;
451         window.open(link+"&result="+defaultvalue,"valuebuilder",'width=700,height=550,toolbar=false,scrollbars=yes');
452     }
453
454     /**
455      * this function open a popup to search on z3950 server.
456      */
457     function PopupZ3950() {
458         var strQuery = GetZ3950Terms();
459         if(strQuery){
460             window.open("/cgi-bin/koha/cataloguing/z3950_search.pl?biblionumber=[% biblionumber | html %]"+strQuery,"z3950search",'width=740,height=450,location=yes,toolbar=no,scrollbars=yes,resize=yes');
461         }
462     }
463
464     function PopupMARCFieldDoc(field) {
465         [% IF Koha.Preference('marcfielddocurl') %]
466             var docurl = "[% Koha.Preference('marcfielddocurl').replace('"','&quot;') | html %]";
467             docurl = docurl.replace("{MARC}", "[% marcflavour | html %]");
468             docurl = docurl.replace("{FIELD}", ""+field);
469             docurl = docurl.replace("{LANG}", "[% lang | html %]");
470             window.open(docurl);
471         [% ELSIF ( marcflavour == 'MARC21' ) %]
472             _MARC21FieldDoc(field);
473         [% ELSIF ( marcflavour == 'UNIMARC' ) %]
474             _UNIMARCFieldDoc(field);
475         [% END %]
476     }
477
478     function _MARC21FieldDoc(field) {
479         if(field == 0) {
480             window.open("http://www.loc.gov/marc/bibliographic/bdleader.html");
481         } else if (field >= 90 && field <= 99 ){
482             window.open("http://www.loc.gov/marc/bibliographic/bd09x.html");
483         } else if (field >= 590 && field <= 599 ){
484             window.open("http://www.loc.gov/marc/bibliographic/bd59x.html");
485         } else if (field >= 690 && field <= 699 ){
486             window.open("http://www.loc.gov/marc/bibliographic/bd69x.html");
487         } else if (field < 900) {
488             window.open("http://www.loc.gov/marc/bibliographic/bd" + ("000"+field).slice(-3) + ".html");
489         } else {
490             window.open("http://www.loc.gov/marc/bibliographic/bd9xx.html");
491         }
492     }
493
494     function _UNIMARCFieldDoc(field) {
495         /* http://archive.ifla.org/VI/3/p1996-1/ is an outdated version of UNIMARC, but
496            seems to be the only version available that can be linked to per tag.  More recent
497            versions of the UNIMARC standard are available on the IFLA website only as
498            PDFs!
499         */
500         var url;
501         if (field == 0) {
502             url = "http://archive.ifla.org/VI/3/p1996-1/uni.htm";
503         } else {
504             var first = field.substring(0,1);
505             url = "http://archive.ifla.org/VI/3/p1996-1/uni" + first + ".htm#";
506             if (first == 0) url = url + "b";
507             url = first == 9
508                   ? "http://archive.ifla.org/VI/3/p1996-1/uni9.htm"
509                   : url + field;
510         }
511         window.open(url);
512     }
513
514     /*
515      * Functions to hide/show marc docs and tags links
516      */
517
518     function toggleMARCdocLinks(flag){
519         if( flag === true ){
520             $(".marcdocs").show();
521             Cookies.set("marcdocs_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax'  });
522             $("#marcDocsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
523         } else {
524             $(".marcdocs").hide();
525             Cookies.set("marcdocs_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax'  });
526             $("#marcDocsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
527         }
528     }
529
530     function toggleMARCTagLinks(flag){
531         if( flag === true ){
532             $(".tagnum").show();
533             $(".subfieldcode").show();
534             Cookies.set("marctags_[% borrowernumber | html %]",'show', { path: "/", expires: 365, sameSite: 'Lax'  });
535             $("#marcTagsSelect i").addClass('fa-check-square-o').removeClass('fa-square-o');
536         } else {
537             $(".tagnum").hide();
538             $(".subfieldcode").hide();
539             Cookies.set("marctags_[% borrowernumber | html %]",'hide', { path: "/", expires: 365, sameSite: 'Lax'  });
540             $("#marcTagsSelect i").removeClass('fa-check-square-o').addClass('fa-square-o');
541         }
542     }
543
544     /**
545      * check if mandatory/important subfields are written
546      * @param mandatory true to check for mandatories, false for importants
547      */
548     function AreFieldsNotOk (mandatory = true) {
549         var fields = new Array();
550         var subfields = new Array();
551         var tab = new Array();
552         var label = new Array();
553         var flag = false;
554         var tabflag= new Array();
555         var StrAlert = "<div id='form-errors' class='dialog alert list'>";
556         var notFilledClass = "subfield_not_filled";
557
558         if (mandatory) {
559             [% FOREACH BIG_LOO IN BIG_LOOP %]
560                 [% FOREACH innerloo IN BIG_LOO.innerloop %]
561                     [% IF ( innerloo.mandatory ) %]
562                         fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
563                     [% END %]
564                     [% FOREACH subfield_loo IN innerloo.subfield_loop %]
565                         [% IF ( subfield_loo.mandatory ) %]subfields.push("[% subfield_loo.id | html %]");
566                             tab.push("[% BIG_LOO.number | html %]");
567                             label.push("[% subfield_loo.marc_lib | $raw %]");
568                         [% END %]
569                     [% END %]
570                 [% END %]
571             [% END %]
572             StrAlert += "<h4>" + _("The following mandatory subfields aren't filled:") + "</h4>";
573         } else {
574             [% FOREACH BIG_LOO IN BIG_LOOP %]
575                 [% FOREACH innerloo IN BIG_LOO.innerloop %]
576                     [% IF ( innerloo.important ) %]
577                         fields.push(new Array("[% innerloo.tag | html %]","[% innerloo.index | html %][% innerloo.random | html %]","[% innerloo.index | html %]", "[% BIG_LOO.number | html %]"));
578                     [% END %]
579                     [% FOREACH subfield_loo IN innerloo.subfield_loop %]
580                         [% IF ( subfield_loo.important ) %]subfields.push("[% subfield_loo.id | html %]");
581                             tab.push("[% BIG_LOO.number | html %]");
582                             label.push("[% subfield_loo.marc_lib | $raw %]");
583                         [% END %]
584                     [% END %]
585                 [% END %]
586             [% END %]
587             StrAlert += "<h4>" + _("The following important subfields aren’t filled:") + "</h4>";
588             notFilledClass = "important_subfield_not_filled";
589         }
590         StrAlert += "<ul>";
591         for(var i=0,len=subfields.length; i<len ; i++){
592             var tag=subfields[i].substr(4,3);
593             var subfield=subfields[i].substr(17,1);
594             var tagnumber=subfields[i].substr(19,subfields[i].lastIndexOf("_")-19);
595             if (tabflag[tag+subfield+tagnumber] ==  null) {
596                 tabflag[tag+subfield+tagnumber]=new Array();
597                 tabflag[tag+subfield+tagnumber][0]=0;
598             }
599             if( tabflag[tag+subfield+tagnumber][0] != 1 && (document.getElementById(subfields[i]) != null && ! document.getElementById(subfields[i]).value || document.getElementById(subfields[i]) == null)){
600                 tabflag[tag+subfield+tagnumber][0] = 0 + tabflag[tag+subfield+tagnumber] ;
601
602                 var elt = document.getElementById(subfields[i]);
603                 if ( elt.nodeName == 'SELECT' ) {
604                     $(elt).siblings('.select2').find("span[role='combobox']").addClass(notFilledClass);
605                 } else {
606                     elt.setAttribute('class','input_marceditor noEnterSubmit ' + notFilledClass);
607                 }
608                 $('#' + subfields[i]).focus();
609                 tabflag[tag+subfield+tagnumber][1]=label[i];
610                 tabflag[tag+subfield+tagnumber][2]=tab[i];
611             } else {
612                 tabflag[tag+subfield+tagnumber][0] = 1;
613             }
614             tabflag[tag+subfield+tagnumber][3] = subfields[i];
615         }
616
617         for (var tagsubfieldid in tabflag){
618             if (tabflag[tagsubfieldid][0]==0){
619                 var tag=tagsubfieldid.substr(0,3);
620                 var subfield=tagsubfieldid.substr(3,1);
621                 StrAlert += "<li>"+_("Tag %s subfield %s %s in tab %s").format(tag, subfield, formatFieldName( tabflag[tagsubfieldid][1] ), tabflag[tagsubfieldid][2]) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + tabflag[tagsubfieldid][2] + '" data-field="' + tabflag[tagsubfieldid][3] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
622                 flag = true;
623             }
624         }
625         StrAlert += "</ul>";
626         /* Check for mandatories/importants field(not subfields) */
627         /* Loop over array of fields identified as mandatory or
628            important to see if at least one subfield is filled */
629         mandatoryFields = new Object();
630
631         for(var i=0,len=fields.length; i<len; i++){
632             isempty  = true;
633             arr      = fields[i];
634             divid    = "tag_" + arr[0] + "_" + arr[1];
635             varegexp = new RegExp("^tag_" + arr[0] + "_code_");
636
637             if(parseInt(arr[0]) >= 10){
638                 elem = document.getElementById(divid);
639                 eleminputs = elem.getElementsByTagName('input');
640
641                 for(var j=0,len2=eleminputs.length; j<len2; j++){
642
643                     if(eleminputs[j].name.match(varegexp) && eleminputs[j].value){
644                         inputregexp = new RegExp("^tag_" + arr[0] + "_subfield_" + eleminputs[j].value + "_" + arr[2]);
645
646                         for( var k=0; k<len2; k++){
647                             if( eleminputs[k].id.match(inputregexp) ){
648                                 if( eleminputs[k].value ){
649                                     isempty = false
650                                 }
651                             }
652                         }
653
654                         elemselect = elem.getElementsByTagName('select');
655                         for( var k=0; k<elemselect.length; k++){
656                             if(elemselect[k].id.match(inputregexp) && elemselect[k].value){
657                                 isempty = false
658                             }
659                         }
660                     }
661                 }
662
663                 elemtextareas = elem.getElementsByTagName('textarea');
664                 for(var j=0,len2=elemtextareas.length; j<len2; j++){
665                     // this bit assumes that the only textareas in this context would be for subfields
666                     if (elemtextareas[j].value) {
667                         isempty = false;
668                     }
669                 }
670
671             } else {
672                 isempty = false;
673             }
674
675             if(isempty){
676                 flag = true;
677                 if (mandatory) {
678                     mandatoryFields[ arr[0] ] = {
679                         importance: "mandatory",
680                         elemid: "div_indicator_" + divid,
681                         tab: arr[3]
682                     }
683                 } else {
684                     mandatoryFields[ arr[0] ] = {
685                         importance: "important",
686                         elemid: "div_indicator_" + divid,
687                         tab: arr[3]
688                     }
689                 }
690             }
691
692         }
693
694         if( Object.entries(mandatoryFields).length > 0 ){
695             StrAlert += "<h4>" + _("The following fields aren't filled:") + "</h4>";
696             StrAlert += "<ul>";
697             for( var prop in mandatoryFields ){
698                 if( mandatoryFields[prop]["importance"] == "mandatory" ){
699                     StrAlert += "<li>" + _("Field %s is mandatory, at least one of its subfields must be filled.").format( prop ) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + mandatoryFields[prop]["tab"] + '" data-field="' + mandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
700                 } else {
701                     StrAlert += "<li>" + _("Field %s is important, at least one of its subfields must be filled.").format(prop) + ' <a class="linkfield btn btn-link" href="#" data-tab="' + mandatoryFields[prop]["tab"] + '" data-field="' + mandatoryFields[prop]["elemid"] + '"><i class="fa fa-arrow-right" aria-hidden="true"></i> ' + _("Go to field") + '</a></li>';
702                 }
703             }
704             StrAlert += "</ul>";
705         }
706         StrAlert += "</div>";
707         if ( flag ) {
708             $("#show-errors").html('<button type="button" class="btn btn-danger show-errors"><i class="fa fa-warning"></i> ' + _("Errors") + '</span>');
709             return StrAlert;
710         } else {
711             return flag;
712         }
713     }
714
715     /**
716      * Run checks for mandatory and important fields
717      * Output errors if necessary, or submit the form
718      */
719     function Check(){
720         var StrAlert = AreFieldsNotOk();
721         var StrWarning = AreFieldsNotOk( false );
722         if( !StrAlert && StrWarning ){
723             // Check important fields
724             $("#check_errors").html( StrWarning );
725             $('html, body').animate({ scrollTop: 0 }, 'fast');
726
727             var r=confirm( _("Important fields(s) are not filled. Are you sure you want to save?" ) );
728             if (! r){
729                 return false;
730             } else {
731                 document.f.submit();
732                 return true;
733             }
734         } else if( StrAlert ){
735             var strAll = StrAlert;
736             if( StrWarning ){
737                 strAll += StrWarning;
738             }
739             $("#check_errors").html( strAll );
740             $('html, body').animate({ scrollTop: 0 }, 'fast');
741             Sticky.hcSticky('refresh');
742             return false;
743         } else if( !StrAlert && !StrWarning ){
744             document.f.submit();
745             return true;
746         }
747     }
748
749     /**
750      * check if z3950 mandatories are set or not
751      */
752     function GetZ3950Terms(){
753         var frameworkcode = document.getElementById("frameworkcode").value;
754         var strQuery = "&frameworkcode=" + encodeURIComponent(frameworkcode);
755         var mandatories = new Array();
756         var mandatories_label = new Array();
757         [% FOREACH BIG_LOO IN BIG_LOOP %]
758             [% FOREACH innerloo IN BIG_LOO.innerloop %]
759                 [% FOREACH subfield_loo IN innerloo.subfield_loop %]
760                     [% IF ( subfield_loo.z3950_mandatory ) %]
761                         mandatories.push("[% subfield_loo.id | html %]");
762                         mandatories_label.push("[% subfield_loo.z3950_mandatory | html %]");
763                     [% END %]
764                 [% END %]
765             [% END %]
766         [% END %]
767
768         for(var i=0,len=mandatories.length; i<len ; i++){
769             var field_value = document.getElementById(mandatories[i]).value;
770             if( field_value ){
771                 strQuery += "&"+encodeURIComponent(mandatories_label[i])+"="+encodeURIComponent(field_value);
772             }
773         }
774         return strQuery;
775     }
776
777     function Changefwk() {
778         var f = document.f;
779         f.op.value = "[% op | html %]";
780         f.biblionumber.value = "[% biblionumberdata | html %]";
781         f.changed_framework.value = "changed";
782         f.submit();
783     }
784
785     /* Wrap a value in HTML without putting HTML in translatable string */
786     function formatFieldName( string ){
787         return "<strong><em>" + string + "</em></strong>";
788     }
789 </script>
790 [% Asset.css("css/addbiblio.css") | $raw %]
791 </head>
792 <body id="cat_addbiblio" class="cat">
793
794    <div id="loading">
795        <div>Loading, please wait...</div>
796    </div>
797
798     [% INCLUDE 'header.inc' %]
799     [% INCLUDE 'cataloging-search.inc' %]
800
801     <nav id="breadcrumbs" aria-label="Breadcrumb" class="breadcrumb">
802         <ol>
803             <li>
804                 <a href="/cgi-bin/koha/mainpage.pl">Home</a>
805             </li>
806             <li>
807                 <a href="/cgi-bin/koha/cataloguing/cataloging-home.pl">Cataloging</a>
808             </li>
809             <li>
810                 <a href="#" aria-current="page">
811                     [% IF ( biblionumber ) %]
812                         Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
813                     [% ELSE %]
814                         Add MARC record
815                     [% END %]
816                 </a>
817             </li>
818         </ol>
819     </nav>
820
821     <div class="main container-fluid">
822         <div class="row">
823             <div class="col-md-10 col-md-offset-1">
824
825                 <div id="check_errors"></div>
826
827                 <h1>
828                     [% IF ( biblionumber ) %]
829                         Editing <em>[% title | html %]</em> (Record number [% biblionumber | html %])
830                     [% ELSE %]
831                         Add MARC record [% IF (circborrowernumber) %]<em>(fast cataloging)</em>[% END %]
832                     [% END %]
833                 </h1>
834
835                 [% UNLESS ( number ) %]
836                     <!-- show duplicate warning on tab 0 only -->
837                     [% IF ( duplicatebiblionumber ) %]
838                         <div class="dialog alert">
839                             <h3>Duplicate record suspected</h3>
840                             <p>Is this a duplicate of <a href="/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% duplicatebiblionumber | uri %]" onclick="openWindow('/cgi-bin/koha/catalogue/MARCdetail.pl?biblionumber=[% duplicatebiblionumber | uri %]&amp;popup=1', 'DuplicateBiblio','800','600'); return false;">[% duplicatetitle | html %] <i class="fa fa-window-restore"></i></a> ?</p>
841                             [% IF ( CAN_user_editcatalogue_edit_items ) %]
842                                 <form action="/cgi-bin/koha/cataloguing/additem.pl" method="get">
843                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
844                                     <button type="submit" class="new"><i class="fa fa-fw fa-pencil"></i> Yes, edit existing items</button>
845                                 </form>
846                             [% ELSE %]
847                                 <form action="/cgi-bin/koha/catalogue/detail.pl" method="get">
848                                     <input type="hidden" name="biblionumber" value="[% duplicatebiblionumber | html %]" />
849                                     <input type="submit" value="Yes: View existing items" />
850                                 </form>
851                             [% END %]
852                             <form action="/cgi-bin/koha/cataloguing/addbiblio.pl" method="get">
853                                 [% IF ( CAN_user_editcatalogue_edit_items ) %]
854                                     <button type="submit" class="new" onclick="confirmnotdup('items'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
855                                 [% ELSE %]
856                                     <button type="submit" class="new" onclick="confirmnotdup('view'); return false;"><i class="fa fa-fw fa-save"></i> No, save as new record</button>
857                                 [% END %]
858                             </form>
859                         </div> <!-- /.dialog.alert -->
860                     [% END # /IF duplicatebiblionumber %]
861                 [% END # /UNLESS number %]
862
863                 [% IF ( done ) %]
864                     <script>
865                         opener.document.forms['f'].biblionumber.value=[% biblionumber | html %];
866                         opener.document.forms['f'].title.value='[% title | html %]';
867                         window.close();
868                     </script>
869                 [% ELSE %]
870                     <form method="post" name="f" id="f" action="/cgi-bin/koha/cataloguing/addbiblio.pl" onsubmit="return Check();">
871                         <input type="hidden" value="[% IF ( biblionumber ) %]view[% ELSE %]items[% END %]" id="redirect" name="redirect" />
872                         <input type="hidden" value="" id="current_tab" name="current_tab" />
873                         <input type="hidden" value="0" id="confirm_not_duplicate" name="confirm_not_duplicate" />
874                 [% END %]
875
876                 <div id="toolbar" class="btn-toolbar">
877                     [% IF CAN_user_editcatalogue_edit_items or ( frameworkcode == 'FA' and CAN_user_editcatalogue_fast_cataloging ) %]
878                         [% IF (circborrowernumber) %][%# fast cataloging must lead to items %]
879                             <!-- Action is under fast cataloging - Save button redirecting to items -->
880                             <div class="btn-group"><a href="#" id="saveanditems" class="btn btn-primary"><i class="fa fa-save"></i> Save</a></div>
881                         [% ELSE %]
882                             <!-- Not using fast cataloging - Display split menu -->
883                             <div class="btn-group">
884                                 <button class="btn btn-primary" id="saverecord"><i class="fa fa-save"></i> Save</button>
885                                 <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
886                                 <span class="caret"></span>
887                                 </button>
888                                 <ul class="dropdown-menu">
889                                     <li><a id="saveandview" href="#">Save and view record</a></li>
890                                     <li><a id="saveanditems" href="#">Save and edit items</a></li>
891                                     <li><a id="saveandcontinue" href="#">Save and continue editing</a></li>
892                                 </ul>
893                             </div>
894                         [% END %]
895                     [% ELSE %]
896                         <!-- User cannot edit items - single button redirecting to view -->
897                         <div class="btn-group"><a href="#" id="saveandview" class="btn btn-default"><i class="fa fa-save"></i> Save</a></div>
898                     [% END # /IF CAN_user_editcatalogue_edit_items %]
899
900                     [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
901                         [% IF biblionumber %]
902                             <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Replace record via Z39.50/SRU search</a></div>
903                         [% ELSE %]
904                             <div class="btn-group"><a class="btn btn-default" href="#" id="z3950search"><i class="fa fa-search"></i> Z39.50/SRU search</a></div>
905                         [% END %]
906                         [% IF ( CAN_user_editauthorities ) %]
907                             <div class="btn-group"><a class="btn btn-default" href="#" id="linkerbutton"><i class="fa fa-refresh"></i> Link authorities automatically</a></div>
908                         [% END %]
909                     [% END %]
910
911                     <div class="btn-group">
912                         <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><i class="fa fa-cog"></i> Settings <span class="caret"></span></button>
913                         <ul id="settings-menu" class="dropdown-menu">
914                             [% IF Koha.Preference( 'EnableAdvancedCatalogingEditor' ) == 1 && CAN_user_editcatalogue_advanced_editor %]
915                                 <li><a href="#" id="switcheditor">Switch to advanced editor</a></li>
916                             [% END %]
917                             [% UNLESS advancedMARCEditor %]
918                                 <li>
919                                     <a href="#" id="marcDocsSelect"><i class="fa fa-check-square-o"></i> Show MARC tag documentation links</a>
920                                 <li>
921                                     <a href="#" id="marcTagsSelect"><i class="fa fa-check-square-o"></i> Show tags</a>
922                                 </li>
923                             [% END %]
924                             <li class="dropdown-header">Change framework</li>
925                             <li>
926                                 <a href="#" class="change-framework" data-frameworkcode="">
927                                     [% IF ( frameworkcode ) %]
928                                        <i class="fa fa-fw">&nbsp;</i>
929                                     [% ELSE %]
930                                         <i class="fa fa-fw fa-check"></i>
931                                     [% END %]
932                                     Default
933                                 </a>
934                             </li>
935                             [% FOREACH framework IN frameworks%]
936                                 <li>
937                                     <a href="#" class="change-framework" data-frameworkcode="[% framework.frameworkcode | html %]">
938                                         [% IF framework.frameworkcode == frameworkcode %]
939                                             <i class="fa fa-fw fa-check"></i>
940                                         [% ELSE %]
941                                             <i class="fa fa-fw">&nbsp;</i>
942                                         [% END %]
943                                         [% framework.frameworktext | html %]
944                                     </a>
945                                 </li>
946                             [% END %]
947                         </ul> <!-- /#settings-menu -->
948                     </div> <!-- /.btn-group -->
949                     [% UNLESS (circborrowernumber) %][%# Hide in fast cataloging %]
950                         [% IF (biblionumber) %]
951                             <div class="btn-group">
952                                 <a href="[% PROCESS biblio_a_href biblionumber => biblionumber %]" class="btn btn-link" id="cancel">Cancel</a>
953                             </div>
954                         [% ELSE %]
955                             <div class="btn-group">
956                                 <a class="btn btn-link" id="cancel" href="/cgi-bin/koha/cataloguing/cataloging-home.pl">Cancel</a>
957                             </div>
958                         [% END %]
959                         <div id="show-errors" class="btn-group"></div>
960                     [% END # /UNLESS circborrowernumber %]
961                     <div class="toolbar-tabs-container">
962                         [% IF ( BIG_LOOP && BIG_LOOP.size > 1 ) %]
963                             <ul class="toolbar-tabs" role="tablist">
964                                 [%- FOREACH BIG_LOO IN BIG_LOOP -%]
965                                     [% IF loop.first %]
966                                         <li role="presentation" class="active selected">
967                                     [% ELSE %]
968                                         <li role="presentation">
969                                     [% END %]
970                                         <a data-tabid="[% BIG_LOO.number | html %]" href="#tab[% BIG_LOO.number | html %]XX" aria-controls="#tab[% BIG_LOO.number | html %]XX" role="tab" data-toggle="tab">[% BIG_LOO.number | html %]</a>
971                                     </li>
972                                 [%- END -%]
973                             </ul>
974                         [% END %]
975                         <ul class="tag_anchors_list">
976                             [% FOREACH BIG_LOO IN BIG_LOOP %]
977                                 [% IF loop.first %][% SET tab_selected = "tab_selected" %][% ELSE %][% SET tab_selected = "" %][% END %]
978                                 [% FOREACH innerloo IN BIG_LOO.innerloop %]
979                                     [% IF ( innerloo.tag ) %]
980                                         <li class="tag_anchors tag_anchors_[% BIG_LOO.number | html %] [% tab_selected | html %]">
981                                             <a class="tag_anchor" id="tag_anchor_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]" title="tag_anchor_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]" href="#div_indicator_tag_[% innerloo.tag | uri %]_[% innerloo.index | uri %][% innerloo.random | uri %]">[% innerloo.tag | uri %]</a>
982                                         </li>
983                                     [% END %]
984                                 [% END %]
985                             [% END %]
986                         </ul>
987                     </div>
988                 </div> <!-- /#toolbar.btn-toolbar -->
989
990                 [% IF bib_doesnt_exist %]
991                     <div class="dialog alert">
992                         The record you are trying to edit doesn't exist.<br>
993                         <a href="/cgi-bin/koha/cataloguing/addbiblio.pl?frameworkcode=">Add a new record</a> or <a href="/cgi-bin/koha/catalogue/search.pl">do a catalog search</a>.
994                     </div>
995                 [% END %]
996
997                 [% IF ( popup ) %]
998                         <input type="hidden" name="mode" value="popup" />
999                 [% END %]
1000                 <input type="hidden" name="op" value="addbiblio" />
1001                 <input type="hidden" id="frameworkcode" name="frameworkcode" value="[% frameworkcode | html %]" />
1002                 <input type="hidden" name="z3950" value="[% z3950 | html %]" />
1003                 <input type="hidden" name="biblionumber" value="[% biblionumber | html %]" />
1004                 <input type="hidden" name="breedingid" value="[% breedingid | html %]" />
1005                 <input type="hidden" name="changed_framework" value="" />
1006
1007                 <div id="addbibliotabs" class="toptabs numbered">
1008                     <div class="tab-content">
1009
1010                         [% FOREACH BIG_LOO IN BIG_LOOP %]
1011                             [% IF loop.first %]
1012                                 <div id="tab[% BIG_LOO.number | html %]XX" role="tabpanel" class="tab-pane active">
1013                             [% ELSE %]
1014                                 <div id="tab[% BIG_LOO.number | html %]XX" role="tabpanel" class="tab-pane">
1015                             [% END %]
1016
1017                                 [% IF ( BIG_LOOP.size > 1 ) %]
1018                                     <h3>Section [% BIG_LOO.number | html %]</h3>
1019                                 [% END %]
1020                                 [% previous = "" %]
1021                                 [% FOREACH innerloo IN BIG_LOO.innerloop %]
1022                                     [% IF ( innerloo.tag ) %]
1023                                     [% IF innerloo.tag != previous %]
1024                                         [% IF previous != "" %]
1025                                             </ul>
1026                                         [% END %]
1027                                         [% previous = innerloo.tag %]
1028                                         [% IF ( innerloo.repeatable ) %]
1029                                             <ul class="sortable_field">
1030                                         [% ELSE %]
1031                                             <ul>
1032                                         [% END %]
1033                                     [% END %]
1034                                         [% IF ( innerloo.repeatable ) %]
1035                                             <li class="tag sortable_tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1036                                         [% ELSE %]
1037                                             <li class="tag clearfix" id="tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1038                                         [% END %]
1039                                             <div class="tag_title" id="div_indicator_tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]">
1040                                                 [% IF advancedMARCEditor %]
1041                                                     <a href="#" tabindex="1" class="tagnum" title="[% innerloo.tag_lib | html %] - Click to expand this tag" onclick="ExpandField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;">[% innerloo.tag | html %]</a>
1042                                                 [% ELSE %]
1043                                                     <span class="tagnum" title="[% innerloo.tag_lib | html %]">[% innerloo.tag | html %]</span>
1044                                                     <a href="#" class="marcdocs" onclick="PopupMARCFieldDoc('[% innerloo.tag | html %]'); return false;">&nbsp;?</a>
1045                                                 [% END %]
1046
1047                                                 [% IF ( innerloo.fixedfield ) %]
1048                                                     <input type="text"
1049                                                         tabindex="1"
1050                                                         class="indicator flat"
1051                                                         style="display:none;"
1052                                                         name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1053                                                         size="1"
1054                                                         maxlength="1"
1055                                                         value="[% innerloo.indicator1 | html %]" />
1056                                                     <input type="text"
1057                                                         tabindex="1"
1058                                                         class="indicator flat"
1059                                                         style="display:none;"
1060                                                         name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1061                                                         size="1"
1062                                                         maxlength="1"
1063                                                         value="[% innerloo.indicator2 | html %]" />
1064                                                 [% ELSE %]
1065                                                     <input type="text"
1066                                                         tabindex="1"
1067                                                         class="indicator flat"
1068                                                         name="tag_[% innerloo.tag | html %]_indicator1_[% innerloo.index | html %][% innerloo.random | html %]"
1069                                                         size="1"
1070                                                         maxlength="1"
1071                                                         value="[% innerloo.indicator1 | html %]" />
1072                                                     <input type="text"
1073                                                         tabindex="1"
1074                                                         class="indicator flat"
1075                                                         name="tag_[% innerloo.tag | html %]_indicator2_[% innerloo.index | html %][% innerloo.random | html %]"
1076                                                         size="1"
1077                                                         maxlength="1"
1078                                                         value="[% innerloo.indicator2 | html %]" />
1079                                                 [% END # /IF innerloo.fixedfield %] -
1080
1081                                                 [% UNLESS advancedMARCEditor %]
1082                                                     <a href="#" tabindex="1" class="expandfield" onclick="ExpandField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Click to expand this tag">[% innerloo.tag_lib | html %]</a>
1083                                                 [% END %]
1084
1085                                                 <span class="field_controls">
1086                                                     [% IF ( innerloo.repeatable ) %]
1087                                                         <a href="#" tabindex="1" class="buttonPlus" onclick="CloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]','0','[% advancedMARCEditor | html %]'); return false;" title="Repeat this tag">
1088                                                             <img src="[% interface | html %]/[% theme | html %]/img/repeat-tag.png" alt="Repeat this tag" />
1089                                                         </a>
1090                                                     [% END %]
1091                                                     <a href="#" tabindex="1" class="buttonMinus" onclick="UnCloneField('tag_[% innerloo.tag | html %]_[% innerloo.index | html %][% innerloo.random | html %]'); return false;" title="Delete this tag">
1092                                                         <img src="[% interface | html %]/[% theme | html %]/img/delete-tag.png" alt="Delete this tag" />
1093                                                     </a>
1094                                                 </span> <!-- /.field_controls -->
1095                                             </div> <!-- /div.tag_title -->
1096
1097                                             <ul class="sortable_subfield">
1098                                             [% FOREACH subfield_loo IN innerloo.subfield_loop %]
1099                                                 <!--  One line on the marc editor -->
1100                                                 <li class="subfield_line" style="[% subfield_loo.visibility | html %]" id="subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]">
1101                                                     <div class="subfieldcode">
1102                                                         <input type="text"
1103                                                                 title="[% subfield_loo.marc_lib | $raw %]"
1104                                                                 style=" [% IF ( subfield_loo.fixedfield ) %]display:none; [% END %]border:0;"
1105                                                                 name="tag_[% subfield_loo.tag | html %]_code_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]"
1106                                                                 value="[% subfield_loo.subfield | html %]"
1107                                                                 size="1"
1108                                                                 maxlength="1"
1109                                                                 class="flat"
1110                                                                 tabindex="0" />
1111                                                     </div>
1112                                                     [% UNLESS advancedMARCEditor %]
1113                                                         [% IF ( subfield_loo.mandatory ) %]
1114                                                             <div class="subfield subfield_mandatory">
1115                                                         [% ELSIF ( subfield_loo.important ) %]
1116                                                             <div class="subfield subfield_important">
1117                                                         [% ELSE %]
1118                                                             <div class="subfield">
1119                                                         [% END %]
1120                                                             [% IF ( subfield_loo.fixedfield ) %]
1121                                                                 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" style="display:none;" class="labelsubfield">
1122                                                             [% ELSE %]
1123                                                                 <label for="tag_[% subfield_loo.tag | html %]_subfield_[% subfield_loo.subfield | html %]_[% subfield_loo.index | html %]_[% subfield_loo.index_subfield | html %]" class="labelsubfield">
1124                                                             [% END %]
1125                                                             [% subfield_loo.marc_lib | $raw %]
1126                                                             </label>
1127                                                         </div>
1128                                                     [% END %]
1129
1130                                                     [% SET mv = subfield_loo.marc_value %]
1131                                                     <div id="field_marceditor[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]" class="field_marceditor">
1132                                                         [% IF ( mv.type == 'text' ) %]
1133                                                             [% IF ( mv.readonly == 1 ) %]
1134                                                                 <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor readonly" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" readonly="readonly" />
1135                                                             [% ELSE %]
1136                                                                 <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" />
1137                                                             [% END %]
1138
1139                                                         [% ELSIF ( mv.type == 'text_complex' ) %]
1140                                                             <input type="text" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" value="[%- mv.value | html -%]" class="input_marceditor framework_plugin" tabindex="1" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" />
1141                                                             [% mv.javascript | $raw %]
1142                                                         [% ELSIF ( mv.type == 'hidden' ) %]
1143                                                             <input tabindex="1" type="hidden" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" size="[%- mv.size | html -%]" maxlength="[%- mv.maxlength | html -%]" value="[%- mv.value | html -%]" />
1144                                                         [% ELSIF ( mv.type == 'textarea' ) %]
1145                                                             <textarea cols="70" rows="4" id="[%- mv.id | html -%]" name="[%- mv.name | html -%]" class="input_marceditor" tabindex="1">[%- mv.value | html -%]</textarea>
1146                                                         [% ELSIF ( mv.type == 'select' ) %]
1147                                                         [% IF mv.category AND CAN_user_parameters_manage_auth_values %]
1148                                                             <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor" id="[%- mv.id | html -%]" data-category="[% mv.category | html %]">
1149                                                         [% ELSE %]
1150                                                             <select name="[%- mv.name | html -%]" tabindex="1" class="input_marceditor select2" id="[%- mv.id | html -%]">
1151                                                         [% END %]
1152                                                             [% FOREACH aval IN mv.values %]
1153                                                                 [% IF aval == mv.default %]
1154                                                                 <option value="[%- aval | html -%]" selected="selected">[%- mv.labels.$aval | html -%]</option>
1155                                                                 [% ELSE %]
1156                                                                 <option value="[%- aval | html -%]">[%- mv.labels.$aval | html -%]</option>
1157                                                                 [% END %]
1158                                                             [% END %]
1159                                                             </select>
1160                                                         [% END  # /IF (mv.type...) %]
1161                                                     </div>
1162                                                     [% IF ( subfield_loo.mandatory ) %]
1163                                                         <div class="subfield_loop_mandatory">
1164                                                             <span class="required">Required</span>
1165                                                         </div>
1166                                                     [% ELSIF ( subfield_loo.important ) %]
1167                                                         <div class="subfield_loop_mandatory">
1168                                                             <span class="important">Important</span>
1169                                                         </div>
1170                                                     [% END %]
1171                                                     <div class="subfield_controls">
1172                                                         [% IF ( mv.type == 'text' ) %]
1173                                                             [% IF ( mv.authtype ) %]
1174                                                                 <a href="#" class="buttonDot tag_editor" onclick="openAuth(this.parentNode.parentNode.getElementsByTagName('input')[1].id,'[%- mv.authtype | html -%]','biblio'); return false;" tabindex="1" title="Tag editor">Tag editor</a>
1175                                                             [% END %]
1176                                                         [% ELSIF ( mv.type == 'text_complex' ) %]
1177                                                                 [% IF mv.noclick %]
1178                                                                     <span class="buttonDot tag_editor disabled" tabindex="-1" title="Field autofilled by plugin"></span>
1179                                                                 [% ELSE %]
1180                                                                     [% IF mv.plugin == "upload.pl" %]
1181                                                                         <a href="#" id="buttonDot_[% mv.id | html %]" class="tag_editor upload framework_plugin" tabindex="1"><i class="fa fa-upload" aria-hidden="true"></i> Upload</a>
1182                                                                     [% ELSE %]
1183                                                                         <a href="#" id="buttonDot_[% mv.id | html %]" class="buttonDot tag_editor framework_plugin" tabindex="1" title="Tag editor">Tag editor</a>
1184                                                                     [% END %]
1185                                                                 [% END %]
1186                                                             </span>
1187                                                         [% END %]
1188                                                         [% IF ( subfield_loo.repeatable ) %]
1189                                                             <a href="#" class="buttonPlus" tabindex="1" onclick="CloneSubfield('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]','[% advancedMARCEditor | html %]'); return false;">
1190                                                                 <img src="[% interface | html %]/[% theme | html %]/img/clone-subfield.png" alt="Clone" title="Clone this subfield" />
1191                                                             </a>
1192                                                             <a href="#" class="buttonMinus" tabindex="1" onclick="UnCloneField('subfield[% subfield_loo.tag | html %][% subfield_loo.subfield | html %][% subfield_loo.random | html %]'); return false;">
1193                                                                 <img src="[% interface | html %]/[% theme | html %]/img/delete-subfield.png" alt="Delete" title="Delete this subfield" />
1194                                                             </a>
1195                                                         [% END %]
1196                                                     </div>
1197                                                 </li> <!-- /.subfield_line -->
1198                                                 <!-- End of the line -->
1199                                             [% END # /FOREACH subfield_loop %]
1200                                             </ul> <!--  /.sortable_subfield -->
1201                                         </li> <!-- /.tag.clearfix -->
1202                                     [% END %]<!-- if innerloo.tag -->
1203                                 [% END # /FOREACH BIG_LOO.innerloop %]
1204                                 </ul> <!--  /.sortable_field -->
1205                             </div> <!-- /#tabXXX -->
1206                         [% END # /FOREACH BIG_LOOP %]
1207                     </div> <!-- /.tab-content -->
1208                 </div><!-- /#addbibliotabs -->
1209
1210                 [%# Fields for fast cataloging %]
1211                 <input type="hidden" name="barcode" value="[% barcode | html %]" />
1212                 <input type="hidden" name="branch" value="[% branch | html %]" />
1213                 <input type="hidden" name="circborrowernumber" value="[% circborrowernumber | html %]" />
1214                 <input type="hidden" name="stickyduedate" value="[% stickyduedate | html %]" />
1215                 <input type="hidden" name="duedatespec" value="[% duedatespec | html %]" />
1216                 [%# End of fields for fast cataloging %]
1217             </form> <!-- /name=f -->
1218
1219             [% INCLUDE 'modals/cataloguing_create_av.inc' %]
1220
1221         </div> <!-- /.col-md-10.col-md-offset-1 -->
1222     </div> <!-- /.row -->
1223
1224 [% INCLUDE 'intranet-bottom.inc' %]