root/trunk/grails-app/views/importer/common/_on_page.gsp @ 1555

Revision 1555, 6.3 KB (checked in by t.w.abma@…, 3 years ago)

- disabled <Enter> key to prevent submission of form (JS)
- using matching, going to step 3 and back to 2 (next/prev) manually changed properties are now remembered instead of automatically being rematched
- added simple explanation to buttons via title attribute

  • Property svn:keywords set to Rev Author Date
RevLine 
[1281]1<%
[1467]2        /**
3         * wizard refresh flow action
4         *
5         * When a page (/ partial) is rendered, any DOM event handlers need to be
6         * (re-)attached. The af:ajaxButton, af:ajaxSubmitJs and af:redirect tags
7         * supports calling a JavaScript after the page has been rendered by passing
8         * the 'afterSuccess' argument.
9         *
10         * Example:     af:redirect afterSuccess="onPage();"
11         *              af:redirect afterSuccess="console.log('redirecting...');"
12         *
13         * Generally one would expect this code to add jQuery event handlers to
14         * DOM objects in the rendered page (/ partial).
15         *
16         * @author Jeroen Wesbeek
17         * @since 20101206
18         *
19         * Revision information:
20         * $Rev$
21         * $Author$
22         * $Date$
23         */
[1281]24%>
25<script type="text/javascript">
[1467]26        // Initially called when starting the import wizard
27        function onPage() {
28                // GENERAL
[1486]29                onStudyWizardPage();
[1391]30
[1467]31                $('#simplewizardform').submit(function() {
32                        if ($('#file').val() == "") {
33                                alert("Please choose your Excel file to import.");
34                                return false
35                        } else
36                        if ($('#entity').val() == "") {
37                                $('#datatemplate').addClass("validationfail");
38                                return false
39                        } else {
40                                $('#simplewizardform').submit();
41                        }
[1281]42
[1467]43                        return false;
44                });
[1505]45
[1511]46         // attach event to apply fuzzy matching
[1505]47         $('#fuzzymatchselect').click(function() {
[1515]48            $("#fuzzymatching").val("true")
[1505]49            refreshFlow()
50          });
51
[1515]52          // open load box
53          $('#loadpropertiesbutton').click(function() {
[1525]54            $("#loadmapping").toggle("scale")           
55            if ($("#importmapping_id").val()) refreshFlow()
[1515]56          });
57
58          // open save box
[1514]59          $('#savepropertiesbutton').click(function() {
60            var width = 500
61            var height = 200
62            var vars = ""
[1511]63
[1514]64            $("#savemapping").toggle("scale")
65
66            if ($("#mappingname").val()) refreshFlow();
67
[1511]68            // get all properties
69            //$('select[name^=columnproperty.index.]').each ( function() {
[1514]70            //}           
[1511]71           
[1514]72            /*$('#propertiesManager').dialog({
73                    title       : "Properties manager",
74                    autoOpen    : true,
[1511]75                    width       : width,
[1514]76                    vars        : vars,
[1511]77                    height      : height,
78                    modal       : true,
79                    position    : 'center',
80                    buttons     : {
[1514]81                                    Save  : function() {
82                                                          //alert($(this).parent().$('input[name="mappingname"]').val())
83                                                          alert($(this))
84                                                          var p = $(this).parent().parent().parent()
85                                                          console.log(p.('input[name="mappingname"]').val())
86                                                          //alert(vars)
87                                                          $(this).dialog('close'); }
[1511]88                                  },
89                    close       : function() {
90                                    //onClose(this);
91                                    refreshFlow()
92                                  }
93                }).width(width - 10).height(height)
[1514]94              */
[1511]95
96          });
[1555]97         
[1511]98
[1555]99          // Disable Enter key
100          function stopRKey(evt) {
101            var evt = (evt) ? evt : ((event) ? event : null);
102            var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
103            if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
104          }
105          document.onkeypress = stopRKey;
106         
107
[1505]108          // attach function to clear button to reset all selects to "don't import"
109          $('#clearselect').click(function() {
110            // for each select field on the page
111            $("select").each( function(){
112            // set its value to its first option
113            $(this).val($('option:first', this).val());
114            });
115          });
[1511]116
117          // attach change event function to prevent duplicate selection of properties
118          $('select[name^=columnproperty.index.]').each ( function() {
119          $(this).bind('change', function(e) {
120              //console.log($(this).val())
121              var selection = $(this)
122
123              $('select[name^=columnproperty.index.] option:selected').each ( function() {
124                var selector = $(this)
125
126                if (selection.attr('id') != selector.parent().attr('id') && (selection.val()!="dontimport"))
127                  if ($(this).val() == selection.val()) {
128                    selection.val($('option:first', selection).val());
129
130                    alert("Property is already set for an other column, please choose a different property.")
131                    return false
132                  }
133              });
134          });
135          });
[1467]136        }
[1281]137
[1467]138        /**
139         * Update one select based on another select
140         *
141         * @author
142         * @see  http://www.grails.org/Tag+-+remoteFunction
143         * @param   string  select (form) name
144         * @param   string  JSON data
145         * @param   boolean keep the first option
146         * @param   int  selected option
147         * @param   string  if null, show this as option instead
148         * @void
149         */
150        function updateSelect(name, data, keepFirstOption, selected, presentNullAsThis) {
151                var rselect = $('#' + name).get(0)
152                var items = data
[1281]153
[1467]154                // If a study has been selected, don't show the "Choose study" field, otherwise do
155                if ($('#' + 'entity :selected').text() == 'Study')
156                        $('#studyfield').hide();
157                else $('#studyfield').show();
[1281]158
[1467]159                $('select[name=template_id]').attr('entity', $('#' + 'entity').val());
[1281]160
[1467]161                if (items) {
[1281]162
[1467]163                        // remove old options
164                        var start = (keepFirstOption) ? 0 : -1;
165                        var i = rselect.length
[1281]166
[1467]167                        while (i > start) {
168                                rselect.remove(i)
169                                i--
170                        }
[1281]171
[1467]172                        // add new options
173                        $.each(items, function() {
174                                var i = rselect.options.length
[1281]175
[1467]176                                rselect.options[i] = new Option(
177                                        (presentNullAsThis && this.name == null) ? presentNullAsThis : this.name,
178                                        this.id
179                                        );
180                                if (this.id == selected) rselect.options[i].selected = true
181                        });
182                }
183
184                // handle template selects
185                new SelectAddMore().init({
[1489]186                        rel      : 'template',
[1467]187                        url      : baseUrl + '/templateEditor',
188                        vars    : 'entity', // can be a comma separated list of variable names to pass on
189                        label   : 'add / modify ...',
190                        style   : 'modify',
191                        onClose : function(scope) {
[1489]192                                refreshFlow()
[1467]193                        }
194                });
195        }
196
[1281]197</script>
Note: See TracBrowser for help on using the browser.