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