Add SM2 panels - WIP

This commit is contained in:
2025-05-22 07:12:28 +01:00
parent a81ae5e470
commit e57170ba11
16 changed files with 2286 additions and 556 deletions

View File

@@ -0,0 +1,73 @@
%#
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
%#
<div id="Shares-LIST" class="partial Shares-LIST">
%# <script>
%# window.onload = function() {
%# SelectInput();
%# };
%# </script>
% if (config->{debug} == 1) {
<pre>
%= dumper $sf_data
</pre>
% }
% my $btn = l('sf_APPLY');
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
%= form_for "sharesu" => (method => 'POST') => begin
% param 'trt' => $sf_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $sf_data->{trt}
%# Inputs etc in here.
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
<h2 class='subh'><%=l('sf_Manage_shared-folders_settings:')%></h2>
<p class='paragraph para1'>
%=l('sf_You_can_remove_any_shared')
</p>
<!--
<p class='paragraph para2'>
%=l('sf_Create_a_new_shared_folder')
</p>
-->
<br />
<div class = 'inline-buttons'>
<a href='sharesd?trt=MODIFY' class='link link1'>
%= l('sf_Create_a_new_shared_folder')
</a>
</div>
<br /><table class="sme-border TableSort sme-table tabl1 ">
<thead class='tabl1'>
<tr table-head-row>
<th class='sme-border table-head-col table-head-col-Name '><%=l('sf_Name')%></th>
<th class='sme-border table-head-col table-head-col-Description '><%=l('sf_Description')%></th>
<th class='sme-border table-head-col table-head-col-Actionp '><%=l('sf_Actionp')%></th>
<th class='sme-border table-head-col table-head-col-Actionm '><%=l('sf_Actionm')%></th>
<th class='sme-border table-head-col table-head-col-Actionr '><%=l('sf_Actionr')%></th>
</tr>
</thead>
<tbody class='tabl1'>
% my $control_data = $c->stash('Table1');
% foreach my $row (@$control_data) {
<tr class='table-row'>
<td class='sme-border table-col table-col-Table1_Name'><%=$c->render_to_string(inline=>$row->{'Table1_Name'})%></td>
<td class='sme-border table-col table-col-Table1_Description'><%=$c->render_to_string(inline=>$row->{'Table1_Description'})%></td>
<td class='sme-border table-col table-col-Table1_Actionp'><%=$c->render_to_string(inline=>$row->{'Table1_Actionp'})%></td>
<td class='sme-border table-col table-col-Table1_Actionm'><%=$c->render_to_string(inline=>$row->{'Table1_Actionm'})%></td>
<td class='sme-border table-col table-col-Table1_Actionr'><%=$c->render_to_string(inline=>$row->{'Table1_Actionr'})%></td>
</tr>
%}
</tbody>
</table>
%# Probably finally by a submit.
%end
</div>

View File

@@ -0,0 +1,130 @@
%#
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
%#
<div id="Shares-MODIFY" class="partial Shares-MODIFY">
%# <script>
%# window.onload = function() {
%# SelectInput();
%# };
%# </script>
% if (config->{debug} == 1) {
<pre>
%= dumper $sf_data
</pre>
% }
% my $btn = l('sf_APPLY');
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
%= form_for "sharesu" => (method => 'POST') => begin
% param 'trt' => $sf_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $sf_data->{trt}
%# Inputs etc in here.
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
<h2 class='subh'><%=l('sf_Create_or_modify_a_shared')%></h2>
% if ($sf_data->{name} eq ""){
<p><span class=label>
%=l('sf_name')
</span><span class=data>
% param 'name' => $sf_data->{name} unless param 'name';
%= text_field 'name', size => '50', class => 'textinput name' , pattern=>'.*' , placeholder=>'name', title =>'Pattern regex mismatch', id => 'name_text'
<br></span></p>
% } else {
<p><span class=label>
%=l('sf_name')
</span><span class=data>
% param 'name' => $sf_data->{name} unless param 'name';
%= text_field 'name', size => '50', class => 'textinput name' , pattern=>'.*' , placeholder=>'name', title =>'Pattern regex mismatch', id => 'name_text', readonly => 1
<br></span></p>
% }
<p><span class=label>
%=l('sf_description')
</span><span class=data>
% param 'description' => $sf_data->{description} unless param 'description';
%= text_field 'description', size => '50', class => 'textinput description' , pattern=>'.*' , placeholder=>'description', title =>'Pattern regex mismatch', id => 'description_text'
<br></span></p>
<p class='paragraph para14'>
%=l('sf_The_following_settings_control_the')
</p>
<p><span class=label>
%=l('sf_smbaccess')
</span><span class=data>
% my @smbaccess_options = [['Enabled, browseable' => 'browseable'], ['Enabled, hidden' => 'non-browseable'], ['No access' => 'none']];
% param 'smbaccess' => $sf_data->{smbaccess} unless param 'smbaccess';
%= select_field 'smbaccess' => @smbaccess_options, class => 'input', id => 'smbaccess_select'
<br></span> </p>
<p><span class=label>
%=l('sf_recyclebin')
</span><span class=data>
% my @recyclebin_options = [['disabled' => 'disabled'], ['Enabled, keep only the latest version' => 'enabled'], ['Enabled, keep a copy of all versions' => 'keep-versions']];
% param 'recyclebin' => $sf_data->{recyclebin} unless param 'recyclebin';
%= select_field 'recyclebin' => @recyclebin_options, class => 'input', id => 'recyclebin_select'
<br></span> </p>
<p><span class=label>
%=l('sf_retention')
</span><span class=data>
% my @retention_options = [['one month' => '30'], ['one week' => '7'], ['one year' => '365'], ['six months' => '180'], ['unlimited' => 'unlimited']];
% param 'retention' => $sf_data->{retention} unless param 'retention';
%= select_field 'retention' => @retention_options, class => 'input', id => 'retention_select'
<br></span> </p>
<p class='paragraph para2'>
%=l('sf_The_following_settings_control_the')
</p>
<p><span class=label>
%=l('sf_httpaccess')
</span><span class=data>
% my @httpaccess_options = [['Entire Internet (no password required)' => 'global'], ['Entire Internet (password required)' => 'global-pw'], ['Entire Internet (password required outside local network)' => 'global-pw-remote'], ['Local network (no password required)' => 'local'], ['Local network (password required)' => 'local-pw'], ['No access' => 'none']];
% param 'httpaccess' => $sf_data->{httpaccess} unless param 'httpaccess';
%= select_field 'httpaccess' => @httpaccess_options, class => 'input', id => 'httpaccess_select'
<br></span> </p>
<p><span class=label>
%=l('sf_webdav')
</span><span class=data>
% my @webdav_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
% param 'webdav' => $sf_data->{webdav} unless param 'webdav';
%= select_field 'webdav' => @webdav_options, class => 'input', id => 'webdav_select'
<br></span> </p>
<p><span class=label>
%=l('sf_requireSSL')
</span><span class=data>
% my @requireSSL_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
% param 'requireSSL' => $sf_data->{requireSSL} unless param 'requireSSL';
%= select_field 'requireSSL' => @requireSSL_options, class => 'input', id => 'requireSSL_select'
<br></span> </p>
<p><span class=label>
%=l('sf_indexes')
</span><span class=data>
% my @indexes_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
% param 'indexes' => $sf_data->{indexes} unless param 'indexes';
%= select_field 'indexes' => @indexes_options, class => 'input', id => 'indexes_select'
<br></span> </p>
<p><span class=label>
%=l('sf_dynamic')
</span><span class=data>
% my @dynamic_options = [['disabled' => 'disabled'], ['enabled' => 'enabled']];
% param 'dynamic' => $sf_data->{dynamic} unless param 'dynamic';
%= select_field 'dynamic' => @dynamic_options, class => 'input', id => 'dynamic_select'
<br></span> </p>
<span class='data'>
%= submit_button l('sf_Save'), class => 'action subm109'
</span>
%# Probably finally by a submit.
%end
</div>

View File

@@ -0,0 +1,365 @@
%#
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
%#
<div id="Shares-PERMISSIONS" class="partial Shares-PERMISSIONS">
%# <script>
%# window.onload = function() {
%# SelectInput();
%# };
%# </script>
% if (config->{debug} == 1) {
<pre>
%= dumper $sf_data
</pre>
% }
% my $btn = l('sf_APPLY');
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
%= form_for "sharesu" => (method => 'POST') => begin
% param 'trt' => $sf_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $sf_data->{trt}
%# Inputs etc in here.
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
<h2 class='subh'><%=l('sf_Access_right_management')%></h2>
<p class='paragraph para10'>
%=l('sf_You_can_use_this_matrix')
</p>
<br /><table class="sme-border TableSort sme-table tabl2 ">
<thead class='tabl2'>
<tr table-head-row>
<th class='sme-border table-head-col table-head-col-Groups '><%=l('sf_Groups')%></th>
<th class='sme-border table-head-col table-head-col-Description '><%=l('sf_Description')%></th>
<th class='sme-border table-head-col table-head-col-Read / Write '><%=l('sf_Read_/_Write')%></th>
<th class='sme-border table-head-col table-head-col-Read Only '><%=l('sf_Read_Only')%></th>
</tr>
</thead>
<tbody class='tabl2'>
% my $control_data = $c->stash('Table2');
% foreach my $row (@$control_data) {
<tr class='table-row'>
<td class='sme-border table-col table-col-Table2-Groups'><%=$c->render_to_string(inline=>$row->{'Table2-Groups'})%></td>
<td class='sme-border table-col table-col-Table2-Description'><%=$c->render_to_string(inline=>$row->{'Table2-Description'})%></td>
<td class='sme-border table-col table-col-Table2-Read / Write'><%=$c->render_to_string(inline=>$row->{'Table2-Read / Write'})%></td>
<td class='sme-border table-col table-col-Table2-Read Only'><%=$c->render_to_string(inline=>$row->{'Table2-Read Only'})%></td>
</tr>
%}
</tbody>
</table>
<p><span class='label'>
%=l('sf_writegroup')
</span><span class=data>
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
%=checkbox_field 'writegroup', class => 'chec110'
</span></p>
<p><span class='label'>
%=l('sf_readgroup')
</span><span class=data>
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
%=checkbox_field 'readgroup', class => 'chec111'
</span></p>
<p><span class='label'>
%=l('sf_writegroup')
</span><span class=data>
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
%=checkbox_field 'writegroup', class => 'chec112'
</span></p>
<p><span class='label'>
%=l('sf_readgroup')
</span><span class=data>
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
%=checkbox_field 'readgroup', class => 'chec113'
</span></p>
<p><span class='label'>
%=l('sf_writegroup')
</span><span class=data>
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
%=checkbox_field 'writegroup', class => 'chec114'
</span></p>
<p><span class='label'>
%=l('sf_readgroup')
</span><span class=data>
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
%=checkbox_field 'readgroup', class => 'chec115'
</span></p>
<p><span class='label'>
%=l('sf_writegroup')
</span><span class=data>
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
%=checkbox_field 'writegroup', class => 'chec116'
</span></p>
<p><span class='label'>
%=l('sf_readgroup')
</span><span class=data>
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
%=checkbox_field 'readgroup', class => 'chec117'
</span></p>
<p><span class='label'>
%=l('sf_writegroup')
</span><span class=data>
% param 'writegroup' => $sf_data->{writegroup} unless param 'writegroup';
%=checkbox_field 'writegroup', class => 'chec118'
</span></p>
<p><span class='label'>
%=l('sf_readgroup')
</span><span class=data>
% param 'readgroup' => $sf_data->{readgroup} unless param 'readgroup';
%=checkbox_field 'readgroup', class => 'chec119'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec120'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec121'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec122'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec123'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec124'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec125'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec126'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec127'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec128'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec129'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec130'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec131'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec132'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec133'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec134'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec135'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec136'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec137'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec138'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec139'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec140'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec141'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec142'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec143'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec144'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec145'
</span></p>
<p><span class='label'>
%=l('sf_writeuser')
</span><span class=data>
% param 'writeuser' => $sf_data->{writeuser} unless param 'writeuser';
%=checkbox_field 'writeuser', class => 'chec146'
</span></p>
<p><span class='label'>
%=l('sf_readuser')
</span><span class=data>
% param 'readuser' => $sf_data->{readuser} unless param 'readuser';
%=checkbox_field 'readuser', class => 'chec147'
</span></p>
<span class='data'>
%= submit_button l('sf_Save'), class => 'action subm148'
</span>
%# Probably finally by a submit.
%end
</div>

View File

@@ -0,0 +1,64 @@
%#
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
%#
<div id="Shares-REMOVE" class="partial Shares-REMOVE">
%# <script>
%# window.onload = function() {
%# SelectInput();
%# };
%# </script>
% if (config->{debug} == 1) {
<pre>
%= dumper $sf_data
</pre>
% }
% my $btn = l('sf_APPLY');
% $c->param(Selected => undef); #This may need deleting for a params panel - only needed for a table
%= form_for "sharesu" => (method => 'POST') => begin
% param 'trt' => $sf_data->{trt} unless param 'trt';
%= hidden_field 'trt' => $sf_data->{trt}
%# Inputs etc in here.
<h1 class='head'><%=l('sf_Create,_modify,_or_remove_shared')%></h1>
<h2 class='subh'><%=l('sf_Remove_shared_folder')%></h2>
<p class='paragraph para11'>
%=l('sf_You_are_about_to_remove')
</p>
<p><span class=label>
%=l('sf_name')
</span><span class=data>
% param 'name' => $sf_data->{name} unless param 'name';
%= text_field 'name', size => '50', class => 'textinput name' , pattern=>'.*' , placeholder=>'name', title =>'Pattern regex mismatch', id => 'name_text', readonly => 1
<br></span></p>
<p><span class=label>
%=l('sf_description')
</span><span class=data>
% param 'description' => $sf_data->{description} unless param 'description';
%= text_field 'description', size => '50', class => 'textinput description' , pattern=>'.*' , placeholder=>'description', title =>'Pattern regex mismatch', id => 'description_text', readonly => 1
<br></span></p>
<p class='paragraph para21'>
%=l('sf_All_files_belonging_to_this')
</p>
<p class='paragraph para31'>
%=l('sf_Are_you_sure_you_wish')
</p>
<span class='data'>
%= submit_button l('sf_Cancel'), class => 'action subm149'
</span>
<span class='data'>
%= submit_button l('sf_Remove'), class => 'action subm150'
</span>
%# Probably finally by a submit.
%end
</div>

View File

@@ -1,43 +0,0 @@
% layout 'default', title => "Sme server 2 - Shared Folders", share_dir => './';
% content_for 'module' => begin
<div id="module">
% if ($config->{debug} == 1) {
<p>
%= dumper $c->current_route
</p>
% }
<h1><%=$title%></h1>
%= $modul
%if ($shf_datas->{first}) {
%=$c->render_to_string(inline =>$c->l($shf_datas->{first}))
%} elsif ($shf_datas->{success}) {
<div class='sme-success'>
<h2> Operation Status Report</h2>
%= $c->l($shf_datas->{success});
</div>
%} elsif ($shf_datas->{error}) {
<div class='sme-error'>
<h2> Operation Status Report - error</h2>
%= $c->l($shf_datas->{error});
</div>
%}
% if ($shf_datas->{trt} eq 'CR_MOD') {
%= include 'partials/_shf_create_modify'
%} elsif ($shf_datas->{trt} eq 'DEL') {
%= include 'partials/_shf_delete'
%} elsif ($shf_datas->{trt} eq 'PERM') {
%= include 'partials/_shf_permissions'
%} else {
%= include 'partials/_shf_list'
%}
</div>
%end

View File

@@ -0,0 +1,68 @@
%#
%# Generated by SM2Gen version:0.9(20Jan2025) Chameleon version:4.5.4 On Python:3.12.3 at 2025-05-21 08:46:42
%#
% layout 'default', title => "Sme server 2 - Shared Folders", share_dir => './';
%# css specific to this panel:
% content_for 'module' => begin
%= stylesheet '/css/shares.css'
%= javascript '/js/shares.js'
<div id="module" class="module Shares-panel">
% if (config->{debug} == 1) {
<pre>
%= dumper $c->current_route
%= dumper $c->stash()
</pre>
% }
<h1><%=$title%></h1>
% if ( stash('modul')) {
%= $c->render_to_string(inline => stash('modul') );
% }
%if ($c->stash('first')) {
<br><p>
%=$c->render_to_string(inline =>$c->l($c->stash('first')))
</p>
%} elsif ($c->stash('success')) {
<div class='success '>
<p>
%= $c->l($c->stash('success'));
</p>
</div>
<br />
%} elsif ($c->stash('error')) {
<div class='sme-error'>
<p>
%= $c->l($c->stash('error'));
</p>
</div>
<br />
%}
%#Routing to partials according to trt parameter.
%#This ought to be cascading if/then/elsif, but is easier to just stack the if/then's rather like a case statement'
% if ($sf_data->{trt} eq "LIST") {
%= include 'partials/_sf_LIST'
%}
% if ($sf_data->{trt} eq "MODIFY") {
%= include 'partials/_sf_MODIFY'
%}
% if ($sf_data->{trt} eq "PERMISSIONS") {
%= include 'partials/_sf_PERMISSIONS'
%}
% if ($sf_data->{trt} eq "REMOVE") {
%= include 'partials/_sf_REMOVE'
%}
</div>
%end