Changeset 16518
- Timestamp:
- 06/01/08 11:09:28 (4 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/midcom/midcom.helper.datamanager2/static/chooser/jquery.chooser_widget.css
r14455 r16518 137 137 } 138 138 139 ul.chooser_widget_results.ui-sortable .chooser_widget_item_part_status 140 { 141 margin-right: 23px; 142 margin-left: -30px; 143 } 144 139 145 .chooser_widget_result_item_active 140 146 { … … 178 184 background : url('../../stock-icons/16x16/approved_fade_50.png') center center no-repeat; 179 185 } 186 187 ul.chooser_widget_results.ui-sortable .chooser_widget_results_item_dragger 188 { 189 width: 20px; 190 height: 22px; 191 margin-left: -20px; 192 float: left; 193 cursor: move; 194 } 195 196 ul.chooser_widget_headers.ui-sortable 197 { 198 background : url('../../stock-icons/16x16/topic-score.png') left center no-repeat; 199 } 200 201 ul.chooser_widget_headers.ui-sortable li, 202 ul.chooser_widget_results.ui-sortable li 203 { 204 padding-left: 20px; 205 } trunk/midcom/midcom.helper.datamanager2/static/chooser/jquery.chooser_widget.js
r16517 r16518 224 224 function request(term, success, failure) 225 225 { 226 console.log(success);227 226 last_term = term; 228 227 … … 265 264 function stopLoading(type, expobj) 266 265 { 267 console.log(expobj);268 266 input_element.removeClass(CLASSES.IDLE); 269 267 input_element.removeClass(CLASSES.FAILED); … … 434 432 if (last_term != 'undefined') 435 433 { 436 creation_url += '?defaults[' + options.creation_default_key + '] =' + last_term;434 creation_url += '?defaults[' + options.creation_default_key + '] = ' + last_term; 437 435 } 438 436 … … 468 466 creation_handler: null, 469 467 creation_default_key: null, 468 sortable: false, 470 469 format_items: null 471 470 }; … … 490 489 var headers = jQuery('<ul class="chooser_widget_headers"></ul>').appendTo(element); 491 490 var list = jQuery('<ul class="chooser_widget_results"></ul>').appendTo(element); 492 491 493 492 var has_content = false, 494 493 list_items = [], … … 544 543 function dataToDom() 545 544 { 546 for (var i =0; i < data.length; i++)545 for (var i = 0; i < data.length; i++) 547 546 { 548 547 if (!data[i]) … … 591 590 //console.log('data.guid: ' + data.guid); 592 591 593 var n =null;592 var n = null; 594 593 595 594 var item_id = data[options.id_field]; … … 623 622 624 623 var li_elem = jQuery('<li>') 625 .attr({ id: options.widget_id + '_result_item_' + item_id }) 626 .attr('deleted','false') 627 .attr('keep_on_list','false') 628 .attr('pre_selected','false') 629 .addClass('chooser_widget_result_item') 630 .click(function(event) 631 { 632 var li_element = target(event); 633 jQuery('#' + options.widget_id + '_search_input').focus(); 634 var current_keep_status = jQuery(li_element).attr('keep_on_list'); 635 var current_delete_status = jQuery(li_element).attr('deleted'); 636 var current_presel_status = jQuery(li_element).attr('pre_selected'); 637 638 if (current_keep_status == 'true') 639 { 640 if (current_delete_status == 'false') 624 .attr({ id: options.widget_id + '_result_item_' + item_id }) 625 .attr('deleted','false') 626 .attr('keep_on_list','false') 627 .attr('pre_selected','false') 628 .addClass('chooser_widget_result_item') 629 .click(function(event) 630 { 631 var li_element = target(event); 632 jQuery('#' + options.widget_id + '_search_input').focus(); 633 var current_keep_status = jQuery(li_element).attr('keep_on_list'); 634 var current_delete_status = jQuery(li_element).attr('deleted'); 635 var current_presel_status = jQuery(li_element).attr('pre_selected'); 636 637 if (current_keep_status == 'true') 641 638 { 642 jQuery(li_element).removeClass(CLASSES.ACTIVE); 643 if (current_presel_status == 'true') 639 if (current_delete_status == 'false') 644 640 { 645 remove(item_id); 641 jQuery(li_element).removeClass(CLASSES.ACTIVE); 642 if (current_presel_status == 'true') 643 { 644 remove(item_id); 645 } 646 else 647 { 648 inactivate(item_id); 649 } 646 650 } 647 651 else 648 652 { 649 inactivate(item_id); 653 if(options.allow_multiple) 654 { 655 restore(item_id); 656 } 657 else 658 { 659 activate(item_id); 660 } 650 661 } 662 663 return false; 651 664 } 652 665 else 653 666 { 654 if(options.allow_multiple) 655 { 656 restore(item_id); 657 } 658 else 659 { 660 activate(item_id); 661 } 667 activate(item_id); 662 668 } 663 664 return false; 665 } 666 else 667 { 668 activate(item_id); 669 } 670 }) 671 .mouseover( function(event) 672 { 673 var jq_elem = jQuery(target(event)).addClass(CLASSES.HOVER); 674 }) 675 .mouseout( function(event) 676 { 677 jQuery(target(event)).removeClass(CLASSES.HOVER); 678 }); 669 }) 670 .mouseover( function(event) 671 { 672 var jq_elem = jQuery(target(event)).addClass(CLASSES.HOVER); 673 }) 674 .mouseout( function(event) 675 { 676 jQuery(target(event)).removeClass(CLASSES.HOVER); 677 }); 679 678 680 679 if (data['pre_selected']) … … 710 709 .prependTo(li_elem); 711 710 711 jQuery('<input type="hidden" />') 712 .attr('name', 'sortable[' + options.widget_id + '][]') 713 .attr('value', item_id); 714 712 715 li_elem.appendTo(list); 713 714 716 list_items.push(item_id); 715 } 716 717 718 if (options.sortable) 719 { 720 jQuery(list).create_sortable(); 721 } 722 } 723 724 725 /** 726 * 727 * 728 * @param int step 729 */ 717 730 function moveSelect(step) 718 731 { … … 728 741 }; 729 742 743 /** 744 * 745 */ 730 746 function wrapSelection() 731 747 { … … 740 756 } 741 757 758 /** 759 * 760 * 761 * @param String id ID of the chooser widget 762 */ 742 763 function remove(id) 743 764 { 744 765 jQuery('#' + options.widget_id + '_result_item_' + id + '_input', list).attr({ value: 0 }); 745 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.ACTIVE); 746 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.INACTIVE); 747 jQuery('#' + options.widget_id + '_result_item_' + id).addClass(CLASSES.DELETED); 748 jQuery('#' + options.widget_id + '_result_item_' + id).attr('deleted','true'); 749 selected_items = jQuery.grep( selected_items, function(n,i) 766 767 jQuery('#' + options.widget_id + '_result_item_' + id) 768 .removeClass(CLASSES.ACTIVE) 769 .removeClass(CLASSES.INACTIVE) 770 .addClass(CLASSES.DELETED) 771 .attr('deleted','true'); 772 773 selected_items = jQuery.grep(selected_items, function(n,i) 750 774 { 751 775 return n != id; … … 753 777 } 754 778 779 /** 780 * 781 * 782 * @param String id ID of the chooser widget 783 */ 755 784 function restore(id) 756 785 { 757 786 jQuery('#' + options.widget_id + '_result_item_' + id + '_input', list).attr({ value: id }); 758 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.DELETED); 759 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.INACTIVE); 760 jQuery('#' + options.widget_id + '_result_item_' + id).addClass(CLASSES.ACTIVE); 761 jQuery('#' + options.widget_id + '_result_item_' + id).attr('deleted','false'); 787 788 jQuery('#' + options.widget_id + '_result_item_' + id) 789 .removeClass(CLASSES.DELETED) 790 .removeClass(CLASSES.INACTIVE) 791 .addClass(CLASSES.ACTIVE) 792 .attr('deleted','false'); 793 762 794 selected_items.push(id); 763 795 } 764 796 797 /** 798 * Activate an item 799 * 800 * @param String id ID of the chooser widget 801 */ 765 802 function activate(id) 766 803 { … … 772 809 773 810 jQuery('#' + options.widget_id + '_result_item_' + id + '_input', list).attr({ value: id }); 774 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.DELETED); 775 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.INACTIVE); 776 jQuery('#' + options.widget_id + '_result_item_' + id).addClass(CLASSES.ACTIVE); 777 jQuery('#' + options.widget_id + '_result_item_' + id).attr('keep_on_list','true'); 778 jQuery('#' + options.widget_id + '_result_item_' + id).attr('deleted','false'); 811 812 jQuery('#' + options.widget_id + '_result_item_' + id) 813 .removeClass(CLASSES.DELETED) 814 .removeClass(CLASSES.INACTIVE) 815 .addClass(CLASSES.ACTIVE) 816 .attr('keep_on_list','true') 817 .attr('deleted','false'); 779 818 selected_items.push(id); 780 819 } 781 820 821 /** 822 * Inactivate an item 823 * 824 * @param String id ID of the chooser widget 825 */ 782 826 function inactivate(id) 783 827 { 784 828 jQuery('#' + options.widget_id + '_result_item_' + id + '_input', list).attr({ value: 0 }); 785 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.DELETED); 786 jQuery('#' + options.widget_id + '_result_item_' + id).removeClass(CLASSES.ACTIVE); 787 jQuery('#' + options.widget_id + '_result_item_' + id).addClass(CLASSES.INACTIVE); 788 jQuery('#' + options.widget_id + '_result_item_' + id).attr('keep_on_list','false'); 789 jQuery('#' + options.widget_id + '_result_item_' + id).attr('deleted','false'); 829 830 jQuery('#' + options.widget_id + '_result_item_' + id) 831 .removeClass(CLASSES.DELETED) 832 .removeClass(CLASSES.ACTIVE) 833 .addClass(CLASSES.INACTIVE) 834 .attr('keep_on_list','false') 835 .attr('deleted','false'); 836 790 837 //selected_items.push(id); 791 838 selected_items = jQuery.grep( selected_items, function(n,i) … … 795 842 } 796 843 844 /** 845 * Delete unselected items from the list 846 */ 797 847 function delete_unseleted_from_list() 798 848 { … … 816 866 jQuery('#' + options.widget_id + '_results li.' + CLASSES.HOVER).removeClass(CLASSES.HOVER); 817 867 active = -1; 818 } 819 868 869 if ( options.sortable 870 && jQuery(list).attr('sortable')) 871 { 872 // Get rid of the cached positions and create the sortable again 873 jQuery(list).sortable('destroy'); 874 jQuery(list).create_sortable(); 875 } 876 } 877 878 /** 879 * 880 * 881 * @param Array array 882 * @param String valueToUnset 883 */ 820 884 function unset(array, valueToUnset, valueOrIndex, isHash) 821 885 { … … 829 893 continue; 830 894 }; 831 if (! isHash)895 if (!isHash) 832 896 { 833 output[++output.length-1] =array[i];897 output[++output.length-1] = array[i]; 834 898 } 835 899 else 836 900 { 837 output[i] =array[i];901 output[i] = array[i]; 838 902 } 839 903 } … … 846 910 if (! isHash) 847 911 { 848 output[++output.length-1] =array[i];912 output[++output.length-1] = array[i]; 849 913 } 850 914 else 851 915 { 852 output[i] =array[i];916 output[i] = array[i]; 853 917 } 854 918 } … … 948 1012 { 949 1013 var formatted = ''; 950 1014 951 1015 var item_parts = jQuery('<div>') 952 .attr({ id: options.widget_id + '_result_item_parts_' + item.id }) 953 .addClass('chooser_widget_result_item_parts'); 1016 .attr({ id: options.widget_id + '_result_item_parts_' + item.id }) 1017 .addClass('chooser_widget_result_item_parts'); 1018 1019 var item_dragger = jQuery('<div>') 1020 .attr({id: options.widget_id + '_result_item_dragger_' + item.id}) 1021 .addClass('chooser_widget_results_item_dragger') 1022 .appendTo(item_parts); 954 1023 955 1024 var item_content = jQuery('<div>') … … 986 1055 987 1056 item_content = jQuery('<div>') 988 .addClass('chooser_widget_item_part_status')989 .html( ' ' )990 .appendTo(item_parts);1057 .addClass('chooser_widget_item_part_status') 1058 .html( ' ' ) 1059 .appendTo(item_parts); 991 1060 992 1061 return item_parts; … … 1030 1099 return formatted; 1031 1100 } 1101 1102 1103 jQuery.fn.create_sortable = function() 1104 { 1105 // Create the sortable list, if there are more than one item in the list 1106 if (jQuery(this).find('li').size() <= 1) 1107 { 1108 if (jQuery(this).attr('sortable')) 1109 { 1110 jQuery(this).sortable('destroy'); 1111 jQuery(this).parent().find('ul.chooser_widget_headers').removeClass('ui-sortable'); 1112 } 1113 return; 1114 } 1115 1116 jQuery(this).sortable('destroy'); 1117 jQuery(this).sortable( 1118 { 1119 handle: 'div.chooser_widget_results_item_dragger', 1120 containment: jQuery(this) 1121 }); 1122 1123 if (!jQuery(this).attr('sortable')) 1124 { 1125 jQuery(this).attr('sortable'); 1126 } 1127 1128 // Add the sortable class also to the result headers to maintain consistency 1129 jQuery(this).parent().find('ul.chooser_widget_headers').addClass('ui-sortable'); 1130 } trunk/midcom/midcom.helper.datamanager2/widget/chooser.php
r16517 r16518 302 302 303 303 var $js_format_items = array(); 304 305 /** 306 * Should the sorting be enabled 307 * 308 * @var boolean True if the sorting should be enabled 309 */ 310 var $sortable = false; 304 311 305 312 /** … … 380 387 ) 381 388 ); 382 389 390 if ($this->sortable) 391 { 392 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/jQuery/jquery.dimensions-1.1.2.pack.js'); 393 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/jQuery/ui/ui.mouse.js'); 394 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/jQuery/ui/ui.draggable.js'); 395 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/jQuery/ui/ui.droppable.js'); 396 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/jQuery/ui/ui.sortable.js'); 397 } 398 383 399 $_MIDCOM->add_jsfile(MIDCOM_STATIC_URL . '/midcom.helper.datamanager2/chooser/jquery.chooser_widget.js'); 384 400 … … 939 955 $this->_js_widget_options['id_field'] = "'$this->id_field'"; 940 956 $this->_js_widget_options['format_items'] = 'null'; 957 958 if ($this->sortable) 959 { 960 $this->_js_widget_options['sortable'] = 'true'; 961 } 941 962 942 963 if ($this->creation_mode_enabled) … … 1572 1593 // debug_pop(); 1573 1594 } 1574 1575 1595 } 1576 1577 1596 ?>
