1/* 2 * jQuery selectbox 3 * 4 * Copyright 2011 cocoa-studio (http://www.cocoa-studio.com) 5 * 6*/ 7(function($) { 8 $.fn.selectbox = function(o,v) { 9 var obj = $(this); 10 var item = obj.data('item'); 11 var default_key=''; 12 var max_height=200; 13 var event_closed=false; 14 var width = 'auto'; 15 var option_css = ''; 16 var click_show = false; 17 var select_current = {}; 18 var select_option = {}; 19 var select_container = {}; 20 var select_option_wrap = {}; 21 var select_container_h = 0; 22 var item_width = false; //ì¤ë í¸ ìµì ë ì´ì´ ëì´ ì»¤ì¤í 23 var fixed_name = false; //current ì¤ë í¸ í ì¤í¸ ê³ ì 24 var multi_select = false; 25 var multi_all_value = 'ì ì²´ ìì´í '; 26 var multi_no_value = ''; 27 var muti_prefix = 'ê° ìì´í '; 28 var all_sel_value = false; 29 var all_sel_item_name = "ì ì²´ì í"; 30 var is_change = false; 31 var use_multi_all_value = true; 32 var max_select_count = 0; 33 34 /* 35 $select_current = $obj.data('select_current'); 36 $select_option = $obj.data('select_option'); 37 $select_container = $obj.data('select_container'); 38 */ 39 40 //alert($(this).eq(0).className); 41 42 //set select 43 44 function select_item(key){ 45 var i=0; 46 key = return_exist_keys(key); 47 if(obj.data('multi_select')){ 48 if(key.length>0){ 49 if(key.length==1){ 50 for(i=0; i<item.length; i++){ 51 if(item[i].key==key[0]){ 52 obj.find('div.select_current div.select_current_txt').html(item[i].title!=undefined ? item[i].title : item[i].value); 53 obj.data('current_value', item[i].value); 54 obj.data('current_key', key); 55 obj.data('current_tag', item[i].tag); 56 break; 57 } 58 } 59 }else{ 60 var multi_txt = key.length+obj.data('muti_prefix'); 61 if(obj.data('all_sel_value')){ //ì ì²´ì í ê¸°ë¥ ì¬ì©ì allì ì ê±°í ëë¨¸ì§ ì½ëê° ê°¯ìê° itemê°¯ìë ëì¼íë©´ ì ì²´ì íì¼ë¡ ì²´í¬ - lsy 62 if(key.length == item.length-1){ 63 if(use_multi_all_value){ 64 multi_txt = obj.data('multi_all_value'); 65 } 66 }else if(key.length==0) 67 multi_txt = obj.data('multi_no_value'); 68 }else{ 69 if(key.length == item.length){ 70 if(use_multi_all_value){ 71 multi_txt = obj.data('multi_all_value'); 72 } 73 }else if(key.length==0) 74 multi_txt = obj.data('multi_no_value'); 75 } 76 77 //obj.find('div.select_current div.select_current_txt').html(multi_txt); 78 //key = ''; 79 //}else{ 80 obj.find('div.select_current div.select_current_txt').html(multi_txt); 81 obj.data('current_value', key); 82 obj.data('current_key', key); 83 obj.data('current_tag', item[i].tag); 84 //} 85 } 86 } 87 if(key==''){ 88 var txt = obj.data('multi_no_value') !='' ? obj.data('multi_no_value') : obj.data('multi_all_value'); 89 obj.find('div.select_current div.select_current_txt').html(txt); 90 obj.data('current_value', txt); 91 obj.data('current_key', []); 92 obj.data('current_tag', ''); 93 } 94 }else{ 95 for(i=0; i<item.length; i++){ 96 if(key == '' && obj.data('fixed_name')){ 97 obj.find('div.select_current div.select_current_txt').html(obj.data('fixed_name')); 98 break; 99 }else{ 100 if(item[i].key==key){ 101 if (obj.data('fixed_name')) 102 obj.find('div.select_current div.select_current_txt').html(obj.data('fixed_name')); 103 else 104 obj.find('div.select_current div.select_current_txt').html(item[i].title!=undefined ? item[i].title : item[i].value); 105 if(click_show){ 106 $(".select_current_txt").css('width','auto'); 107 } 108 obj.data('current_value', item[i].value); 109 obj.data('current_key', key); 110 obj.data('current_tag', item[i].tag); 111 break; 112 } 113 } 114 } 115 } 116 } 117 118 //set disabled 119 function set_disabled(v){ 120 obj.data('is_disabled', v); 121 } 122 123 //set background color 124 function set_bgcolor(v){ 125 obj.find('div.select_current').css('background-color', v); 126 obj.find('div.select_option, div.select_container').css('background-color', v); 127 } 128 129 //make_selectbox 130 function make_selectbox(){ 131 var html = ''; 132 html += "<div class='select_current'><div class='select_current_txt'></div></div>"; 133 return html; 134 } 135 136 //make_selectbox_option 137 function make_selectbox_option(){ 138 var html = ''; 139 html += "<div class='select_option' style='visibility:hidden'>"; 140 if(obj.data('multi_select')) 141 html += "<div class='select_container multi'>"; 142 else 143 html += "<div class='select_container'>"; 144 145 //ì ì²´ì í ìµì ì¬ì©ì item ê°ì¥ìì ì ì²´ì í ìì´í ì¶ê° - lsy 146 if(obj.data('all_sel_value')){ 147 var _all_sel_item = {"key":"all","value":all_sel_item_name}; 148 item.unshift(_all_sel_item); 149 } 150 151 152 var i=0; 153 for(i=0; i<item.length; i++){ 154 //html += "<div class='select_item current'>"+ RemoveTag(o.item[i].value)+"</div>"; 155 html += "<div class='select_item _key_"+item[i].key+"'>"+ item[i].value+"</div>"; 156 } 157 html += "</div>"; 158 html += "</div>"; 159 return html; 160 } 161 162 //set max_height 163 function set_maxheight(){ 164 if(o.max_height) max_height = o.max_height; 165 /* 166 else if(o.max_cnt){ 167 var item_list = select_container.find('div.select_item'); 168 var max_cnt = 0; 169 max_cnt = o.max_cnt; 170 if(max_cnt>item_list.length) max_cnt = item_list.length; 171 h=0; 172 for(i=0; i<max_cnt; i++){ 173 h += item_list.eq(i).height(); 174 } 175 } 176 */ 177 select_container.css('max-height', max_height); 178 select_container.css('overflow', 'auto'); 179 } 180 181 //show_selectbox 182 function show_selectbox(){ 183 if(obj.data('all_sel_value')){//ì ì²´ì í ê¸°ë¥ ì¬ì©ì - lsy 184 var all_item_check = false;//ì ì²´ì íì ì²´í¬í기 ìí ë³ì - lsy 185 } 186 if(obj.data('is_disabled')) return; 187 if(click_show){ 188 select_option.css({ 189 'margin-left' : '5px' 190 }); 191 } 192 //container_item_offset_top 193 select_option.css({ 194 'visibility' : 'hidden', 195 'display' : 'block' 196 }); 197 select_container.find('div.select_item').each(function(){ 198 select_container_h += $(this).outerHeight(); 199 }); 200 var select_docu_h = $(window).height(); 201 var select_sc_t = $(window).scrollTop(); 202 var select_offset_t = obj.offset().top-select_sc_t; 203 if(o.max_height) max_height = o.max_height; 204 //select_current.text(select_container_h + "//"+max_height); 205 if(select_container_h < max_height){ 206 select_container_h = select_container_h; 207 }else{ 208 select_container_h = max_height; 209 } 210 var obj_h = Math.round(select_offset_t+select_current.outerHeight()+select_container_h); 211 //select_current.text(select_docu_h + "//"+select_sc_t); 212 if(select_docu_h < obj_h){ 213 if(obj.offset().top >350){ 214 select_option.css('top',select_container_h*(-1)); 215 }else{ 216 select_option.css('top',select_current.outerHeight()); 217 } 218 }else{ 219 select_option.css('top',select_current.outerHeight()); 220 } 221 select_container_h = 0; 222 223 224 select_option.css({ 225 'visibility' : 'visible' 226 }); 227 select_option_wrap.css({ 228 'position' : 'absolute', 229 'z-index' : 10000, 230 'top' : obj.offset().top, 231 'left' : obj.offset().left 232 }) 233 select_option.show(); 234 235 var sel_pos=-1; 236 if(obj.data('multi_select')){ 237 select_container.find('div.select_item').removeClass('current'); 238 if(obj.data('current_key').length ==0){ 239 //select_container.find('div.select_item').addClass('current'); 240 //sel_pos=0; 241 }else{ 242 if(obj.data('all_sel_value')) {//ì ì²´ì í ê¸°ë¥ ì¬ì©ì - lsy 243 if (item.length - 1 == obj.data('current_key').length) { // ì ì²´ì í í ê²½ì° - lsy 244 all_item_check = true; 245 } 246 } 247 $.each(obj.data('current_key'),function(index, current_keys){ 248 select_container.find('div._key_'+current_keys).addClass('current'); 249 }); 250 if(all_item_check === true) { //ì ì²´ì í ì¸ê²½ì° ì²´í¬ë°ì¤ íì±í ë¹íì±í ìì ì¶ê° - lsy 251 select_container.find('div._key_all').addClass('current'); 252 sel_pos=obj.data('current_key').length-1; 253 } 254 255 } 256 }else{ 257 select_container.find('div.select_item').each(function(no){ 258 if(item[no].key==obj.data('current_key') && !obj.data('fixed_name')){ 259 260 $(this).addClass('current'); 261 sel_pos=no; 262 }else 263 $(this).removeClass('current'); 264 }); 265 } 266 267 268 if(sel_pos>=0) 269 select_container.scrollTop(sel_pos*select_container.find('div.select_item').eq(0).height()); 270 271 $(document).bind('mousedown.selectbox', function(){ 272 hide_selectbox(); 273 }); 274 select_option.bind('mousedown.selectbox', function(e){ 275 e.stopPropagation(); 276 }); 277 }
278 click_show = o.click_show==undefined?click_show:o.click_show; 279 //hide_selectbox 280 function hide_selectbox(){ 281 select_option_wrap = $('body').find('#'+obj.attr('id')+"_option"); 282 select_option = select_option_wrap.find('div.select_option'); 283 $(document).unbind('mousedown.selectbox'); 284 select_option.unbind('mousedown.selectbox'); 285 if(click_show){ 286 287 select_option.hide(); 288 }else{ 289 select_option.hide(); 290 } 291 if(event_closed){ 292 o.closed(obj.data('current_key')); 293 } 294 295 if(!!obj.data('close') && is_change){ 296 obj.data('close')(obj.data('current_key')); 297 is_change = false; 298 } 299 } 300 301 function return_exist_keys(keys){ 302 if(!(!!keys)) return keys; 303 304 var item_length = item.length; 305 306 if(typeof keys == 'object'){ 307 var exist_keys = []; 308 var key_length = keys.length; 309 for(var i=0; i<key_length; i++){ 310 for(var j=0; j<item_length; j++){ 311 if(keys[i] == item[j].key){ 312 exist_keys.push(keys[i]); 313 } 314 } 315 } 316 return exist_keys; 317 } else { 318 var item_length = item.length; 319 for(var i=0; i<item_length; i++){ 320 if(keys == item[i].key){ 321 return keys; 322 } 323 } 324 return ''; 325 } 326 } 327 328 switch(o){ 329 case 'get_key': 330 return obj.data('current_key'); 331 break; 332 case 'get_value': 333 return obj.data('current_value'); 334 break; 335 case 'get_tag': 336 return obj.data('current_tag'); 337 break; 338 case 'set_key': 339 select_item(v); 340 break; 341 case 'set_bgcolor': 342 set_bgcolor(v); 343 break; 344 case 'select_item': 345 select_item(v); 346 obj.data('change')(v); 347 break; 348 case 'set_disabled': 349 set_disabled(v); 350 break; 351 case 'hide': 352 hide_selectbox(); 353 break; 354 case 'show': 355 obj.find('div.select_current').click(); 356 $(this).show(); 357 break; 358 case 'remove': 359 $('#'+$(this).attr('id')+"_option").remove(); 360 $(this).empty(); 361 break; 362 case 'destroy': 363 $('#'+$(this).attr('id')+"_option").remove(); 364 $(this).empty(); 365 obj.removeData(); 366 break; 367 case 'is_select_all': 368 var current_select_keys = obj.data('current_key'); 369 if(obj.data('all_sel_value')){ //ì ì²´ì í ê¸°ë¥ ì¬ì©ì allì ì ê±°í ëë¨¸ì§ ì½ëê° ê°¯ìê° itemê°¯ìë ëì¼íë©´ ì ì²´ì íì¼ë¡ ì²´í¬ - lsy 370 if(current_select_keys.length == item.length-1){ 371 return true; 372 } 373 }else{ 374 if(current_select_keys.length == item.length){ 375 return true; 376 } 377 } 378 379 return false; 380 case 'is_not_select': 381 var current_select_keys = obj.data('current_key'); 382 if(obj.data('all_sel_value')){ //ì ì²´ì í ê¸°ë¥ ì¬ì©ì allì ì ê±°í ëë¨¸ì§ ì½ëê° ê°¯ìê° itemê°¯ìë ëì¼íë©´ ì ì²´ì íì¼ë¡ ì²´í¬ - lsy 383 if(current_select_keys.length == 0){ 384 return true; 385 } 386 } 387 return false; 388 break; 389 default: 390 // change ì´ë²¤í¸ 391 if(!!o.change) obj.data('change', o.change); 392 else { o.change = function(key){}; } 393 // close ì´ë²¤í¸ 394 if(!!o.close) obj.data('close', o.close); 395 396 if(o.all_sel_value === true){ // ì ì²´ì í ê¸°ë¥ ì¬ì©ì - lsy 397 item = o.item.concat(); 398 }else{ 399 item = o.item; 400 } 401 obj.data('item', item); 402 if(o.fixed_name) 403 obj.data('fixed_name', o.fixed_name);//fixed_name = o.fixed_name; 404 else 405 obj.data('fixed_name', fixed_name); 406 if(o.multi_select) 407 obj.data('multi_select', o.multi_select);//fixed_name = o.fixed_name; 408 else 409 obj.data('multi_select', multi_select); 410 if(o.muti_prefix) 411 obj.data('muti_prefix', o.muti_prefix);//fixed_name = o.fixed_name; 412 else 413 obj.data('muti_prefix', muti_prefix); 414 if(o.multi_all_value) 415 obj.data('multi_all_value', o.multi_all_value);//fixed_name = o.fixed_name; 416 else 417 obj.data('multi_all_value', multi_all_value); 418 if(o.multi_no_value) 419 obj.data('multi_no_value', o.multi_no_value);//fixed_name = o.fixed_name; 420 else 421 obj.data('multi_no_value', multi_no_value); 422 423 if(o.all_sel_value) // ì ì²´ì í ê¸°ë¥ ì¬ì© ì 무 - lsy 424 obj.data('all_sel_value', o.all_sel_value);//fixed_name = o.fixed_name; 425 else 426 obj.data('all_sel_value', all_sel_value); 427 428 if(o.all_sel_item_name) // ì ì²´ì í ì 문구 - lsy 429 obj.data('all_sel_item_name', o.all_sel_item_name);//fixed_name = o.fixed_name; 430 else 431 obj.data('all_sel_item_name', all_sel_item_name); 432 433 use_multi_all_value = (o.use_multi_all_value===false ? false : true); 434 max_select_count = (!!o.max_select_count ? o.max_select_count : 0); 435 436 if(o.default_key!='') default_key = o.default_key; 437 438 439 440 if(typeof o.width=="string"){ 441 if(o.width.indexOf("%")) width = o.width; 442 }else if(o.width>0){ 443 width = o.width; 444 } 445 446 //ëì´ % ì¤ì ììí´ ì£¼ì ì²ë¦¬ ì ë´ì©ì¼ë¡ ëì²´ 447 //if(o.width>0) width = o.width; 448 449 450 if(o.option_css!='') option_css = o.option_css; 451 if(o.disabled) set_disabled(true); 452 453 if(typeof o.width=="string"){ 454 if(o.width.indexOf("%")) item_width = o.item_width; 455 }else if(o.item_width=='auto'){ 456 item_width = 'auto'; 457 }else if(o.item_width>0){ 458 item_width = o.item_width; 459 } 460 //ëì´ % ì¤ì ììí´ ì£¼ì ì²ë¦¬ ì ë´ì©ì¼ë¡ ëì²´ 461 //if(o.item_width>0) item_width = o.item_width; 462 463 if(o.event_closed==true){ 464 event_closed = true; 465 } 466 467 //draw selectbox
468 if($(this).attr('id')==undefined){ 469 $(this).attr('id',make_uniqid(8)); 470 } 471 472 select_option_wrap = $('#'+$(this).attr('id')+"_option"); 473 if(select_option_wrap.length <= 0){ 474 cocoa_select_box_op='<div class="select_type_option '+option_css+'" id="'+$(this).attr('id')+"_option" +'"></div>'; 475 $('body').append(cocoa_select_box_op); 476 select_option_wrap = $('#'+$(this).attr('id')+"_option"); 477 } 478 479 480 $(this).empty(); 481 $(this).html(make_selectbox()); 482 select_option_wrap.html(make_selectbox_option()); 483 $(this).width(width); 484 485 //make event handler 486 select_current = $(this).find('div.select_current'); 487 select_option = select_option_wrap.find('div.select_option'); 488 select_container = select_option_wrap.find('div.select_container'); 489 /* 490 $obj.data('select_current', $select_current); 491 $obj.data('select_option', $select_option); 492 $obj.data('select_container', $select_container); 493 */ 494 495 496 if(typeof o.width=="string"){ 497 if(o.width.indexOf("%")) select_option.width($(this).outerWidth()-2); 498 }else if(item_width=='auto'){ 499 select_option.width('auto'); 500 }else if(item_width>0){ 501 select_option.width(item_width); 502 }else{ 503 select_option.width(width-2); 504 } 505 506 //ëì´ % ì¤ì ììí´ ì£¼ì ì²ë¦¬ ì ë´ì©ì¼ë¡ ëì²´ 507/* if(item_width>0) select_option.width(item_width); 508 else select_option.width(width-2);*/ 509 510 select_current.click(function(){ 511 if(click_show){ 512 513 show_selectbox(); 514 }else{ 515 show_selectbox(); 516 } 517 }); 518 select_container.find('div.select_item').each(function(no){ 519 $(this).click(function(){ 520 if(obj.data('multi_select')){ 521 var key_array = []; 522 key_array = obj.data('current_key'); 523 var key_len = key_array.length; 524 for(var i=0; i < key_len; i++){ 525 if(item[no].key == 'all'){//ì ì²´ ì íì´ ë ìíìì íë² ë ì²´í¬ì ì ì²´ì í í´ì - lsy 526 key_array.splice(i,key_len); 527 break; 528 } 529 if(key_array[i] == item[no].key){ 530 key_array.splice(i,1); 531 break; 532 } 533 } 534 535 if(item[no].key=="all"){//ì ì²´ ì íì - lsy 536 if(i == key_len){ 537 for(var i=0 ; i < item.length ; i++){ 538 if(item[i].key != "all"){ 539 key_array.push(item[i].key); 540 } 541 } 542 } 543 }else{ 544 if(i == key_len) key_array.push(item[no].key); 545 } 546 547 if(!all_sel_value && max_select_count > 0){ 548 if(key_array.length > max_select_count){ 549 alert(GetLangMsg('ADMIN_CONFIG_SNS_MAX_STRING', [max_select_count])); 550 return false; 551 } 552 } 553 select_item(key_array); 554 show_selectbox(); 555 is_change = true; 556 o.change(key_array); //raise event 557 }else{ 558 select_item(item[no].key); 559 hide_selectbox(); 560 is_change = true; 561 o.change(item[no].key); //raise event 562 } 563 }); 564 }); 565 566 //init selectbox 567 set_maxheight(); 568 569 if(obj.data('multi_select')){ 570 select_item(default_key); 571 }else{ 572 if(obj.data('fixed_name')) 573 select_item(default_key); 574 else 575 select_item(default_key!='' ? default_key : item[0].key); 576 } 577 select_option.css({ 578 'visibility' : 'visible', 579 'display' : 'none' 580 }); 581 582 if(o.bgcolor!='') set_bgcolor(o.bgcolor); 583 } 584 }; 585})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.