source: main/trunk/ibisph-view/src/main/webapp/xslt/html/query/definition/QueryDefinition.xslt @ 21163

Last change on this file since 21163 was 21163, checked in by GarthBraithwaite_STG, 8 weeks ago

java, view - Saved QD via ajax. Moved QDs into the QD detail modelmap which side was to remove queryDefinitionMiscDetailsModelMap and java MM and did away with QUERY_DEFINITIONS_NAME. Added blank.jsp so that ajax requests can properly report success/fail via return HTTP200 status. Reordered modelmap list controller so that more specific model maps are processed first. Added list of pathPrefixesToRemove to QueryDefinitionsFromHTTPRequest and QueryModuleFromHTTPRequest to allow for name from the specific path segments and not rely on the end segment. This allows for different paths including secure and sub dirs.

File size: 11.1 KB
Line 
1<?xml version="1.0" encoding="ISO-8859-1"?>
2
3<xsl:stylesheet version="3.0" 
4        xmlns:xsl ="http://www.w3.org/1999/XSL/Transform" 
5        xmlns:ibis="http://www.ibisph.org"
6
7        exclude-result-prefixes="ibis"
8>
9
10        <ibis:doc>
11                <name>html/query/definition/QueryDefinition</name>
12                <summary>Basic params and HTML blocks used on saved query def pages.</summary>
13                <description>
14                </description>
15        </ibis:doc>
16
17
18        <xsl:param name="QueryDefinitions" 
19                ibis:doc="Main model XML for the index page requests (ie param not used
20                        for this).  This param and the code below to handle if ever injected."
21        />
22        <xsl:param name="QueryDefinition.queryDefinitions" 
23                select="if($QueryDefinitions instance of node())
24                        then $QueryDefinitions/QUERY_DEFINITIONS
25                        else /QUERY_DEFINITIONS"
26        />
27
28        <xsl:param name="QueryDefinition" 
29                ibis:doc="The QD is typically passed as a parameter.  Even in the QD detail
30                        the QM is the main XML.  Uses the same pattern as above QDs."
31        />
32        <xsl:param name="QueryDefinition.queryDefinition" 
33                select="if($QueryDefinition instance of node())
34                        then $QueryDefinition/QUERY_DEFINITION
35                        else /QUERY_DEFINITION" 
36                ibis:doc="current query def"
37        />
38        <xsl:param name="QueryDefinition.isBlankQueryDefinition" select="not($QueryDefinition.queryDefinition/NAME)"/>
39
40        <xsl:param name="QueryDefinition.isMyQueryDefinitions" select="
41                        boolean($ibis.userProfile) and
42                        ($QueryDefinition.queryDefinitions/NAME = $ibis.userProfile/ID)
43                "
44        />
45
46<xsl:param name="ApplyQueryDefinition" 
47        ibis:doc="injected param.  Typically injected for QM builder requests.
48                Put in here in case want to show on a QD page???"
49/>
50<xsl:param name="QueryDefinition.applyQueryDefinition" select="$ApplyQueryDefinition"/>
51
52
53        <xsl:param name="QueryDefinition.baseRequestPath" select="concat($ibis.baseRequestPath, 'query/definition/')" 
54                ibis:doc="ability to SS override the base request QD related requst URLs"
55        />
56
57
58        <!--
59                HAD CODE TO SUPPORT SECURE SAVED QUERIES:
60
61                <xsl:variable name="urlPrefix" select="
62                        if(string-length(REQUEST_PATH_PREFIX) != 0)
63                        then concat($ibis.baseRequestPath, REQUEST_PATH_PREFIX, '/')
64                        else ibis.baseRequestPath
65                "/>
66        --> 
67
68
69
70
71        <!-- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ TEMPLATES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
72        <xsl:template name="QueryDefintion.editIdentityDialog">
73                <xsl:param name="queryModule"/>
74                <xsl:param name="request"       select="$queryModule/REQUEST"/>
75                <xsl:param name="configuration" select="$queryModule/CONFIGURATIONS/CONFIGURATION[NAME = $request/CONFIGURATION_NAME]"/>
76
77                <div id="queryDefinitionEditIdentityDialog" class="DialogContent">
78                        <div class="InnerCanvas">
79                                <xsl:call-template name="QueryDefintion.identityForm">
80                                        <xsl:with-param name="queryModule"   select="$queryModule"/>
81                                        <xsl:with-param name="request"       select="$request"/>
82                                        <xsl:with-param name="configuration" select="$configuration"/>
83                                </xsl:call-template>
84                        </div>
85                        <button type="button" onclick="saveDefinition();">Save</button>
86                        <button type="button" onclick="queryDefinitionEditIdentityDialog.close()" title="Closes the edit without saving.">Cancel</button>
87                </div>
88
89                <xsl:call-template name="QueryDefinition.specificScript"/>
90        </xsl:template> 
91
92
93        <xsl:template name="QueryDefintion.identityForm" 
94                ibis:doc="called from the detail page and when saving a new query def."
95        >
96<xsl:param name="queryModule" ibis:doc="Always have a QM - either current QM in the session or detail req loads it."/>
97<xsl:param name="request" select="$queryModule/REQUEST"/>
98                <xsl:param name="configuration" select="$queryModule/CONFIGURATIONS/CONFIGURATION[NAME = $request/CONFIGURATION_NAME]"/>
99                <form name="form" id="identityForm" method="post" action="{$QueryDefinition.baseRequestPath}save" autocomplete="on">
100                        <input type="hidden" id="requestBasePath"   name="requestBasePath" 
101                                value="{if( string-length($QueryDefinition.queryDefinition/REQUEST_PATH_PREFIX) != 0)
102                                        then $QueryDefinition.queryDefinition/REQUEST_PATH_PREFIX
103                                        else $QueryDefinition.baseRequestPath
104                                }"
105                        />
106
107                        <table class="Info" 
108                                summary="Query definition fields to edit.  Left column is the
109                                        label/title, right column contains associated input elements.
110                                "
111                                caption="Query definition properties to be edited/populated."
112                        >
113                                <tr>
114                                        <th scope="row" title="Unique identifier for this saved definition">
115                                                <label for="name">* Name:</label>
116                                                <xsl:call-template name="Help.popup">
117                                                        <xsl:with-param name="title"   select="'Name Field'"/>
118                                                        <xsl:with-param name="content" select="$HelpContent.queryDefinitionName"/>
119                                                        <xsl:with-param name="additionalClasses" select="'Inline'"/>
120                                                </xsl:call-template>
121                                        </th>
122                                        <td class="Title" title="unique name that identifies this saved definition">
123                                                <xsl:if test="$QueryDefinition.isBlankQueryDefinition">
124                                                <input id="name" name="name"  maxlength="180" type="text" 
125                                                        value="{concat(replace($request/CONFIGURATION_PATH, '/', '_'), '_', $queryModule/REQUEST/SERIAL_NUMBER)}" 
126                                                />
127                                                </xsl:if>
128                                                <xsl:if test="not($QueryDefinition.isBlankQueryDefinition)">
129                                                <input id="name" name="name" type="hidden" value="{$QueryDefinition.queryDefinition/NAME}"/>
130                                                <xsl:value-of select="$QueryDefinition.queryDefinition/NAME"/>
131                                                </xsl:if>
132                                        </td>
133                                </tr>
134
135                                <tr>
136                                        <th scope="row" title="This value is used as the main title for this query definiton.">
137                                                <label for="title">* Title:</label>
138                                                <xsl:call-template name="Help.popup">
139                                                        <xsl:with-param name="title" select="'Title Field'"/>
140                                                        <xsl:with-param name="content" select="$HelpContent.queryDefinitionTitle"/>
141                                                        <xsl:with-param name="additionalClasses" select="'Inline'"/>
142                                                </xsl:call-template>
143                                        </th>
144                                        <td  class="Title" title="Enter the main title for this query definition.">
145                                                <input id="title" name="title" maxlength="250" type="text"
146                                                        value="{
147                                                                if($QueryDefinition.isBlankQueryDefinition) 
148                                                                then concat($queryModule/TITLE, ' - ', $configuration/TITLE, ' (', $queryModule/REQUEST/SERIAL_NUMBER, ')')
149                                                                else $QueryDefinition.queryDefinition/TITLE
150                                                        }"
151                                                />
152                                        </td>
153                                </tr>
154
155                                <tr>
156                                        <th scope="row" title="This value is used as the user description for this query definiton.">
157                                                <label for="description">Description:</label>
158                                                <xsl:call-template name="Help.popup">
159                                                        <xsl:with-param name="title" select="'Description Field'"/>
160                                                        <xsl:with-param name="content" select="$HelpContent.queryDefinitionDescription"/>
161                                                        <xsl:with-param name="additionalClasses" select="'Inline'"/>
162                                                </xsl:call-template>
163                                        </th>
164                                        <td  class="Title" title="Enter the main title for this query definition.">
165                                                <textarea name="description" id="description" rows="5" cols="30">
166                                                        <xsl:value-of select="$QueryDefinition.queryDefinition/DESCRIPTION"/>
167                                                </textarea>
168                                        </td>
169                                </tr>
170
171                                <tr>
172                                        <th scope="row" title="check this if you want to keep your query definiton private.">
173                                                <label for="description">Keep Private:</label>
174                                                <xsl:call-template name="Help.popup">
175                                                        <xsl:with-param name="title" select="'Keep Definition Private Checkbox'"/>
176                                                        <xsl:with-param name="content" select="$HelpContent.queryDefinitionKeepPrivate"/>
177                                                        <xsl:with-param name="additionalClasses" select="'Inline'"/>
178                                                </xsl:call-template>
179                                        </th>
180                                        <td  class="Title" title="Enter the main title for this query definition.">
181                                                <input type="checkbox"  name="privateFlag" id="privateFlag" value="x">
182                                                        <xsl:if test="$QueryDefinition.queryDefinition/PRIVATE_FLAG">
183                                                                <xsl:attribute name="checked" select="'checked'"/>
184                                                        </xsl:if>
185                                                </input>
186                                        </td>
187                                </tr>
188
189                                <tr>
190                                        <th scope="row" title="Date this query definiton was created/last modified.">
191                                                Modified Date
192                                                <xsl:call-template name="Help.popup">
193                                                        <xsl:with-param name="title" select="'Last Modified Date'"/>
194                                                        <xsl:with-param name="content" select="$QueryDefinition/MODIFIED_DATE"/>
195                                                        <xsl:with-param name="additionalClasses" select="'Inline'"/>
196                                                </xsl:call-template>
197                                        </th>
198                                        <td  class="Title" title="Enter the main title for this query definition.">
199                                                <xsl:value-of select="
200                                                        if($QueryDefinition.isBlankQueryDefinition) 
201                                                        then 'N/A - New Definition'
202                                                        else $QueryDefinition.queryDefinition/MODIFIED_DATE
203                                                "/>
204                                                <input id="modifiedDate" name="modifiedDate" type="hidden" value="{$QueryDefinition.queryDefinition/MODIFIED_DATE}"/>
205                                        </td>
206                                </tr>
207
208                        </table>
209                        <div class="Required">* = Required Input</div>
210                </form>
211        </xsl:template>
212
213
214        <xsl:template name="QueryDefinition.specificScript"
215                ibis:doc="Provides the javascript file links and submit related functions
216                        for the query module builder pages."
217        >
218                <script type="text/javascript">
219                        // <![CDATA[
220                        var queryDefinitionEditIdentityDialog = null;
221                        $(document).ready(function()
222                        {
223                                queryDefinitionEditIdentityDialog =
224                                        $("#queryDefinitionEditIdentityDialog").kendoWindow({
225                                                title: "Saved Query Definition"
226                                                ,visible: false
227                                                ,width: "800px"
228                                                ,resizable: true
229                                                ,modal: true
230                                        }).data("kendoWindow");
231
232                                $(function()
233                                {
234                                        $("#identityForm").submit(function(event)
235                                        {
236                                                event.preventDefault(); // Prevent the form from submitting via the browser
237                                                var form = $(this);
238                                                $.ajax
239                                                ({
240                                                        type: form.attr("method")
241                                                        ,url: form.attr("action")
242                                                        ,data: form.serialize()
243                                                        ,success: function(data) { alert("Successfully Saved."); }
244                                                        ,error: function(data)
245                                                        {
246                                                                alert("Save Failed!");
247                                                                console.log("Query Definition Save Failed.  Data: ");
248                                                                console.log(data);
249                                                                console.log(data.responseText);
250                                                        }
251                                                });
252
253                                        });
254                                });
255
256                        }); //~~~~~~~~~~~~~~~~~~~~ End of Ready Function ~~~~~~~~~~~~~~~~~~~
257                        function showIdentityDialog()
258                        {
259                                queryDefinitionEditIdentityDialog.center().open();
260                                document.getElementById("name").focus();
261                        } //~~~~~~~~~~~~~~~~~~~~ End of Function ~~~~~~~~~~~~~~~~~~~
262
263                        var validNameCharactersRegEx = /^[a-z0-9_\-]+$/i; //    [A-Za-z0-9\-\_\.]*;
264                        function saveDefinition()
265                        {
266                                if(document.form.name.value.trim() < " ")
267                                {
268                                        alert("Name MUST be populated.  This value is the unique identifier that is used by the system to access this query definition.");
269                                        document.form.name.focus();
270                                        return(false);
271                                }
272                                else if(!validNameCharactersRegEx.test(document.form.name.value))
273                                {
274                                        alert("Name contains invalid characters.  Valid values are A-z, 0-9, '-', '_'");
275                                        document.form.name.focus();
276                                        return(false);
277                                }
278                                else if(document.form.title.value < " ")
279                                {
280                                        alert("Title MUST be populated.  This is the text you will see in your query definition selection list.");
281                                        document.form.title.focus();
282                                        return(false);
283                                }
284                                $("#identityForm").trigger("submit");
285                                queryDefinitionEditIdentityDialog.close();
286                                location.reload();
287                        }
288                        // ]]>
289                </script>
290        </xsl:template>
291
292</xsl:stylesheet>
293<!-- ============================= End of File ============================= -->
294
Note: See TracBrowser for help on using the repository browser.