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

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

References #146 Finished with making the help-text writing more easy.
Buttons to insert some useful tags to the helptext have been added to the helptext edit/zoom windows

  • Property svn:eol-style set to native
  • Property svn:keywords set to Date Id
File size: 10.9 KB
Line 
1<%-- $Id: edit_help.jsp 3040 2006-12-18 14:53:38Z 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    <m:menuitem 
193      title="Ordered list" 
194      onclick="encloseSelection('&lt;ol&gt&lt;li&gt;', '&lt;/li&gt;&lt;/ol&gt;')"
195      tooltip="Insert an ordered list"
196    />
197    <m:menuitem
198      title="Unordered list"
199      onclick="encloseSelection('&lt;ul&gt;&lt;li&gt;', '&lt;/li&gt;&lt;/ul&gt;')"
200      tooltip="Insert an unordered list"
201    />     
202    </m:menu>
203    <%
204    String tableInsert = "encloseSelection('&lt;table class=&quot;explanation&quot;&gt;', '&lt;/table&gt;')";
205    %>
206    <m:menu
207      id="tableitem"
208      style="display: none;">
209    <m:menuitem
210      title="Table"
211      onclick="<%=tableInsert%>"
212      tooltip="Insert a table"
213    />
214    <m:menuitem
215      title="Row"
216      onclick="encloseSelection('&lt;tr&gt;', '&lt;/tr&gt;')"
217      tooltip="Insert a row in a table"
218    />
219    <m:menuitem
220      title="Cell"
221      onclick="encloseSelection('&lt;td&gt;', '&lt;/td&gt;')"
222      tooltip="Insert a cell in a table row"
223    />
224    </m:menu>
225    <m:menu
226      id="textformats"
227      style="display: none;">
228    <m:menuitem
229      title="Important"
230      onclick="encloseSelection('&lt;imp&gt;', '&lt/imp&gt;')"
231      tooltip="Mark text as important"
232    />
233    <m:menuitem
234      title="User input"
235      onclick="encloseSelection('&lt;ui&gt;', '&lt/ui&gt;')"
236      tooltip="Mark text as user input."
237    />
238    <m:menuitem
239      title="Required"
240      onclick="encloseSelection('&lt;req&gt;', '&lt/req&gt;')"
241      tooltip="Mark text as required user input"
242    />
243    </m:menu>   
244    <p>
245    <form action="index.jsp?ID=<%=ID%>" method="post" name="help" onsubmit="return false;">
246    <input type="hidden" name="cmd" value="UpdateItem">
247    <input type="hidden" name="client_id" value="<%=clientId%>">
248
249    <h3 class="docked"><%=title%> <base:help tabcontrol="settings" /></h3>
250    <t:tabcontrol id="settings" contentstyle="<%="height: "+(int)(scale*360)+"px;"%>" 
251      position="bottom" remember="<%=help != null%>">
252    <t:tab id="info" title="Help text" validate="validateHelp()" helpid="help.edit">
253      <table class="form" cellspacing=0>
254      <tr>
255        <td class="prompt">Title</td>
256        <td><input <%=requiredClazz%> type="text" name="name" 
257          value="<%=HTML.encodeTags(help == null ? Values.getString(cc.getPropertyValue("name"), "New help") : help.getName())%>" 
258          size="40" maxlength="<%=Help.MAX_NAME_LENGTH%>"></td>
259      </tr>
260      <tr>
261        <td class="prompt">External ID</td>
262        <td><input <%=requiredClazz%> type="text" name="external_id" 
263          value="<%=HTML.encodeTags(externalId)%>"
264          size="40" maxlength="<%=Help.MAX_EXTERNAL_ID_LENGTH%>"></td>
265      </tr>   
266         
267      <tr valign=top>
268        <td class="prompt">Help text</td>
269        <td nowrap>
270          <div>
271          <tbl:toolbar>                       
272            <tbl:button 
273              tooltip="Bold"
274              clazz="buttonclass"
275              image="text_bold.png"
276              onclick="encloseSelection('&lt;b&gt;', '&lt;/b&gt;')"
277            />
278            <tbl:button
279              tooltip="Italic"             
280              clazz="buttonclass"
281              image="text_italic.png"
282              onclick="encloseSelection('&lt;i&gt;', '&lt;/i&gt;')"
283            />
284            <tbl:button
285              tooltip="Underline"
286              clazz="buttonclass"
287              image="text_underline.png"
288              onclick="encloseSelection('&lt;u&gt;', '&lt;/u&gt;')"
289            />                     
290            <tbl:button
291              tooltip="Header 3"
292              clazz="buttonclass"
293              style="padding: 1px;"
294              image="text_h3.png"
295              onclick="encloseSelection('&lt;h3&gt;', '&lt;/h3&gt;')"
296            />
297            <tbl:button
298              tooltip="Header 4"
299              clazz="buttonclass"
300              style="padding: 1px;"
301              image="text_h4.png"
302              onclick="encloseSelection('&lt;h4&gt;', '&lt;/h4&gt;')"
303            />
304            <tbl:button
305              tooltip="Textstyle"
306              clazz="buttonclass"
307              image="text_style_edit.gif"
308              onclick="Menu.toggleTopMenu(document.getElementById('textformats'), event.clientX, event.clientY); event.cancelBubble = true;"
309            />           
310            <tbl:button
311              tooltip="Table"
312              clazz="buttonclass"
313              image="text_table.png"
314              onclick="Menu.toggleTopMenu(document.getElementById('tableitem'), event.clientX, event.clientY); event.cancelBubble = true;"
315            />
316            <tbl:button
317              tooltip="List"
318              clazz="buttonclass"
319              image="text_list.gif"
320              onclick="Menu.toggleTopMenu(document.getElementById('listtype'), event.clientX, event.clientY); event.cancelBubble = true;"
321            />
322            <tbl:button
323              tooltip="New line"
324              image="text_newline.gif" 
325              clazz="buttonclass"
326              onclick="encloseSelection('&lt;br&gt;', '')"
327            />
328            <tbl:button
329              tooltip="New paragraph"
330              clazz="buttonclass"
331              image="text_paragraph.gif"
332              onclick="encloseSelection('&lt;p&gt;', '&lt;/p&gt;')"
333            />           
334          </tbl:toolbar>
335          </div>
336          <textarea <%=clazz%> rows="16" cols="60" name="description" wrap="virtual"
337            ><%=HTML.encodeTags(help == null ? cc.getPropertyValue("description") : help.getDescription())%></textarea>
338          <a href="javascript:Main.zoom('Help text', 'help', 'description')"
339            title="Edit in larger window"><base:icon image="zoom.gif" /></a>
340        </td>
341      </tr>
342      </table>
343      <div align=right>&nbsp;<i><base:icon image="required.gif" /> = required information</i></div>
344    </t:tab>
345    </t:tabcontrol>
346
347    <table align="center">
348    <tr>
349      <td width="50%"><base:button onclick="saveSettings()" title="Save" /></td>
350      <td width="50%"><base:button onclick="window.close()" title="Cancel" /></td>
351    </tr>
352    </table>
353    </form>
354  </base:body>
355  </base:page>
356  <%
357}
358finally
359{
360  if (dc != null) dc.close();
361}
362%>
Note: See TracBrowser for help on using the repository browser.