Bug 21526: Use the 'url' filter when needed
[koha.git] / koha-tmpl / intranet-tmpl / prog / en / modules / admin / matching-rules.tt
index 2bd8aaf..b84e2b5 100644 (file)
@@ -1,3 +1,6 @@
+[% USE raw %]
+[% USE Asset %]
+[% SET footerjs = 1 %]
 [% INCLUDE 'doc-head-open.inc' %]
 <title>Koha &rsaquo; Administration &rsaquo; Record matching rules
 [% IF ( matching_rule_form ) %]
   [% END %]
 [% END %]
 [% IF ( delete_matching_rule_form ) %]
-  &rsaquo; Confirm deletion of record matching rule &quot;[% code %]&quot;
+  &rsaquo; Confirm deletion of record matching rule &quot;[% code | html %]&quot;
 [% END %]
 </title>
 [% INCLUDE 'doc-head-close.inc' %]
 
-<script type="text/javascript">
-//<![CDATA[
-
-var maxMatchPoint = [% max_matchpoint %];
-var maxMatchCheck = [% max_matchcheck %];
-
-function InsertMatchpoint(loc, index) {
-    var original= $("#"+index);
-    var clone = original.clone();
-    clone.show();
-
-    // update IDs and form names
-    maxMatchPoint++;
-    clone.attr('id', 'mp_' + maxMatchPoint);
-    $("span.counter",clone).html(maxMatchPoint);
-    $("label",clone).each(function(){
-      var s = $(this).attr("for");
-        if (s.match(/mp_num/)) {
-            $(this).attr("for",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
-        }
-    });
-
-    $("div",clone).each(function(){
-      var s = $(this).attr("id");
-        if (s.match(/mp_num/)) {
-            $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
-        }
-    });
-    $("input",clone).each(function(){
-        var s = $(this).attr("id");
-        if(s.match(/mp_num/)){
-          $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
-        }
+[% BLOCK norms_text %]
+[%    SWITCH norm %]
+[%        CASE 'none'           %]None
+[%        CASE 'remove_spaces'  %]Remove spaces
+[%        CASE 'upper_case'     %]Uppercase
+[%        CASE 'lower_case'     %]Lowercase
+[%        CASE 'legacy_default' %]Legacy default
+[%        CASE %][% norm | html %]
+[%    END %]
+[% END %]
 
-        var s = $(this).attr("name");
-        if(s.match(/mp_num/)){
-          $(this).attr("name",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
-        }
-    });
-    $("#match_points").append(clone);
-}
-
-function InsertMatchcheck(loc, index) {
-    var original= $("#"+index);
-    var clone = original.clone();
-    clone.show();
-
-    // update IDs and form names
-    maxMatchCheck++;
-    clone.attr('id', 'mc_' + maxMatchCheck);
-    $("span.counter",clone).html(maxMatchCheck);
-    $("label",clone).each(function(){
-      var s = $(this).attr("for");
-        if (s.match(/mc_num/)) {
-            $(this).attr("for",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
-        }
-    });
+[% BLOCK norms_options %]
+[%# PARAMS: selected_norm %]
+[%    FOREACH norm IN valid_norms %]
+[%        IF ( norm == selected_norm ) %]
+        <option value="[% norm | html %]" selected="selected">[% PROCESS norms_text norm=norm %]</option>
+[%        ELSE %]
+        <option value="[% norm | html %]">[% PROCESS norms_text norm=norm %]</option>
+[%        END %]
+[%    END %]
+[% END %]
 
-    $("div",clone).each(function(){
-      var s = $(this).attr("id");
-        if (s.match(/mc_num/)) {
-            $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
-        }
-    });
-    $("input",clone).each(function(){
-        var s = $(this).attr("id");
-        if(s.match(/mc_num/)){
-          $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
-        }
+[% BLOCK norms_select %]
+[%# PARAMS: selected_norm, id, name %]
+[%    UNLESS valid_norms.grep(selected_norm).size %]
+[%#       Fallback to 'none' %]
+[% selected_norm = 'none' %]
+[%    END %]
+    <select id="[% id | html %]" name="[% name | html %]">
+[%    PROCESS norms_options selected_norm=selected_norm %]
+    </select>
+[% END %]
 
-        var s = $(this).attr("name");
-        if(s.match(/mc_num/)){
-          $(this).attr("name",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
-        }
-    });
-    $("#match_checks").append(clone);
-}
-
-function DeleteMatchpoint(loc) {
-    $(loc).parent().parent().parent().remove();
-    if($(".matchgroup",$("#match_points")).length == 0){
-      maxMatchPoint = 0;
-      $("#addMatchPoint").show();
-    }
-}
-
-function DeleteMatchcheck(loc) {
-    $(loc).parent().parent().parent().remove();
-    if($(".matchgroup",$("#match_checks")).length == 0){
-      maxMatchCheck = 0;
-      $("#addMatchCheck").show();
-    }
-}
-
-function DoCancel(f) {
-  f.op.value='';
-  document.Aform.submit();
-}
-
-function CheckMatchingRuleForm(f) {
-    var ok=1;
-    var _alertString="";
-    var alertString2;
-    if (f.code.value.length==0) {
-        _alertString += "\n- " + _("Matching rule code missing");
-    }
-    if (f.description.value.length==0) {
-        _alertString += "\n- " + _("Description missing");
-    }
-    if (f.threshold.value.length==0) {
-        _alertString += "\n- " + _("Threshold missing");
-    }
-    if (_alertString.length==0) {
-        document.Aform.submit();
-    } else {
-        alertString2  = _("Form not submitted because of the following problem(s)");
-        alertString2 += "\n------------------------------------------------------------------------------------\n";
-        alertString2 += _alertString;
-        alert(alertString2);
-    }
-}
-
-function CheckRuleForm(f) {
-    var ok=1;
-    var _alertString="";
-    var alertString2;
-    if (f.sort_rule.value.length==0) {
-        _alertString += "\n- " + _("Filing rule code missing");
-    }
-    if (f.description.value.length==0) {
-        _alertString += "\n- " + _("Description missing");
-    }
-    if (f.sort_routine.value.length==0) {
-        _alertString += "\n- " + _("Sort routine missing");
-    }
-    if (_alertString.length==0) {
-        document.Aform.submit();
-    } else {
-        alertString2  = _("Form not submitted because of the following problem(s)");
-        alertString2 += "\n------------------------------------------------------------------------------------\n";
-        alertString2 += _alertString;
-        alert(alertString2);
-    }
-}
-
-//]]>
-</script>
-<style type="text/css">
+<style>
   fieldset.rows fieldset.rows { border-width : 0; }
   fieldset.rows fieldset.rows fieldset.rows { border-width : 1px; }
   fieldset, fieldset.rows { width : 90%; padding: .3em .6em .3em .6em; }
@@ -170,7 +59,7 @@ function CheckRuleForm(f) {
 </head>
 <body id="admin_matching-rules" class="admin">
 [% INCLUDE 'header.inc' %]
-[% INCLUDE 'cat-search.inc' %]
+[% INCLUDE 'prefs-admin-search.inc' %]
 
 <div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF ( display_list ) %]Record matching rules[% ELSE %]<a href="/cgi-bin/koha/admin/matching-rules.pl">Record matching rules</a>[% END %]
 [% IF ( matching_rule_form ) %]
@@ -181,15 +70,14 @@ function CheckRuleForm(f) {
   [% END %]
 [% END %]
 [% IF ( delete_matching_rule_form ) %]
-  &rsaquo; Confirm deletion of record matching rule &quot;[% code %]&quot;
+  &rsaquo; Confirm deletion of record matching rule &quot;[% code | html %]&quot;
 [% END %]
 </div>
 
-<div id="doc3" class="yui-t2">
-
-   <div id="bd">
-    <div id="yui-main">
-    <div class="yui-b">
+<div class="main container-fluid">
+    <div class="row">
+        <div class="col-sm-10 col-sm-push-2">
+            <main>
 
 [% IF ( matching_rule_form ) %]
   [% IF ( edit_matching_rule ) %]
@@ -197,16 +85,16 @@ function CheckRuleForm(f) {
   [% ELSE %]
 <h2>Add record matching rule</h2>
   [% END %]
-<form action="[% script_name %]" name="Aform" method="post">
-  <input type="hidden" name="op" value="[% confirm_op %]" />
+<form action="[% script_name | html %]" name="Aform" method="post">
+  <input type="hidden" name="op" value="[% confirm_op | html %]" />
   <fieldset class="rows">
     <ol>
       <li>
           [% IF ( edit_matching_rule ) %]
                  <span class="label">Matching rule code: </span>
-            <input type="hidden" name="matcher_id" value="[% matcher_id %]" />
-            <input type="hidden" name="code" value="[% code %]" />
-            [% code %]
+            <input type="hidden" name="matcher_id" value="[% matcher_id | html %]" />
+            <input type="hidden" name="code" value="[% code | html %]" />
+            [% code | html %]
           [% ELSE %]
                  <label for="code" class="required">Matching rule code: </label>
             <input type="text" id="code" name="code"  size="10" maxlength="10" /> <span class="required">Required</span>
@@ -214,11 +102,11 @@ function CheckRuleForm(f) {
        </li>
        <li><label for="description" class="required">Description: </label>
            <input type="text" id="description" name="description" size="50" maxlength="250" 
-                  value="[% description |html %]" /> <span class="required">Required</span>
+                  value="[% description | html %]" /> <span class="required">Required</span>
        </li>
        <li><label for="threshold" class="required">Match threshold: </label>
            <input type="text" id="threshold" name="threshold" size="5" maxlength="5" 
-                  value="[% threshold |html %]" /> <span class="required">Required</span>
+                  value="[% threshold | html %]" /> <span class="required">Required</span>
        </li>
        <li><label for="record_type" class="required">Record type: </label>
            <select id="record_type" name="record_type">
@@ -241,64 +129,62 @@ function CheckRuleForm(f) {
   [% ELSE %]<p id="addMatchPoint" style="display:none;"><a href="#" class="button" onclick="InsertMatchpoint('mp_1', 'mp_template'); return false;">Add match point</a></p>[% END %]
   [% IF ( edit_matching_rule ) %]
   [% FOREACH matchpoint IN matchpoints %]
-  <div id="mp_[% matchpoint.mp_num %]" class="matchgroup">
+  <div id="mp_[% matchpoint.mp_num | html %]" class="matchgroup">
   <fieldset class="rows">
-    <legend>Match point [% matchpoint.mp_num %] | <a href="#" class="button" onclick="InsertMatchpoint('mp_[% matchpoint.mp_num %]', 'mp_template'); return false;">Add match point</a> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
+    <legend>Match point [% matchpoint.mp_num | html %] | <a href="#" class="button" onclick="InsertMatchpoint('mp_[% matchpoint.mp_num | html %]', 'mp_template'); return false;">Add match point</a> | <a href="#" class="button" onclick="DeleteMatchpoint(this); return false;">Remove this match point</a></legend>
     <ol>
       <li>
-        <label for="mp_[% matchpoint.mp_num %]_search_index">Search index: </label>
-        <input type ="text" id="mp_[% matchpoint.mp_num %]_search_index" 
-               name="mp_[% matchpoint.mp_num %]_search_index" size="20" 
-               value="[% matchpoint.index |html %]"
+        <label for="mp_[% matchpoint.mp_num | html %]_search_index">Search index: </label>
+        <input type ="text" id="mp_[% matchpoint.mp_num | html %]_search_index" 
+               name="mp_[% matchpoint.mp_num | html %]_search_index" size="20" 
+               value="[% matchpoint.index | html %]"
           maxlength="30" />
       </li>
       <li>
-        <label for="mp_[% matchpoint.mp_num %]_score">Score: </label>
-        <input type ="text" id="mp_[% matchpoint.mp_num %]_score" 
-               name="mp_[% matchpoint.mp_num %]_score" size="5"
-               value="[% matchpoint.score |html %]" 
+        <label for="mp_[% matchpoint.mp_num | html %]_score">Score: </label>
+        <input type ="text" id="mp_[% matchpoint.mp_num | html %]_score" 
+               name="mp_[% matchpoint.mp_num | html %]_score" size="5"
+               value="[% matchpoint.score | html %]"
                maxlength="5" />
       </li>
       </ol>
       [% FOREACH component IN matchpoint.components %]
-      <fieldset class="rows" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]">
+      <fieldset class="rows" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]">
       <legend>Matchpoint components</legend>
         <ol>
           <li>
-            <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag">Tag: </label>
-            <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag" 
-                   name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_tag" 
-                   value="[% component.tag |html %]"
+            <label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag">Tag: </label>
+            <input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag" 
+                   name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_tag" 
+                   value="[% component.tag | html %]"
                    size="3" maxlength="3" />
           </li>
           <li>
-            <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields">Subfields: </label>
-            <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields" 
-                   name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_subfields" 
-                   value="[% component.subfields |html %]"
+            <label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields">Subfields: </label>
+            <input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields" 
+                   name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_subfields" 
+                   value="[% component.subfields | html %]"
                    size="10" maxlength="40" />
           </li>
           <li>
-            <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset">Offset: </label>
-            <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset" 
-                   name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_offset" 
-                   value="[% component.offset |html %]"
+            <label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset">Offset: </label>
+            <input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset" 
+                   name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_offset" 
+                   value="[% component.offset | html %]"
                    size="5" maxlength="5" />
           </li>
           <li>
-            <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length">Length: </label>
-            <input type="text" id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length" 
-                   name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_length" 
-                   value="[% component.length |html %]"
+            <label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length">Length: </label>
+            <input type="text" id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length" 
+                   name="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_length" 
+                   value="[% component.length | html %]"
                    size="5" maxlength="5" />
           </li>
               [% FOREACH norm IN component.norms %]
-              <li id="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_n_[% norm.norm_num %]">
-                <label for="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_n__[% norm.norm_num %]_norm">Normalization rule: </label>
-                <input type="text" id="mp_[% norm.mp_num %]_c_[% component.comp_num %]_n__[% norm.norm_num %]_norm" 
-                       name="mp_[% matchpoint.mp_num %]_c_[% component.comp_num %]_n_[% norm.norm_num %]_norm" 
-                       value="[% norm.norm |html %]"
-                       size="20" maxlength="50" />
+              <li id="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_n_[% norm.norm_num | html %]">
+                <label for="mp_[% matchpoint.mp_num | html %]_c_[% component.comp_num | html %]_n__[% norm.norm_num | html %]_norm">Normalization rule: </label>
+                [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
+                [% PROCESS norms_select selected_norm=norm.norm id="mp_${norm.mp_num}_c_${component.comp_num}_n__${norm.norm_num}_norm" name="mp_${matchpoint.mp_num}_c_${component.comp_num}_n_${norm.norm_num}_norm" %]
               </li>
               [% END %]
         </ol>
@@ -346,7 +232,7 @@ function CheckRuleForm(f) {
           </li>
             <li id="mp_1_c_1_n_1">
               <label for="mp_1_c_1_n_1_norm">Normalization rule: </label>
-              <input type="text" id="mp_1_c_1_n_1_norm" name="mp_1_c_1_n_1_norm" size="20" maxlength="50" />
+                [% PROCESS norms_select selected_norm="none" id="mp_1_c_1_n_1_norm" name="mp_1_c_1_n_1_norm" %]
             </li>
         </ol>
     </fieldset>
@@ -364,98 +250,97 @@ function CheckRuleForm(f) {
   [% ELSE %]<p id="addMatchCheck" style="display:none;"><a href="#" class="button" onclick="InsertMatchcheck('mc_1', 'mc_template'); return false;">Add match check</a></p>[% END %]
   [% IF ( edit_matching_rule ) %]
   [% FOREACH matchcheck IN matchchecks %]
-  <fieldset class="rows" id="mc_[% matchcheck.mc_num %]">
-    <legend>Match check [% matchcheck.mc_num %]<a href="#" class="button" onclick="InsertMatchcheck('mc_[% matchcheck.mc_num %]', 'mc_template'); return false;">Add match check</a> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
-    <input type="hidden" id="mc_[% matchcheck.mc_num %]_id" name="mc_[% matchcheck.mc_num %]_id" value="1" />
+  <div id="mc_[% matchcheck.mc_num | html %]" class="matchgroup">
+  <fieldset class="rows">
+    <legend>Match check [% matchcheck.mc_num | html %]<a href="#" class="button" onclick="InsertMatchcheck('mc_[% matchcheck.mc_num | html %]', 'mc_template'); return false;">Add match check</a> | <a href="#" class="button" onclick="DeleteMatchcheck(this); return false;">Remove this match check</a></legend>
+    <input type="hidden" id="mc_[% matchcheck.mc_num | html %]_id" name="mc_[% matchcheck.mc_num | html %]_id" value="1" />
       [% FOREACH src_component IN matchcheck.src_components %]
-      <fieldset class="rows" id="mc_[% src_component.mc_num %]_src_c_[% src_component.comp_num %]">
+      <fieldset class="rows" id="mc_[% src_component.mc_num | html %]_src_c_[% src_component.comp_num | html %]">
         <legend>Source (incoming) record check field</legend>
         <ol>
           <li>
-            <label for="mc_[% src_component.mc_num %]_src_c_[% src_component.comp_num %]_tag">Tag: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_tag" 
-                   name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_tag" 
-                   value="[% src_component.tag |html %]"
+            <label for="mc_[% src_component.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag">Tag: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag" 
+                   name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_tag" 
+                   value="[% src_component.tag | html %]"
                    size="3" maxlength="3" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields">Subfields: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields" 
-                   name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_subfields" 
-                   value="[% src_component.subfields |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields">Subfields: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields" 
+                   name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_subfields" 
+                   value="[% src_component.subfields | html %]"
                    size="10" maxlength="40" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset">Offset: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset" 
-                   name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_offset" 
-                   value="[% src_component.offset |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset">Offset: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset" 
+                   name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_offset" 
+                   value="[% src_component.offset | html %]"
                    size="5" maxlength="5" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length">Length: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length" 
-                   name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_length" 
-                   value="[% src_component.length |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length">Length: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length" 
+                   name="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_length" 
+                   value="[% src_component.length | html %]"
                    size="5" maxlength="5" />
           </li>
           [% FOREACH norm IN src_component.norms %]
-            <li id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]">
-              <label for="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]_norm">Normalization rule: </label>
-              <input type="text" id="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]_norm" 
-                     name="mc_[% matchcheck.mc_num %]_src_c_[% src_component.comp_num %]_n_[% norm.norm_num %]_norm" 
-                    value="[% norm.norm |html %]"
-                    size="20" maxlength="50" />
+            <li id="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_n_[% norm.norm_num | html %]">
+              <label for="mc_[% matchcheck.mc_num | html %]_src_c_[% src_component.comp_num | html %]_n_[% norm.norm_num | html %]_norm">Normalization rule: </label>
+                [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
+                [% PROCESS norms_select selected_norm=norm.norm id="mc_${matchcheck.mc_num}_src_c_${src_component.comp_num}_n_${norm.norm_num}_norm" name="mc_${matchcheck.mc_num}_src_c_${src_component.comp_num}_n_${norm.norm_num}_norm" %]
             </li>
           [% END %]
         </ol>
       </fieldset>
       [% END %]
       [% FOREACH tgt_component IN matchcheck.tgt_components %]
-      <fieldset class="rows" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]">
+      <fieldset class="rows" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]">
         <legend>Target (database) record check field</legend>
         <ol>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag">Tag: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag" 
-                   name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_tag" 
-                   value="[% tgt_component.tag |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag">Tag: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag" 
+                   name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_tag" 
+                   value="[% tgt_component.tag | html %]"
                    size="3" maxlength="3" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields">Subfields: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields" 
-                   name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_subfields" 
-                   value="[% tgt_component.subfields |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields">Subfields: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields" 
+                   name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_subfields" 
+                   value="[% tgt_component.subfields | html %]"
                    size="10" maxlength="40" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset">Offset: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset" 
-                   name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_offset" 
-                   value="[% tgt_component.offset |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset">Offset: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset" 
+                   name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_offset" 
+                   value="[% tgt_component.offset | html %]"
                    size="5" maxlength="5" />
           </li>
           <li>
-            <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length">Length: </label>
-            <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length" 
-                   name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_length" 
-                   value="[% tgt_component.length |html %]"
+            <label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length">Length: </label>
+            <input type="text" id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length" 
+                   name="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_length" 
+                   value="[% tgt_component.length | html %]"
                    size="5" maxlength="5" />
           </li>
           [% FOREACH norm IN tgt_component.norms %]
-            <li id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]">
-              <label for="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]_norm">Normalization rule: </label>
-              <input type="text" id="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]_norm" 
-                     name="mc_[% matchcheck.mc_num %]_tgt_c_[% tgt_component.comp_num %]_n_[% norm.norm_num %]_norm" 
-                    value="[% norm.norm |html %]"
-                    size="20" maxlength="50" />
+            <li id="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_n_[% norm.norm_num | html %]">
+              <label for="mc_[% matchcheck.mc_num | html %]_tgt_c_[% tgt_component.comp_num | html %]_n_[% norm.norm_num | html %]_norm">Normalization rule: </label>
+                [%# Note: Following directive in one line, otherwise we have translatabiltiy problems %]
+                [% PROCESS norms_select selected_norm=norm.norm id="mc_${matchcheck.mc_num}_tgt_c_${tgt_component.comp_num}_n_${norm.norm_num}_norm" name="mc_${matchcheck.mc_num}_tgt_c_${tgt_component.comp_num}_n_${norm.norm_num}_norm" %]
             </li>
           [% END %]
         </ol>
       </fieldset>
       [% END %]
   </fieldset>
+  <br style="clear:both;" />
+  </div>
   [% END %]
   [% ELSE %]
   <div id="mc_1" class="matchgroup">
@@ -483,7 +368,7 @@ function CheckRuleForm(f) {
           </li>
             <li id="mc_1_src_c_1_n_1">
               <label for="mc_1_src_c_1_n_1_norm">Normalization rule: </label>
-              <input type="text" id="mc_1_src_c_1_n_1_norm" name="mc_1_src_c_1_n_1_norm" size="20" maxlength="50" />
+                [% PROCESS norms_select selected_norm="none" id="mc_1_src_c_1_n_1_norm" name="mc_1_src_c_1_n_1_norm" %]
             </li>
         </ol>
       </fieldset>
@@ -509,7 +394,7 @@ function CheckRuleForm(f) {
           </li>
             <li id="mc_1_tgt_c_1_n_1">
               <label for="mc_1_tgt_c_1_n_1_norm">Normalization rule: </label>
-              <input type="text" id="mc_1_tgt_c_1_n_1_norm" name="mc_1_tgt_c_1_n_1_norm" size="20" maxlength="50" />
+                [% PROCESS norms_select selected_norm="none" id="mc_1_tgt_c_1_n_1_norm" name="mc_1_tgt_c_1_n_1_norm" %]
             </li>
         </ol>
       </fieldset>
@@ -532,43 +417,34 @@ function CheckRuleForm(f) {
 [% END %]
 
 [% IF ( delete_matching_rule_form ) %]
-<div class="dialog alert"><h3>Confirm deletion of record matching rule <span class="ex">'[% code %]' ([% description %])</span>?</h3>
-<form action="[% script_name %]" name="Aform" method="post">
-  <input type="hidden" name="op" value="[% confirm_op %]" />
-  <input type="hidden" name="matcher_id" value="[% matcher_id %]" />
-    <input type="submit" value="Delete record matching rule" class="approve" /></form>
-       <form action="[% script_name %]" method="get">
-    <input type="submit" value="No, Do Not Delete" class="deny" />
-</form></div>
+    <div class="dialog alert">
+        <h3>Confirm deletion of record matching rule <span class="ex">'[% code | html %]' ([% description | html %])</span>?</h3>
+        <form action="[% script_name | html %]" name="Aform" method="post">
+            <input type="hidden" name="op" value="[% confirm_op | html %]" />
+            <input type="hidden" name="matcher_id" value="[% matcher_id | html %]" />
+            <button type="submit" class="approve"><i class="fa fa-fw fa-check"></i> Yes, delete record matching rule</button>
+        </form>
+        <form action="[% script_name | html %]" method="get">
+            <button type="submit" class="deny"><i class="fa fa-fw fa-remove"></i> No, do not delete</button>
+        </form>
+    </div>
 [% END %]
 
 [% IF ( display_list ) %]
 
-<div id="toolbar">
-       <script type="text/javascript">
-       //<![CDATA[
-       // prepare DOM for YUI Toolbar
-        $(document).ready(function() {
-           yuiToolbar();
-        });
-       // YUI Toolbar Functions
-       function yuiToolbar() {
-           new YAHOO.widget.Button("newrule");
-       }       //]]>
-       </script>
-       <ul class="toolbar">
-    <li><a id="newrule" href="[% script_name %]?op=add_matching_rule">New record matching rule</a></li>
-</ul></div>
+<div id="toolbar" class="btn-toolbar">
+    <a class="btn btn-default btn-sm" id="newrule" href="[% script_name | url %]?op=add_matching_rule"><i class="fa fa-plus"></i> New record matching rule</a>
+</div>
 
 <h2>Record matching rules</h2>
 [% IF ( added_matching_rule ) %]
-<div class="dialog message">Added record matching rule &quot;[% added_matching_rule %]&quot;</div>
+<div class="dialog message">Added record matching rule &quot;[% added_matching_rule | html %]&quot;</div>
 [% END %]
 [% IF ( edited_matching_rule ) %]
-<div class="dialog message">Modified record matching rule &quot;[% edited_matching_rule %]&quot;</div>
+<div class="dialog message">Modified record matching rule &quot;[% edited_matching_rule | html %]&quot;</div>
 [% END %]
 [% IF ( deleted_matching_rule ) %]
-<div class="dialog message">Deleted record matching rule &quot;[% deleted_matching_rule %]&quot;</div>
+<div class="dialog message">Deleted record matching rule &quot;[% deleted_matching_rule | html %]&quot;</div>
 [% END %]
 [% IF ( available_matching_rules ) %]<table>
   <tr>
@@ -579,18 +455,18 @@ function CheckRuleForm(f) {
   </tr>
   [% FOREACH available_matching_rule IN available_matching_rules %]
   <tr>
-    <td>[% available_matching_rule.matcher_id %]</td>
-    <td>[% available_matching_rule.code %]</td>
-    <td>[% available_matching_rule.description %]</td>
-    <td>
-      <a href="[% available_matching_rule.script_name %]?op=edit_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id |html %]">Edit</a>
-      <a href="[% available_matching_rule.script_name %]?op=delete_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id |html %]">Delete</a>
+    <td>[% available_matching_rule.matcher_id | html %]</td>
+    <td>[% available_matching_rule.code | html %]</td>
+    <td>[% available_matching_rule.description | html %]</td>
+    <td class="actions">
+      <a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name | url %]?op=edit_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id | uri %]"><i class="fa fa-pencil"></i> Edit</a>
+      <a class="btn btn-default btn-xs" href="[% available_matching_rule.script_name | url %]?op=delete_matching_rule&amp;matcher_id=[% available_matching_rule.matcher_id | uri %]"><i class="fa fa-trash"></i> Delete</a>
     </td>
   </tr>
   [% END %]
 </table>[% ELSE %]<p>There are no saved matching rules.</p>[% END %]
 
-<div class="pages">[% pagination_bar %]</div>
+<div class="pages">[% pagination_bar | $raw %]</div>
 
 [% END %]
  [% IF ( matching_rule_form ) %]
@@ -629,7 +505,7 @@ function CheckRuleForm(f) {
           </li>
             <li id="mp_num_c_1_n_1">
               <label for="mp_num_c_1_n_1_norm">Normalization rule: </label>
-              <input type="text" id="mp_num_c_1_n_1_norm" name="mp_num_c_1_n_1_norm" size="20" maxlength="50" />
+                [% PROCESS norms_select selected_norm="none" id="mp_num_c_1_n_1_norm" name="mp_num_c_1_n_1_norm" %]
             </li>
         </ol>
       </fieldset>
@@ -662,7 +538,7 @@ function CheckRuleForm(f) {
         </li>
           <li id="mc_num_src_c_1_n_1">
             <label for="mc_num_src_c_1_n_1_norm">Normalization rule: </label>
-            <input type="text" id="mc_num_src_c_1_n_1_norm" name="mc_num_src_c_1_n_1_norm" size="20" maxlength="50" />
+               [% PROCESS norms_select selected_norm="none" id="mc_num_src_c_1_n_1_norm" name="mc_num_src_c_1_n_1_norm" %]
           </li>
       </ol>
     </fieldset>
@@ -687,7 +563,7 @@ function CheckRuleForm(f) {
         </li>
           <li id="mc_num_tgt_c_1_n_1">
             <label for="mc_num_tgt_c_1_n_1_norm">Normalization rule: </label>
-            <input type="text" id="mc_num_tgt_c_1_n_1_norm" name="mc_num_tgt_c_1_n_1_norm" size="20" maxlength="50" />
+               [% PROCESS norms_select selected_norm="none" id="mc_num_tgt_c_1_n_1_norm" name="mc_num_tgt_c_1_n_1_norm" %]
           </li>
       </ol>
     </fieldset>
@@ -696,10 +572,160 @@ function CheckRuleForm(f) {
 </div>
 [% END %]
 
-</div>
-</div>
-<div class="yui-b">
-[% INCLUDE 'admin-menu.inc' %]
-</div>
-</div>
+            </main>
+        </div> <!-- /.col-sm-10.col-sm-push-2 -->
+
+        <div class="col-sm-2 col-sm-pull-10">
+            <aside>
+                [% INCLUDE 'admin-menu.inc' %]
+            </aside>
+        </div> <!-- /.col-sm-2.col-sm-pull-10 -->
+     </div> <!-- /.row -->
+
+[% MACRO jsinclude BLOCK %]
+    [% Asset.js("js/admin-menu.js") | $raw %]
+    <script>
+        var maxMatchPoint = [% max_matchpoint | html %];
+        var maxMatchCheck = [% max_matchcheck | html %];
+
+        function InsertMatchpoint(loc, index) {
+            var original= $("#"+index);
+            var clone = original.clone();
+            clone.show();
+
+            // update IDs and form names
+            maxMatchPoint++;
+            clone.attr('id', 'mp_' + maxMatchPoint);
+            $("span.counter",clone).html(maxMatchPoint);
+            $("label",clone).each(function(){
+              var s = $(this).attr("for");
+                if (s.match(/mp_num/)) {
+                    $(this).attr("for",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
+                }
+            });
+
+            $("div",clone).each(function(){
+              var s = $(this).attr("id");
+                if (s.match(/mp_num/)) {
+                    $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
+                }
+            });
+            $("input",clone).each(function(){
+                var s = $(this).attr("id");
+                if(s.match(/mp_num/)){
+                  $(this).attr("id",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
+                }
+
+                var s = $(this).attr("name");
+                if(s.match(/mp_num/)){
+                  $(this).attr("name",s.replace(/mp_num/, 'mp_' + maxMatchPoint));
+                }
+            });
+            $("#match_points").append(clone);
+        }
+
+        function InsertMatchcheck(loc, index) {
+            var original= $("#"+index);
+            var clone = original.clone();
+            clone.show();
+
+            // update IDs and form names
+            maxMatchCheck++;
+            clone.attr('id', 'mc_' + maxMatchCheck);
+            $("span.counter",clone).html(maxMatchCheck);
+            $("label",clone).each(function(){
+              var s = $(this).attr("for");
+                if (s.match(/mc_num/)) {
+                    $(this).attr("for",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
+                }
+            });
+
+            $("div",clone).each(function(){
+              var s = $(this).attr("id");
+                if (s.match(/mc_num/)) {
+                    $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
+                }
+            });
+            $("input",clone).each(function(){
+                var s = $(this).attr("id");
+                if(s.match(/mc_num/)){
+                  $(this).attr("id",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
+                }
+
+                var s = $(this).attr("name");
+                if(s.match(/mc_num/)){
+                  $(this).attr("name",s.replace(/mc_num/, 'mc_' + maxMatchCheck));
+                }
+            });
+            $("#match_checks").append(clone);
+        }
+
+        function DeleteMatchpoint(loc) {
+            $(loc).parent().parent().parent().remove();
+            if($(".matchgroup",$("#match_points")).length == 0){
+              maxMatchPoint = 0;
+              $("#addMatchPoint").show();
+            }
+        }
+
+        function DeleteMatchcheck(loc) {
+            $(loc).parent().parent().parent().remove();
+            if($(".matchgroup",$("#match_checks")).length == 0){
+              maxMatchCheck = 0;
+              $("#addMatchCheck").show();
+            }
+        }
+
+        function DoCancel(f) {
+          f.op.value='';
+          document.Aform.submit();
+        }
+
+        function CheckMatchingRuleForm(f) {
+            var ok=1;
+            var _alertString="";
+            var alertString2;
+            if (f.code.value.length==0) {
+                _alertString += "\n- " + _("Matching rule code missing");
+            }
+            if (f.description.value.length==0) {
+                _alertString += "\n- " + _("Description missing");
+            }
+            if (f.threshold.value.length==0) {
+                _alertString += "\n- " + _("Threshold missing");
+            }
+            if (_alertString.length==0) {
+                document.Aform.submit();
+            } else {
+                alertString2  = _("Form not submitted because of the following problem(s)");
+                alertString2 += "\n------------------------------------------------------------------------------------\n";
+                alertString2 += _alertString;
+                alert(alertString2);
+            }
+        }
+
+        function CheckRuleForm(f) {
+            var ok=1;
+            var _alertString="";
+            var alertString2;
+            if (f.sort_rule.value.length==0) {
+                _alertString += "\n- " + _("Filing rule code missing");
+            }
+            if (f.description.value.length==0) {
+                _alertString += "\n- " + _("Description missing");
+            }
+            if (f.sort_routine.value.length==0) {
+                _alertString += "\n- " + _("Sort routine missing");
+            }
+            if (_alertString.length==0) {
+                document.Aform.submit();
+            } else {
+                alertString2  = _("Form not submitted because of the following problem(s)");
+                alertString2 += "\n------------------------------------------------------------------------------------\n";
+                alertString2 += _alertString;
+                alert(alertString2);
+            }
+        }
+    </script>
+[% END %]
 [% INCLUDE 'intranet-bottom.inc' %]