source: trunk/www/admin/clients/help/edit_help.jsp @ 3036

Last change on this file since 3036 was 3036, checked in by Martin Svensson, 15 years ago

Reference #146 Beginning of tools to make it more easy editing the helptexts.
Not working yet, only a backup over the weekend.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 9.8 KB
Line 
1<%-- $Id: edit_help.jsp 3036 2006-12-15 15:38:35Z martin $
2  ------------------------------------------------------------------
3  Copyright (C) Authors contributing to this file.
4
5  This file is part of BASE - BioArray Software Environment.
6  Available at http://base.thep.lu.se/
7
8  BASE is free software; you can redistribute it and/or
9  modify it under the terms of the GNU General Public License
10  as published by the Free Software Foundation; either version 2
11  of the License, or (at your option) any later version.
12
13  BASE is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  GNU General Public License for more details.
17
18  You should have received a copy of the GNU General Public License
19  along with this program; if not, write to the Free Software
20  Foundation, Inc., 59 Temple Place - Suite 330,
21  Boston, MA  02111-1307, USA.
22  ------------------------------------------------------------------
23
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.Item"
32  import="net.sf.basedb.core.ItemContext"
33  import="net.sf.basedb.core.SystemItems"
34  import="net.sf.basedb.core.Permission"
35  import="net.sf.basedb.core.Include"
36  import="net.sf.basedb.core.Client"
37  import="net.sf.basedb.core.Help"
38  import="net.sf.basedb.core.ItemQuery"
39  import="net.sf.basedb.core.ItemResultList"
40  import="net.sf.basedb.core.PermissionDeniedException"
41  import="net.sf.basedb.core.BaseException"
42  import="net.sf.basedb.core.query.Orders"
43  import="net.sf.basedb.core.query.Hql"
44  import="net.sf.basedb.clients.web.Base"
45  import="net.sf.basedb.clients.web.util.HTML"
46  import="net.sf.basedb.util.Values"
47  import="java.util.List"
48  import="java.util.Set"
49  import="java.util.HashSet"
50  import="java.util.Date"
51%>
52<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
53<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
54<%@ taglib prefix="tbl" uri="/WEB-INF/table.tld" %>
55<%@ taglib prefix="m" uri="/WEB-INF/menu.tld" %>
56<%
57final Item itemType = Item.HELP;
58final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
59final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
60final int itemId = cc.getId();
61final int clientId = Values.getInt(request.getParameter("client_id"));
62final String ID = sc.getId();
63final float scale = Base.getScale(sc);
64final DbControl dc = sc.newDbControl();
65try
66{
67  String title = null;
68  Client client = null;
69  Help help = null;
70  String externalId = null;
71 
72  if (itemId == 0)
73  {
74    title = "Create help";
75    cc.removeObject("item");
76    client = Client.getById(dc, clientId);
77    externalId = Values.getString(request.getParameter("external_id"), 
78      cc.getPropertyValue("externalId"));
79  }
80  else
81  {
82    help = Help.getById(dc, itemId);
83    cc.setObject("item", help);
84    title = "Edit help text -- " + HTML.encodeTags(help.getName());
85    externalId = help.getExternalId();
86  }
87  if (help != null) help.checkPermission(Permission.WRITE);
88  final String clazz = "class=\"text\"";
89  final String requiredClazz = "class=\"text required\"";
90  %>
91
92  <base:page type="popup" title="<%=title%>">
93  <base:head scripts="menu.js,tabcontrol.js" styles="tabcontrol.css,menu.css">
94    <script language="JavaScript">
95    // Validate the "Help" tab
96    function validateHelp()
97    {
98      var frm = document.forms['help'];
99      if (Main.trimString(frm.name.value) == '')
100      {
101        alert("You must enter a name");
102        frm.name.focus();
103        return false;
104      }
105      else if (Main.trimString(frm.external_id.value) == '')
106      {
107        alert("You must enter an external ID");
108        frm.external_id.focus();
109        return false;
110      }
111      return true;
112    }
113
114    // Submit the form
115    function saveSettings()
116    {
117      var frm = document.forms['help'];
118      if (TabControl.validateActiveTab('settings'))
119      {
120        frm.submit();
121      }
122    }
123 
124    function init()
125    {
126      var frm = document.forms['help'];
127      <%
128      if (help == null)
129      {
130        %>
131        frm.name.focus();
132        frm.name.select();
133        <%
134      }
135      %>
136    }
137   
138    /*
139      Enclose the selected text with prefix and suffix. Code taken
140      from Trac: http://projects.edgewall.com/trac/
141    */
142    function encloseSelection(prefix, suffix)
143    {
144      var frm = document.forms['help'];
145      var textarea = frm.description;
146      textarea.focus();
147        var start, end, sel, scrollPos, subst;
148        if (typeof(document["selection"]) != "undefined")
149        {
150          sel = document.selection.createRange().text;
151        }
152        else if (typeof(textarea["setSelectionRange"]) != "undefined")
153        {
154          start = textarea.selectionStart;
155          end = textarea.selectionEnd;
156          scrollPos = textarea.scrollTop;
157          sel = textarea.value.substring(start, end);
158        }
159        if (sel.match(/ $/))
160        {
161          // exclude ending space char, if any
162            sel = sel.substring(0, sel.length - 1);
163            suffix = suffix + " ";
164        }
165        subst = prefix + sel + suffix;
166        if (typeof(document["selection"]) != "undefined")
167        {
168          var range = document.selection.createRange().text = subst;
169          textarea.caretPos -= suffix.length;
170        }
171        else if (typeof(textarea["setSelectionRange"]) != "undefined")
172        {
173          textarea.value = textarea.value.substring(0, start) + subst +
174                           textarea.value.substring(end);
175          if (sel)
176          {
177            textarea.setSelectionRange(start + subst.length, start + subst.length);
178          }
179          else
180          {
181            textarea.setSelectionRange(start + prefix.length, start + prefix.length);
182          }
183          textarea.scrollTop = scrollPos;
184        }
185    }
186    </script>
187  </base:head>
188  <base:body onload="init()">
189    <m:menu
190      id="listtype"
191      style="display: none;">
192     
193    <m:menuitem 
194      title="Organized&nbsp;list" 
195      onclick="encloseSelection('&lt;ol&gt;', '&lt;/ol&gt;')"
196      tooltip="Insert a numeric list"
197    />
198    </m:menu>
199    <p>
200    <form action="index.jsp?ID=<%=ID%>" method="post" name="help" onsubmit="return false;">
201    <input type="hidden" name="cmd" value="UpdateItem">
202    <input type="hidden" name="client_id" value="<%=clientId%>">
203
204    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
205    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*260)+"px;"%>" 
206      position="bottom" remember="<%=help != null%>">
207    <t:tab id="info" title="Help text" validate="validateHelp()" helpid="help.edit">
208      <table class="form" cellspacing=0>
209      <tr>
210        <td class="prompt">Title</td>
211        <td><input <%=requiredClazz%> type="text" name="name" 
212          value="<%=HTML.encodeTags(help == null ? Values.getString(cc.getPropertyValue("name"), "New help") : help.getName())%>" 
213          size="40" maxlength="<%=Help.MAX_NAME_LENGTH%>"></td>
214      </tr>
215      <tr>
216        <td class="prompt">External ID</td>
217        <td><input <%=requiredClazz%> type="text" name="external_id" 
218          value="<%=HTML.encodeTags(externalId)%>"
219          size="40" maxlength="<%=Help.MAX_EXTERNAL_ID_LENGTH%>"></td>
220      </tr>   
221      <tr>
222        <td></td>
223        <td>
224         
225        </td>
226      </tr>       
227      <tr valign=top>
228        <td class="prompt">Help text</td>
229        <td nowrap>
230          <div>
231          <tbl:toolbar>                       
232            <tbl:button 
233              tooltip="Bold"
234              clazz="buttonclass"
235              image="text_bold.png"
236              onclick="encloseSelection('&lt;b&gt;', '&lt;/b&gt;')"
237            />
238            <tbl:button
239              tooltip="Italic"             
240              clazz="buttonclass"
241              image="text_italic.png"
242              onclick="encloseSelection('&lt;i&gt;', '&lt;/i&gt;')"
243            />
244            <tbl:button
245              tooltip="Underline"
246              clazz="buttonclass"
247              image="text_underline.png"
248              onclick="encloseSelection('&lt;u&gt;', '&lt;/u&gt;')"
249            />                     
250            <tbl:button
251              tooltip="Header 3"
252              clazz="buttonclass"
253              style="padding: 1px;"
254              image="text_h3.png"
255              onclick="encloseSelection('&lt;h3&gt;', '&lt;/h3&gt;')"
256            />
257            <tbl:button
258              tooltip="Header 4"
259              clazz="buttonclass"
260              style="padding: 1px;"
261              image="text_h4.png"
262              onclick="encloseSelection('&lt;h4&gt;', '&lt;/h4&gt;')"
263            />
264            <tbl:button
265              tooltip="Textstyle"
266              clazz="buttonclass"
267              style="border-right: 0px;"
268              image="text_style_edit.gif"
269              onclick="Menu.toggleTopMenu(document.getElementById('textstyles'), event.clientX, event.clientY); event.cancelBubble = true;"
270            />           
271            <tbl:button
272              tooltip="Table"
273              clazz="buttonclass"
274              style="border-right: 0px;"
275              image="text_table.png"
276              onclick="Menu.toggleTopMenu(document.getElementById('tableitem'), event.clientX, event.clientY); event.cancelBubble = true;"
277            />
278            <tbl:button
279              clazz="buttonclass"
280              style="border-right: 0px;"
281              image="text_list.gif"
282              onclick="Menu.toggleTopMenu(document.getElementById('listtype'), event.clientX, event.clientY); event.cancelBubble = true;"
283            />
284            <tbl:button
285              tooltip="New line"
286              style="padding: 1px;"
287              image="text_newline.gif" 
288              clazz="buttonclass"
289              onclick="encloseSelection('&lt;br&gt;', '')"
290            />
291            <tbl:button
292              tooltip="New paragraph"
293              clazz="buttonclass"
294              image="text_paragraph.gif"
295              onclick="encloseSelection('&lt;p&gt;', '&lt;/p&gt;')"
296            />           
297          </tbl:toolbar>
298          </div>
299          <textarea <%=clazz%> rows="12" cols="60" name="description" wrap="virtual"
300            ><%=HTML.encodeTags(help == null ? cc.getPropertyValue("description") : help.getDescription())%></textarea>
301          <a href="javascript:Main.zoom('Help text', 'help', 'description')"
302            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
303        </td>
304      </tr>
305      </table>
306      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
307    </t:tab>
308    </t:tabcontrol>
309
310    <table align="center">
311    <tr>
312      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
313      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
314    </tr>
315    </table>
316    </form>
317  </base:body>
318  </base:page>
319  <%
320}
321finally
322{
323  if (dc != null) dc.close();
324}
325%>
Note: See TracBrowser for help on using the repository browser.