source: SMC/trunk/SMC/src/web/scripts/js/mdservice/mdservice_ui_helpers.js @ 6834

Last change on this file since 6834 was 6834, checked in by matej.durco@oeaw.ac.at, 9 years ago

clean up of files and code

File size: 13.5 KB
Line 
1/**
2 * @fileOverview  The file contains UI concerned functions for building the pane structure from app settings
3 * and a lot of other UI functionality for example tooltips, notifymessges, ui-block handling
4 *
5 * @author
6 * @version
7 */
8function createBlock(name, _parent){
9        var ui_array;
10        var layout;
11        var _class;
12        var len;
13        var e, layout_elem;
14        var _parent;
15        var layout_div;
16       
17        // append UI
18        if (_parent == ""){
19                layout_initialisation[name].parent = $('body');
20        } else {
21                layout_initialisation[name].parent = _parent;
22        }
23 
24        var settings;
25        if (layout_initialisation[name].settings == ""){
26                // settings = new CloneObject(layout_initialisation[name].model_settings);
27                settings = jQuery.extend(true, {}, layout_initialisation[name].model_settings );
28        } else {
29                settings = layout_initialisation[name].settings;
30        }
31         
32        jQuery.each(block_positions, function(index,position){
33                if (layout_initialisation[name][position] != undefined){
34                        ui_array = layout_initialisation[name][position];       
35                        len = ui_array.lenght;
36                        jQuery.each(ui_array, function(index,elem){
37                                        var e = elem;
38                                       
39                                       
40                                        if (layout_initialisation[elem] != undefined){
41                                                layout_div = $('<div></div>').addClass(name + '-' + position).addClass("cmds-ui-block").attr("layoutname",name);
42                                                e = createBlock(elem, layout_div);  // compode element
43                                                $(layout_div).append($(e));
44                                                layout_initialisation[name].parent.append($(layout_div));
45                                        } else {
46                                                $(e).addClass(name + '-' + position).attr("layoutname",name);
47                                                if (blocks_settings[$(elem).attr("id")] != undefined) {
48                                                        //jQuery.each(blocks_settings[$(elem).attr("id")].sublayouts,function(index, ee){
49                                                        //      createBlock(ee, $('#' + ee));
50                                                        //});
51                                                        jQuery.each(blocks_settings[$(elem).attr("id")].commands.block,function(index, cmd){
52                                                                createCommand($(elem), cmd);
53                                                                bindCommand($(elem), cmd);
54                                                        });
55                                                }
56                                                layout_initialisation[name].parent.append($(e));
57                                        }
58                                       
59                                        //layout_initialisation[name].parent.height(layout_initialisation[name].parent.height() + $(layout_div).height());
60                                        settings[position + "__paneSelector"] = "." + name + "-" + position;
61                                        //position + "__paneSelector" = "." + name + "-" + position
62                        });
63                }
64        });
65       
66        layout_initialisation[name].settings = settings;
67        return $(layout_div);
68}
69
70function createLayouts(name){
71        var ui_array;
72        var layout;
73       
74        // append UI   
75        layout = $(layout_initialisation[name].parent).layout(layout_initialisation[name].settings);
76
77        layout_initialisation[name].layout = layout;
78        jQuery.each(block_positions, function(index,position){
79                if (layout_initialisation[name][position] != undefined){
80                        ui_array = layout_initialisation[name][position];       
81                        jQuery.each(ui_array, function(index,elem){
82                                if (layout_initialisation[elem] != undefined){
83                                        createLayouts(elem);
84                                }
85                        });
86                }
87        });
88
89}
90
91
92//append blocks functionality
93function createCommand(parent, cmd){
94        $("<span class='cmd " + cmd+ "'></span>").appendTo($(parent).children('.header'));
95        return  $(parent).children('.header').children('.' + cmd);
96}
97
98function bindCommand(parent, cmd){
99        var command = $(parent).children('.header').children('.' + cmd);
100        switch (cmd){
101        case "cmd_close": 
102                bindCloseCommand(command);
103                break;
104        case "cmd_advanced": 
105                bindAdvancedCommand(command);
106                break;
107        default:
108                break;
109        }
110}
111
112function bindAdvancedCommand(cmd){
113        $(cmd).click(function(){
114                //var advanced = $(this).closest('.cmds-ui-block').attr("id") + '_advanced';
115                $(this).closest('.cmds-ui-block').find('.ui-advanced').toggle();
116                // TODO tag <table>  auto-resize dont work !!!!! 
117                //if ($(this).closest('.cmds-ui-block').find('.ui-advanced').is(":visible") == false){
118                //      var name = $(this).closest('.cmds-ui-block').attr("layoutname");
119                //      layout_initialisation[name].layout.sizePane("north",$("#input-simplequery").height(),false, false);
120                //}
121        });
122}
123
124function bindCloseCommand(cmd){
125        $(cmd).click(function(){
126                $(this).closest('.cmds-ui-block').hide();
127        });
128}
129
130////
131function handleValueCaller(_this){
132
133        $(_this).after('<div class="ui-context-dialog cmds-ui-closable cmd cmd_get" ></div>');                                 
134        detail = $(_this).parent().children('.ui-context-dialog');                             
135                               
136        detail.load($(_this).attr('href'), function(event) {
137                                $(this).removeClass('cmd_get cmd');
138                                handleUIBlock($(this).children('.cmds-ui-block'));
139                                addPaging($(this).children('.cmds-ui-block'));
140                                $(this).show();
141                               
142                                $(this).find('.cmd_columns').click(function(event) {
143                                        event.preventDefault();
144                                        handleValueSelection($(this));
145                                });
146                                });
147}
148function handleIndexSelection(elem){
149        var index = $(elem).closest('.treecol').children('.column-elem').text();
150        searchclauseset.updatedata(index, false);
151};
152function handleValueSelection(elem){
153        var index = undefined;
154        if ($(elem).closest('.ui-context-dialog').parent().siblings('.treecol').length > 0){
155                index = $(elem).closest('.ui-context-dialog').parent().siblings('.treecol').children('.column-elem').text();
156        } 
157        var value = $(elem).closest('td').text();
158        searchclauseset.updatedata(index, false, undefined, value);
159};
160//
161function handleUIBlock (elems) 
162{
163       
164//      $('#left-menu').addClass('ui-accordion ui-widget ui-helper-reset ui-accordion-icons'); 
165        $(elems).addClass('ui-helper-reset ui-corner-all');
166        $(elems).children('.header').addClass('ui-widget-header ui-state-default ui-corner-top');
167        $(elems).children('.content').addClass('ui-widget-content ui-corner-bottom');
168/*      $(elems).children('.header').click(function() {
169                $(this).next().toggle('fast');
170                return false;
171        }).next().hide();
172        */
173       
174        $(elems).children('.header').prepend('<span class="cmd cmd-collapse cmd_down" > </span>');
175        $(elems).find('.cmd-collapse').click(function(event) {
176                        $(this).closest('.header').next().toggle('fast');
177                        $(this).toggleClass('cmd_down cmd_up');
178                        return false;
179                });
180       
181        $(elems).each(function(i) {
182                // default is: hidden
183               
184                if ($(this).hasClass('init-show'))  {           
185                        $(this).children('.content').show();
186                        $(this).find('.cmd-collapse').toggleClass('cmd_down cmd_up');           
187                } else {
188                        $(this).children('.content').hide();                   
189                }               
190                       
191                if ($(this).parent().hasClass('cmds-ui-closable'))  {           
192                        $(this).children('.header').prepend('<span class="cmd cmd_close" > </span>');
193                        $(this).find('.cmd_close').click(function(event) {
194                                        $(this).closest('.header').parent().parent('.cmds-ui-closable').remove();       
195                                });
196                } 
197        });
198}
199
200
201function addPaging (elem) 
202{
203       
204        var header = $(elem).children('.header');
205        var content = $(elem).children('.content');
206       
207        var pagingSize = 10;
208        var startItem = $(header).attr('start-item');
209        var countItems = $(header).attr('max-value'); //$(content).find('tr').size;
210        var maximumItems = $(header).attr('maximum-items');
211       
212        if (maximumItems < countItems) {
213                maximumItems = countItems;
214        } 
215
216        var paging = '<div class="cmds-navi-header ui-widget"><span class="label" >from:</span><span><input type="text" class="value start-item paging-input">' +
217        '</input></span>' +
218        '<span class="label" >max:</span><span><input type="text" class="value maximum-items paging-input" ></input></span>' +
219  '<span class="cmd cmd_reload" />' +
220        '<span class="cmd cmd_prev">'+
221        //'<xsl:choose>' +
222        //      '<xsl:when test="$startItem = '1'">' +
223        //              '<xsl:attribute name="disabled">disabled</xsl:attribute>' +
224        //      '</xsl:when>' +
225        //'</xsl:choose>' +
226        '</span>' +
227        '<span class="cmd cmd_next">' + 
228        //'<xsl:choose>' +
229        //      '<xsl:when test="$maximumItems &gt; numberOfRecords or $maximumItems = numberOfRecords">' +
230        //              '<xsl:attribute name="disabled">disabled</xsl:attribute>' +
231        //      '</xsl:when>' +
232        //      '</xsl:choose>' +
233        '</span></div';
234       
235        $(header).append(paging);
236        $(header).find('.start-item').attr("value",startItem);
237        $(header).find('.maximum-items').attr("value",maximumItems);
238       
239        $(header).find('.cmd_reload').click(function(){
240                reloadPage($(this).closest('.cmds-ui-block'));
241                return false;
242        });
243       
244        $(header).find('.cmd_next').click(function(){
245                pageNext(this, 1);
246                return false;
247        });
248        $(header).find('.cmd_prev').click(function(){
249                pageNext(this, -1);
250                return false;
251        });     
252
253}
254
255function pageNext (cmd, pages) 
256{
257        //TODO
258        var numItems = $(cmd).closest('.header').attr('max-value'); //$(cmd).closest('.cmds-ui-block').children('.content').find('tr').length;
259        var startItem = $(cmd).closest('.header').attr('start-item');
260        var maximumItems = $(cmd).closest('.header').attr('maximum-items');
261       
262        var page_record_count = 10;
263        var start = 0;
264        var num = 0;
265        //var max_value = $('#' + qid ).find('.result-header').attr("max_value");
266
267        if (maximumItems > page_record_count) {
268                maximumItems = page_record_count;
269        }
270        if ((numItems >= maximumItems) && (pages > 0) ){
271                start = parseInt(startItem) + pages * page_record_count ;
272        } 
273        if ((pages < 0) && ((parseInt(startItem) + pages * parseInt(page_record_count) + parseInt(page_record_count) - 1) >= 1)) {
274                start = parseInt(startItem) + pages * parseInt(page_record_count);
275        }
276       
277        if (start > 0){
278                num = maximumItems;
279               
280                if (num > 0){
281                        $(cmd).closest('.header').find('.start-item').attr('value',start);
282                        $(cmd).closest('.header').find('.maximum-items').attr('value',num);
283                       
284                        reloadPage($(cmd).closest('.cmds-ui-block'));
285                }
286        }
287
288        /*
289        if (parseInt(startItem) + pages * page_record_count >= 1){
290                start = parseInt(startItem) + pages * page_record_count ;
291        } else  {
292                if (parseInt(startItem) + pages * page_record_count + page_record_count - 1 >= 1){
293                        start = 1 ;
294                }
295        }
296       
297        if (start > 0){
298                if (start + page_record_count - 1 <= numItems) {
299                        num = page_record_count;
300                } else if (start <= numItems){
301                        num = numItems - start;
302                }
303       
304                if (num > 0){
305                        $(cmd).closest('.header').find('.start-item').attr('value',start);
306                        $(cmd).closest('.header').find('.maximum-items').attr('value',num);
307                       
308                        reloadPage($(cmd).closest('.cmds-ui-block'));
309                }
310        }
311        */
312}
313
314function reloadPage (detail) {
315       
316        var uri;
317       
318        if ($(detail).parent().get(0).localName == "body") {
319                uri = document.URL;
320        } else {
321                uri = $(detail).parents('.number').children('a').attr('href');
322        }
323
324       
325        var startItem;
326        var maximumItems;
327       
328        //from paging attributes
329        startItem = $(detail).find('.header').find('.start-item').val();
330        maximumItems = $(detail).find('.header').find('.maximum-items').val();
331       
332
333        // create the uri params
334       
335        if (uri.indexOf("startItem=") > 0){
336                 temp = uri.substring(uri.indexOf("startItem="));
337                 len = temp.split("&")[0].length;
338                 uri = uri.replace(uri.substr(uri.indexOf("&startItem="),len+1),'');
339        }
340       
341        if (uri.indexOf("maximumItems=") > 0){
342                 temp = uri.substring(uri.indexOf("maximumItems="));
343                 len = temp.split("&")[0].length;
344                 uri = uri.replace(uri.substr(uri.indexOf("&maximumItems="),len+1),'');
345        } 
346       
347        uri = uri + "&startItem=" + startItem + "&maximumItems=" + maximumItems;
348
349        if ($(detail).parent().get(0).localName == "body") {
350                location.href = uri;
351//              window.open(uri);
352        } else {       
353                //remove old content
354                $(detail).children().remove();
355               
356                //load new content
357                $(detail).load(uri, function(event) {
358                        handleUIBlock($(this).children('.cmds-ui-block'));
359                        addPaging($(this).children('.cmds-ui-block'));
360                });
361        }
362}
363
364
365
366//TOOLTIP
367var tooltiptable = {};
368
369/**
370 * Helper-object for displaying tooltips
371 * @constructor
372 */
373var tooltip=function(){
374         var id = 'tt';
375         var top = 3;
376         var left = 3;
377         var maxw = 300;
378         var speed = 10;
379         var timer = 20;
380         var endalpha = 95;
381         var alpha = 0;
382         var tt,t,c,b,h;
383         var ie = document.all ? true : false;
384         return{
385
386        show:function(v,w){
387                 if(tt == null){
388                         tt  = document.createElement('div');
389                         tt.setAttribute('id',id);
390                         document.body.appendChild(tt);
391                         tt.style.opacity  = 0;
392                         tt.style.filter  = 'alpha(opacity=0)';
393                         document.onmousemove  = this.pos;
394                        }
395                 tt.style.zIndex = "1000";
396                tt.style.display  = 'block';
397                tt.innerHTML = v; 
398                tt.style.width  = w ? w + 'px' : 'auto';
399
400                        if(!w  && ie){
401                         tt.style.width  = tt.offsetWidth;
402                        }
403
404                        if(tt.offsetWidth  > maxw){tt.style.width = maxw + 'px';}
405
406                        h =  parseInt(tt.offsetHeight) + top;
407                        clearInterval(tt.timer);
408                        tt.timer =  setInterval(function(){tooltip.fade(1);},timer);
409                //$('body').find('.ac_results').css({'z-index' : '1000'});
410          },
411         
412          pos:function(e){
413           var u = ie ? event.clientY + document.documentElement.scrollTop : e.pageY;
414           var l = ie ? event.clientX + document.documentElement.scrollLeft : e.pageX;
415           tt.style.top = (u + h) + 'px'; //(u - h) + 'px';
416           tt.style.left = (l + left) + 'px';
417          },
418         
419          fade:function(d){
420           var a = alpha;
421           if((a != endalpha && d == 1) || (a != 0 && d == -1)){
422            var i = speed;
423           if(endalpha - a < speed && d == 1){
424            i = endalpha - a;
425           }else if(alpha < speed && d == -1){
426             i = a;
427           }
428           alpha = a + (i * d);
429           tt.style.opacity = alpha * .01;
430           tt.style.filter = 'alpha(opacity=' + alpha + ')';
431          }else{
432            clearInterval(tt.timer);
433             if(d == -1){tt.style.display = 'none';};
434          }
435         },
436       
437         hide:function(){
438                 if (tt != undefined) {
439                         clearInterval(tt.timer);
440                         tt.timer = setInterval(function(){tooltip.fade(-1);},timer);
441                 }
442          }
443         };
444        }();
445
446
447        function notifyUser (msg) {
448                var notifymessage = new NotifyMessage(new Date(),msg); 
449                notifyset.add(notifymessage);
450        }
451
452        function notifyUser (msg, type) {       
453               
454                        if (type=='debug' & !(typeof console == "undefined")) {
455                                console.log(msg);
456                        } else {
457                                var notifymessage = new NotifyMessage(new Date(),msg); 
458                                notifyset.add(notifymessage);
459                  }
460        }
Note: See TracBrowser for help on using the repository browser.