Skip to:
Content

BuddyPress.org

Changeset 3477


Ignore:
Timestamp:
11/22/2010 08:45:14 PM (10 years ago)
Author:
djpaul
Message:

Minify core js/css. Set SCRIPT_DEBUG to load the dev versions. Fixes #1891

Location:
trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/bp-core/admin/bp-core-admin.php

    r3443 r3477  
    262262
    263263function bp_core_add_admin_menu_styles() {
    264     wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', BP_PLUGIN_URL . '/bp-core/css/admin.css' ) );
     264    if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     265        wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', BP_PLUGIN_URL . '/bp-core/css/admin.dev.css' ) );
     266    else
     267        wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', BP_PLUGIN_URL . '/bp-core/css/admin.css' ) );
     268
    265269    wp_enqueue_script( 'thickbox' );
    266270    wp_enqueue_style( 'thickbox' );
  • trunk/bp-core/admin/bp-core-upgrade.php

    r3464 r3477  
    12761276
    12771277function bp_core_add_admin_menu_styles() {
    1278     wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', plugins_url( $path = '/buddypress' ) . '/bp-core/css/admin.css' ) );
     1278    if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     1279        wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', plugins_url( $path = '/buddypress' ) . '/bp-core/css/admin.dev.css' ) );
     1280    else
     1281        wp_enqueue_style( 'bp-admin-css', apply_filters( 'bp_core_admin_css', plugins_url( $path = '/buddypress' ) . '/bp-core/css/admin.css' ) );
     1282
    12791283    wp_enqueue_script( 'thickbox' );
    12801284    wp_enqueue_style( 'thickbox' );
  • trunk/bp-core/bp-core-widgets.php

    r3426 r3477  
    1616        parent::WP_Widget( false, $name = __( 'Members', 'buddypress' ), $widget_ops );
    1717
    18         if ( is_active_widget( false, false, $this->id_base ) )
    19             wp_enqueue_script( 'bp_core_widget_members-js', BP_PLUGIN_URL . '/bp-core/js/widget-members.js', array('jquery') );
     18        if ( is_active_widget( false, false, $this->id_base ) ) {
     19            if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     20                wp_enqueue_script( 'bp_core_widget_members-js', BP_PLUGIN_URL . '/bp-core/js/widget-members.dev.js', array( 'jquery' ) );
     21            else
     22                wp_enqueue_script( 'bp_core_widget_members-js', BP_PLUGIN_URL . '/bp-core/js/widget-members.js', array( 'jquery' ) );
     23        }
    2024    }
    2125
  • trunk/bp-core/css/admin.css

    r2863 r3477  
    1 div#bp-admin {
    2     background: #fff;
    3     margin: 25px 15px 25px 0;
    4     padding: 20px;
    5     -moz-border-radius: 6px;
    6     -webkit-border-radius: 6px;
    7     border-radius: 6px;
    8     -moz-box-shadow: #eee 0 -1px 4px;
    9     -webkit-box-shadow: #eee 0 -1px 4px;
    10     -khtml-box-shadow: #eee 0 -1px 4px;
    11     box-shadow: #eee 0 -1px 4px;
    12     font-family: helvetica, arial, tahoma, sans-serif;
    13     color: #555;
    14     overflow: hidden;
    15     min-width: 680px;
    16 }
    17     div#bp-admin p { line-height: 170%; }
    18 
    19 div#bp-admin div#bp-admin-header {
    20     height: 60px;
    21 }
    22 
    23 div#bp-admin h3, div#bp-admin h4 {
    24     margin: 0;
    25 }
    26     div#bp-admin h2 {
    27         font-family: helvetica, arial, tahoma, sans-serif;
    28         color: #555;
    29         font-style: normal;
    30         font-weight: bold;
    31         font-size: 22px;
    32     }
    33 
    34     div#bp-admin h3 {
    35         text-indent: -999em;
    36         overflow: hidden;
    37         width: 212px;
    38         height: 49px;
    39         background: url( ../images/logo.gif ) top left no-repeat;
    40         border-right: 1px solid #eee;
    41         padding-right: 20px;
    42         float: left;
    43     }
    44 
    45     div#bp-admin h4 {
    46         padding-left: 20px;
    47         font-size: 28px;
    48         float: left;
    49         margin: 17px 0 0 0;
    50     }
    51 
    52 div#bp-admin-nav {
    53     background: #f0f0f0;
    54     margin: 15px -19px 10px -19px;
    55     padding: 8px 19px 0 19px;
    56     height: 30px;
    57 }
    58     div#bp-admin-nav ol {
    59         list-style-type: decimal;
    60         margin: 0;
    61         padding: 0;
    62     }
    63         div#bp-admin-nav ol li {
    64             float: left;
    65             margin: 0 10px 0 0;
    66             color: #bbb;
    67         }
    68             div#bp-admin-nav ol li {
    69                 padding: 8px 12px;
    70                 display: block;
    71                 -moz-border-radius: 3px;
    72                 -webkit-border-radius: 3px;
    73                 border-radius: 3px;
    74                 text-decoration: none;
    75             }
    76                 div#bp-admin-nav ol li.current {
    77                     background: #fff;
    78                     color: #555;
    79                 }
    80     div#bp-admin-nav ol li span.complete {
    81         background: url( ../images/completed.gif ) center left no-repeat;
    82         padding: 6px;
    83     }
    84 
    85 div#bp-admin div.left-col, div#bp-admin div.right-col {
    86     width: 323px;
    87     float: left;
    88     margin: 15px 30px 0 0;
    89 }
    90 div#bp-admin div.right-col { margin-right: 0; }
    91 
    92 div.component {
    93     width: 323px;
    94     margin: 10px 0 40px 0;
    95 }
    96     div.component div.radio {
    97         position: relative;
    98         background: #f4f4f4;
    99         padding: 5px 10px;
    100         -moz-border-radius: 3px;
    101         -webkit-border-radius: 3px;
    102         border-radius: 3px;
    103         top: -6px;
    104         right: 10px;
    105     }
    106 
    107     div.component img {
    108         margin-top: 2px;
    109     }
    110 
    111     div.component p {
    112         margin-left: 4px;
    113     }
    114 
    115     div.component h5 {
    116         font-size: 15px;
    117         float: left;
    118         margin: 0 0 0 4px;
    119     }
    120 
    121     div.component div.radio {
    122         font-size: 11px;
    123         float: right;
    124     }
    125 
    126 div#bp-admin div.prev-next, div#bp-admin div.prev-next p,
    127 div#bp-admin div.submit, div#bp-admin div.submit p {
    128     margin: 0;
    129     padding: 0;
    130 }
    131 div#bp-admin div.submit { margin-top: 30px; }
    132 div#bp-admin div.prev-next { text-align: right; margin-top: 0; }
    133 
    134 div#bp-admin div.prev-next {
    135     border-bottom: 1px solid #f0f0f0;
    136     margin: 0 -20px;
    137     padding: 0 20px 10px;
    138 }
    139 
    140 div#bp-admin table td {
    141     font-family: helvetica, arial, tahoma, sans-serif;
    142 }
    143 
    144 div#bp-admin table.form-table th {
    145     border-right: 1px solid #eee;
    146     width: 208px;
    147     padding: 15px 25px 15px 0;
    148     color: #555;
    149 }
    150     div#bp-admin table.form-table tr {
    151         border-bottom: 1px dotted #f0f0f0;
    152     }
    153     div#bp-admin table.form-table td { padding-left: 25px; font-size: 12px; }
    154 
    155     div#bp-admin table.form-table th h5 {
    156         font-size: 14px;
    157         margin: 0;
    158         line-height: 150%;
    159     }
    160 
    161     div#bp-admin table.form-table th img {
    162         margin-top: 5px;
    163     }
    164 
    165     div#bp-admin table.form-table th p { margin: 3px 0 0 0; }
    166 
    167 div#bp-admin code, div#bp-admin kbd {
    168     font-size: 12px;
    169     background: #f0f0f0;
    170 }
    171 
    172 div#bp-admin div#message code, div#bp-admin div#message kbd {
    173     background: #ffe293;
    174 }
    175 
    176 a.button {
    177     padding-top: 4px;
    178 }
    179 
    180 a.installed, a.installed:hover, a.installed:active {
    181     padding-left: 15px;
    182     color: #888;
    183     border-color: #ccc;
    184     cursor: default;
    185 }
    186 
    187 a.installed span {
    188     background: url( ../images/installed.gif) left center no-repeat;
    189     padding: 6px 10px 7px 6px;
    190     margin-left: -5px;
    191 }
     1div#bp-admin{background:#fff;margin:25px 15px 25px 0;padding:20px;-moz-border-radius:6px;-webkit-border-radius:6px;border-radius:6px;-moz-box-shadow:#eee 0 -1px 4px;-webkit-box-shadow:#eee 0 -1px 4px;-khtml-box-shadow:#eee 0 -1px 4px;box-shadow:#eee 0 -1px 4px;font-family:helvetica,arial,tahoma,sans-serif;color:#555;overflow:hidden;min-width:680px;}div#bp-admin p{line-height:170%;}div#bp-admin div#bp-admin-header{height:60px;}div#bp-admin h3,div#bp-admin h4{margin:0;}div#bp-admin h2{font-family:helvetica,arial,tahoma,sans-serif;color:#555;font-style:normal;font-weight:bold;font-size:22px;}div#bp-admin h3{text-indent:-999em;overflow:hidden;width:212px;height:49px;background:url(../images/logo.gif) top left no-repeat;border-right:1px solid #eee;padding-right:20px;float:left;}div#bp-admin h4{padding-left:20px;font-size:28px;float:left;margin:17px 0 0 0;}div#bp-admin-nav{background:#f0f0f0;margin:15px -19px 10px -19px;padding:8px 19px 0 19px;height:30px;}div#bp-admin-nav ol{list-style-type:decimal;margin:0;padding:0;}div#bp-admin-nav ol li{float:left;margin:0 10px 0 0;color:#bbb;}div#bp-admin-nav ol li{padding:8px 12px;display:block;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;text-decoration:none;}div#bp-admin-nav ol li.current{background:#fff;color:#555;}div#bp-admin-nav ol li span.complete{background:url(../images/completed.gif) center left no-repeat;padding:6px;}div#bp-admin div.left-col,div#bp-admin div.right-col{width:323px;float:left;margin:15px 30px 0 0;}div#bp-admin div.right-col{margin-right:0;}div.component{width:323px;margin:10px 0 40px 0;}div.component div.radio{position:relative;background:#f4f4f4;padding:5px 10px;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;top:-6px;right:10px;}div.component img{margin-top:2px;}div.component p{margin-left:4px;}div.component h5{font-size:15px;float:left;margin:0 0 0 4px;}div.component div.radio{font-size:11px;float:right;}div#bp-admin div.prev-next,div#bp-admin div.prev-next p,div#bp-admin div.submit,div#bp-admin div.submit p{margin:0;padding:0;}div#bp-admin div.submit{margin-top:30px;}div#bp-admin div.prev-next{text-align:right;margin-top:0;}div#bp-admin div.prev-next{border-bottom:1px solid #f0f0f0;margin:0 -20px;padding:0 20px 10px;}div#bp-admin table td{font-family:helvetica,arial,tahoma,sans-serif;}div#bp-admin table.form-table th{border-right:1px solid #eee;width:208px;padding:15px 25px 15px 0;color:#555;}div#bp-admin table.form-table tr{border-bottom:1px dotted #f0f0f0;}div#bp-admin table.form-table td{padding-left:25px;font-size:12px;}div#bp-admin table.form-table th h5{font-size:14px;margin:0;line-height:150%;}div#bp-admin table.form-table th img{margin-top:5px;}div#bp-admin table.form-table th p{margin:3px 0 0 0;}div#bp-admin code,div#bp-admin kbd{font-size:12px;background:#f0f0f0;}div#bp-admin div#message code,div#bp-admin div#message kbd{background:#ffe293;}a.button{padding-top:4px;}a.installed,a.installed:hover,a.installed:active{padding-left:15px;color:#888;border-color:#ccc;cursor:default;}a.installed span{background:url(../images/installed.gif) left center no-repeat;padding:6px 10px 7px 6px;margin-left:-5px;}
  • trunk/bp-core/js/widget-members.js

    r2444 r3477  
    1 jQuery(document).ready( function() {
    2     jQuery(".widget div#members-list-options a").live('click',
    3         function() {
    4             jQuery('#ajax-loader-members').toggle();
    5 
    6             jQuery(".widget div#members-list-options a").removeClass("selected");
    7             jQuery(this).addClass('selected');
    8 
    9             jQuery.post( ajaxurl, {
    10                 action: 'widget_members',
    11                 'cookie': encodeURIComponent(document.cookie),
    12                 '_wpnonce': jQuery("input#_wpnonce-members").val(),
    13                 'max-members': jQuery("input#members_widget_max").val(),
    14                 'filter': jQuery(this).attr('id')
    15             },
    16             function(response)
    17             {
    18                 jQuery('#ajax-loader-members').toggle();
    19                 member_wiget_response(response);
    20             });
    21 
    22             return false;
    23         }
    24     );
    25 });
    26 
    27 function member_wiget_response(response) {
    28     response = response.substr(0, response.length-1);
    29     response = response.split('[[SPLIT]]');
    30 
    31     if ( response[0] != "-1" ) {
    32         jQuery(".widget ul#members-list").fadeOut(200,
    33             function() {
    34                 jQuery(".widget ul#members-list").html(response[1]);
    35                 jQuery(".widget ul#members-list").fadeIn(200);
    36             }
    37         );
    38 
    39     } else {
    40         jQuery(".widget ul#members-list").fadeOut(200,
    41             function() {
    42                 var message = '<p>' + response[1] + '</p>';
    43                 jQuery(".widget ul#members-list").html(message);
    44                 jQuery(".widget ul#members-list").fadeIn(200);
    45             }
    46         );
    47     }
    48 }
     1jQuery(document).ready(function(){jQuery(".widget div#members-list-options a").live("click",function(){jQuery("#ajax-loader-members").toggle();jQuery(".widget div#members-list-options a").removeClass("selected");jQuery(this).addClass("selected");jQuery.post(ajaxurl,{action:"widget_members",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-members").val(),"max-members":jQuery("input#members_widget_max").val(),filter:jQuery(this).attr("id")},function(a){jQuery("#ajax-loader-members").toggle();member_wiget_response(a)});return false})});function member_wiget_response(a){a=a.substr(0,a.length-1);a=a.split("[[SPLIT]]");if(a[0]!="-1"){jQuery(".widget ul#members-list").fadeOut(200,function(){jQuery(".widget ul#members-list").html(a[1]);jQuery(".widget ul#members-list").fadeIn(200)})}else{jQuery(".widget ul#members-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#members-list").html(b);jQuery(".widget ul#members-list").fadeIn(200)})}};
  • trunk/bp-groups/bp-groups-widgets.php

    r3426 r3477  
    1414        parent::WP_Widget( false, $name = __( 'Groups', 'buddypress' ), $widget_ops );
    1515
    16         if ( is_active_widget( false, false, $this->id_base ) )
    17             wp_enqueue_script( 'groups_widget_groups_list-js', BP_PLUGIN_URL . '/bp-groups/js/widget-groups.js', array('jquery') );
     16        if ( is_active_widget( false, false, $this->id_base ) ) {
     17            if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     18                wp_enqueue_script( 'groups_widget_groups_list-js', BP_PLUGIN_URL . '/bp-groups/js/widget-groups.dev.js', array( 'jquery' ) );
     19            else
     20                wp_enqueue_script( 'groups_widget_groups_list-js', BP_PLUGIN_URL . '/bp-groups/js/widget-groups.js', array( 'jquery' ) );
     21        }
    1822    }
    1923
  • trunk/bp-groups/js/widget-groups.js

    r2444 r3477  
    1 jQuery(document).ready( function() {
    2     jQuery(".widget div#groups-list-options a").live('click',
    3         function() {
    4             jQuery('#ajax-loader-groups').toggle();
    5 
    6             jQuery(".widget div#groups-list-options a").removeClass("selected");
    7             jQuery(this).addClass('selected');
    8 
    9             jQuery.post( ajaxurl, {
    10                 action: 'widget_groups_list',
    11                 'cookie': encodeURIComponent(document.cookie),
    12                 '_wpnonce': jQuery("input#_wpnonce-groups").val(),
    13                 'max_groups': jQuery("input#groups_widget_max").val(),
    14                 'filter': jQuery(this).attr('id')
    15             },
    16             function(response)
    17             {
    18                 jQuery('#ajax-loader-groups').toggle();
    19                 groups_wiget_response(response);
    20             });
    21 
    22             return false;
    23         }
    24     );
    25 });
    26 
    27 function groups_wiget_response(response) {
    28     response = response.substr(0, response.length-1);
    29     response = response.split('[[SPLIT]]');
    30 
    31     if ( response[0] != "-1" ) {
    32         jQuery(".widget ul#groups-list").fadeOut(200,
    33             function() {
    34                 jQuery(".widget ul#groups-list").html(response[1]);
    35                 jQuery(".widget ul#groups-list").fadeIn(200);
    36             }
    37         );
    38 
    39     } else {
    40         jQuery(".widget ul#groups-list").fadeOut(200,
    41             function() {
    42                 var message = '<p>' + response[1] + '</p>';
    43                 jQuery(".widget ul#groups-list").html(message);
    44                 jQuery(".widget ul#groups-list").fadeIn(200);
    45             }
    46         );
    47     }
    48 }
     1jQuery(document).ready(function(){jQuery(".widget div#groups-list-options a").live("click",function(){jQuery("#ajax-loader-groups").toggle();jQuery(".widget div#groups-list-options a").removeClass("selected");jQuery(this).addClass("selected");jQuery.post(ajaxurl,{action:"widget_groups_list",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce-groups").val(),max_groups:jQuery("input#groups_widget_max").val(),filter:jQuery(this).attr("id")},function(a){jQuery("#ajax-loader-groups").toggle();groups_wiget_response(a)});return false})});function groups_wiget_response(a){a=a.substr(0,a.length-1);a=a.split("[[SPLIT]]");if(a[0]!="-1"){jQuery(".widget ul#groups-list").fadeOut(200,function(){jQuery(".widget ul#groups-list").html(a[1]);jQuery(".widget ul#groups-list").fadeIn(200)})}else{jQuery(".widget ul#groups-list").fadeOut(200,function(){var b="<p>"+a[1]+"</p>";jQuery(".widget ul#groups-list").html(b);jQuery(".widget ul#groups-list").fadeIn(200)})}};
  • trunk/bp-messages/bp-messages-cssjs.php

    r3300 r3477  
    88        add_action( 'wp_head', 'messages_autocomplete_init_jsblock' );
    99
    10         wp_enqueue_script( 'bp-jquery-autocomplete', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocomplete.js', array( 'jquery' ) );
    11         wp_enqueue_script( 'bp-jquery-autocomplete-fb', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocompletefb.js' );
    12         wp_enqueue_script( 'bp-jquery-bgiframe', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.bgiframe.min.js' );
    13         wp_enqueue_script( 'bp-jquery-dimensions', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.dimensions.js' );
     10        if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) {
     11            wp_enqueue_script( 'bp-jquery-autocomplete', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocomplete.dev.js', array( 'jquery' ) );
     12            wp_enqueue_script( 'bp-jquery-autocomplete-fb', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocompletefb.dev.js' );
     13            wp_enqueue_script( 'bp-jquery-bgiframe', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.bgiframe.min.js' );
     14            wp_enqueue_script( 'bp-jquery-dimensions', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.dimensions.dev.js' );
     15
     16        } else {
     17            wp_enqueue_script( 'bp-jquery-autocomplete', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocomplete.js', array( 'jquery' ) );
     18            wp_enqueue_script( 'bp-jquery-autocomplete-fb', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.autocompletefb.js' );
     19            wp_enqueue_script( 'bp-jquery-bgiframe', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.bgiframe.min.js' );
     20            wp_enqueue_script( 'bp-jquery-dimensions', BP_PLUGIN_URL . '/bp-messages/js/autocomplete/jquery.dimensions.js' );
     21        }
    1422    }
    15 
    1623}
    1724add_action( 'wp', 'messages_add_autocomplete_js', 2 );
     
    2128
    2229    if ( $bp->current_component == $bp->messages->slug && 'compose' == $bp->current_action ) {
    23         wp_enqueue_style( 'bp-messages-autocomplete', BP_PLUGIN_URL . '/bp-messages/css/autocomplete/jquery.autocompletefb.css' );
     30        if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     31            wp_enqueue_style( 'bp-messages-autocomplete', BP_PLUGIN_URL . '/bp-messages/css/autocomplete/jquery.autocompletefb.dev.css' );
     32        else
     33            wp_enqueue_style( 'bp-messages-autocomplete', BP_PLUGIN_URL . '/bp-messages/css/autocomplete/jquery.autocompletefb.css' );
     34
    2435        wp_print_styles();
    2536    }
  • trunk/bp-messages/css/autocomplete/jquery.autocompletefb.css

    r3300 r3477  
    1 .ac_results {
    2     padding: 0px;
    3     overflow: hidden;
    4     z-index: 99999;
    5     background: #fff;
    6     border: 1px solid #ccc;
    7     -moz-border-radius-bottomleft: 3px;
    8     -khtml-border-bottom-left-radius: 3px;
    9     -webkit-border-bottom-left-radius: 3px;
    10     border-bottom-left-radius: 3px;
    11     -moz-border-radius-bottomright: 3px;
    12     -khtml-border-bottom-right-radius: 3px;
    13     -webkit-border-bottom-right-radius: 3px;
    14     border-bottom-right-radius: 3px;
    15 }
    16     .ac_results ul {
    17         width: 100%;
    18         list-style-position: outside;
    19         list-style: none;
    20         padding: 0;
    21         margin: 0;
    22     }
    23 
    24     .ac_results li {
    25         margin: 0px;
    26         padding: 5px 10px;
    27         cursor: pointer;
    28         display: block;
    29         font-size: 1em;
    30         line-height: 16px;
    31         overflow: hidden;
    32     }
    33         .ac_results li img {
    34             margin-right: 5px;
    35         }
    36 
    37 .ac_loading {
    38     background : url('../../../bp-themes/bp-default/_inc/images/ajax-loader.gif') right center no-repeat;
    39 }
    40 
    41 .ac_odd {
    42     background-color: #f0f0f0;
    43 }
    44 
    45 .ac_over {
    46     background-color: #888;
    47     color: #fff;
    48 }
    49 
    50 ul.acfb-holder {
    51     margin  : 0;
    52     height  : auto !important;
    53     height  : 1%;
    54     overflow: hidden;
    55     padding: 0;
    56     list-style: none;
    57 }
    58     ul.acfb-holder li {
    59         float   : left;
    60         margin  : 0 5px 4px 0;
    61         list-style-type: none;
    62     }
    63 
    64     ul.acfb-holder li.friend-tab {
    65         border-radius         : 3px;
    66         -moz-border-radius    : 3px;
    67         -webkit-border-radius : 3px;
    68         border     : 1px solid #ffe7c7;
    69         padding    : 2px 7px 2px;
    70         background : #FFF9DF;
    71         font-size: 1em;
    72     }
    73         li.friend-tab img.avatar {
    74             border-width: 2px !important;
    75             vertical-align: middle;
    76         }
    77 
    78         li.friend-tab span.p {
    79             padding-left: 5px;
    80             font-size: 0.8em;
    81             cursor: pointer;
    82         }
    83 
    84 input#send-to-input { width: 275px !important; }
    85 
     1.ac_results{padding:0;overflow:hidden;z-index:99999;background:#fff;border:1px solid #ccc;-moz-border-radius-bottomleft:3px;-khtml-border-bottom-left-radius:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-bottomright:3px;-khtml-border-bottom-right-radius:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;}.ac_results ul{width:100%;list-style-position:outside;list-style:none;padding:0;margin:0;}.ac_results li{margin:0;padding:5px 10px;cursor:pointer;display:block;font-size:1em;line-height:16px;overflow:hidden;}.ac_results li img{margin-right:5px;}.ac_loading{background:url('../../../bp-themes/bp-default/_inc/images/ajax-loader.gif') right center no-repeat;}.ac_odd{background-color:#f0f0f0;}.ac_over{background-color:#888;color:#fff;}ul.acfb-holder{margin:0;height:auto!important;height:1%;overflow:hidden;padding:0;list-style:none;}ul.acfb-holder li{float:left;margin:0 5px 4px 0;list-style-type:none;}ul.acfb-holder li.friend-tab{border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;border:1px solid #ffe7c7;padding:2px 7px 2px;background:#FFF9DF;font-size:1em;}li.friend-tab img.avatar{border-width:2px!important;vertical-align:middle;}li.friend-tab span.p{padding-left:5px;font-size:.8em;cursor:pointer;}input#send-to-input{width:275px!important;}
  • trunk/bp-messages/js/autocomplete/jquery.autocomplete.js

    r3476 r3477  
    1 /*!
     1/*
    22 * Autocomplete - jQuery plugin 1.0 Beta
    33 *
     
    1111 *
    1212 */
    13 
    14 ;(function($) {
    15 
    16 $.fn.extend({
    17     autocomplete: function(urlOrData, options) {
    18         var isUrl = typeof urlOrData == "string";
    19         options = $.extend({}, $.Autocompleter.defaults, {
    20             url: isUrl ? urlOrData : null,
    21             data: isUrl ? null : urlOrData,
    22             delay: isUrl ? $.Autocompleter.defaults.delay : 10,
    23             max: options && !options.scroll ? 10 : 150
    24         }, options);
    25 
    26         // if highlight is set to false, replace it with a do-nothing function
    27         options.highlight = options.highlight || function(value) { return value; };
    28 
    29         return this.each(function() {
    30             new $.Autocompleter(this, options);
    31         });
    32     },
    33     result: function(handler) {
    34         return this.bind("result", handler);
    35     },
    36     search: function(handler) {
    37         return this.trigger("search", [handler]);
    38     },
    39     flushCache: function() {
    40         return this.trigger("flushCache");
    41     },
    42     setOptions: function(options){
    43         return this.trigger("setOptions", [options]);
    44     },
    45     unautocomplete: function() {
    46         return this.trigger("unautocomplete");
    47     }
    48 });
    49 
    50 $.Autocompleter = function(input, options) {
    51 
    52     var KEY = {
    53         UP: 38,
    54         DOWN: 40,
    55         DEL: 46,
    56         TAB: 9,
    57         RETURN: 13,
    58         ESC: 27,
    59         COMMA: 188,
    60         PAGEUP: 33,
    61         PAGEDOWN: 34
    62     };
    63 
    64     // Create $ object for input element
    65     var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
    66 
    67     var timeout;
    68     var previousValue = "";
    69     var cache = $.Autocompleter.Cache(options);
    70     var hasFocus = 0;
    71     var lastKeyPressCode;
    72     var config = {
    73         mouseDownOnSelect: false
    74     };
    75     var select = $.Autocompleter.Select(options, input, selectCurrent, config);
    76 
    77     $input.keydown(function(event) {
    78         // track last key pressed
    79         lastKeyPressCode = event.keyCode;
    80         switch(event.keyCode) {
    81 
    82             case KEY.UP:
    83                 event.preventDefault();
    84                 if ( select.visible() ) {
    85                     select.prev();
    86                 } else {
    87                     onChange(0, true);
    88                 }
    89                 break;
    90 
    91             case KEY.DOWN:
    92                 event.preventDefault();
    93                 if ( select.visible() ) {
    94                     select.next();
    95                 } else {
    96                     onChange(0, true);
    97                 }
    98                 break;
    99 
    100             case KEY.PAGEUP:
    101                 event.preventDefault();
    102                 if ( select.visible() ) {
    103                     select.pageUp();
    104                 } else {
    105                     onChange(0, true);
    106                 }
    107                 break;
    108 
    109             case KEY.PAGEDOWN:
    110                 event.preventDefault();
    111                 if ( select.visible() ) {
    112                     select.pageDown();
    113                 } else {
    114                     onChange(0, true);
    115                 }
    116                 break;
    117 
    118             // matches also semicolon
    119             case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
    120             case KEY.TAB:
    121             case KEY.RETURN:
    122                 if( selectCurrent() ){
    123                     // make sure to blur off the current field
    124                     if( !options.multiple )
    125                         $input.blur();
    126                     event.preventDefault();
    127                         $input.focus();
    128                 }
    129                 break;
    130 
    131             case KEY.ESC:
    132                 select.hide();
    133                 break;
    134 
    135             default:
    136                 clearTimeout(timeout);
    137                 timeout = setTimeout(onChange, options.delay);
    138                 break;
    139         }
    140     }).keypress(function() {
    141         // having fun with opera - remove this binding and Opera submits the form when we select an entry via return
    142     }).focus(function(){
    143         // track whether the field has focus, we shouldn't process any
    144         // results if the field no longer has focus
    145         hasFocus++;
    146     }).blur(function() {
    147         hasFocus = 0;
    148         if (!config.mouseDownOnSelect) {
    149             hideResults();
    150         }
    151     }).click(function() {
    152         // show select when clicking in a focused field
    153         if ( hasFocus++ > 1 && !select.visible() ) {
    154             onChange(0, true);
    155         }
    156     }).bind("search", function() {
    157         // TODO why not just specifying both arguments?
    158         var fn = (arguments.length > 1) ? arguments[1] : null;
    159         function findValueCallback(q, data) {
    160             var result;
    161             if( data && data.length ) {
    162                 for (var i=0; i < data.length; i++) {
    163                     if( data[i].result.toLowerCase() == q.toLowerCase() ) {
    164                         result = data[i];
    165                         break;
    166                     }
    167                 }
    168             }
    169             if( typeof fn == "function" ) fn(result);
    170             else $input.trigger("result", result && [result.data, result.value]);
    171         }
    172         $.each(trimWords($input.val()), function(i, value) {
    173             request(value, findValueCallback, findValueCallback);
    174         });
    175     }).bind("flushCache", function() {
    176         cache.flush();
    177     }).bind("setOptions", function() {
    178         $.extend(options, arguments[1]);
    179         // if we've updated the data, repopulate
    180         if ( "data" in arguments[1] )
    181             cache.populate();
    182     }).bind("unautocomplete", function() {
    183         select.unbind();
    184         $input.unbind();
    185     });
    186 
    187 
    188     function selectCurrent() {
    189         var selected = select.selected();
    190         if( !selected )
    191             return false;
    192 
    193         var v = selected.result;
    194         previousValue = v;
    195 
    196         if ( options.multiple ) {
    197             var words = trimWords($input.val());
    198             if ( words.length > 1 ) {
    199                 v = words.slice(0, words.length - 1).join( options.multipleSeparator ) + options.multipleSeparator + v;
    200             }
    201             v += options.multipleSeparator;
    202         }
    203 
    204         $input.val(v);
    205         hideResultsNow();
    206         $input.trigger("result", [selected.data, selected.value]);
    207         return true;
    208     }
    209 
    210     function onChange(crap, skipPrevCheck) {
    211         if( lastKeyPressCode == KEY.DEL ) {
    212             select.hide();
    213             return;
    214         }
    215 
    216         var currentValue = $input.val();
    217 
    218         if ( !skipPrevCheck && currentValue == previousValue )
    219             return;
    220 
    221         previousValue = currentValue;
    222 
    223         currentValue = lastWord(currentValue);
    224         if ( currentValue.length >= options.minChars) {
    225             $input.addClass(options.loadingClass);
    226             jQuery('.ajax-loader').show();
    227             if (!options.matchCase)
    228                 currentValue = currentValue.toLowerCase();
    229             request(currentValue, receiveData, hideResultsNow);
    230         } else {
    231             stopLoading();
    232             select.hide();
    233         }
    234     };
    235 
    236     function trimWords(value) {
    237         if ( !value ) {
    238             return [""];
    239         }
    240         var words = value.split( $.trim( options.multipleSeparator ) );
    241         var result = [];
    242         $.each(words, function(i, value) {
    243             if ( $.trim(value) )
    244                 result[i] = $.trim(value);
    245         });
    246         return result;
    247     }
    248 
    249     function lastWord(value) {
    250         if ( !options.multiple )
    251             return value;
    252         var words = trimWords(value);
    253         return words[words.length - 1];
    254     }
    255 
    256     // fills in the input box w/the first match (assumed to be the best match)
    257     function autoFill(q, sValue){
    258         // autofill in the complete box w/the first match as long as the user hasn't entered in more data
    259         // if the last user key pressed was backspace, don't autofill
    260         if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != 8 ) {
    261             // fill in the value (keep the case the user has typed)
    262             $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
    263             // select the portion of the value not typed by the user (so the next character will erase)
    264             $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
    265         }
    266     };
    267 
    268     function hideResults() {
    269         clearTimeout(timeout);
    270         timeout = setTimeout(hideResultsNow, 200);
    271     };
    272 
    273     function hideResultsNow() {
    274         select.hide();
    275         clearTimeout(timeout);
    276         stopLoading();
    277         if (options.mustMatch) {
    278             // call search and run callback
    279             $input.search(
    280                 function (result){
    281                     // if no value found, clear the input box
    282                     if( !result ) $input.val("");
    283                 }
    284             );
    285         }
    286     };
    287 
    288     function receiveData(q, data) {
    289         if ( data && data.length && hasFocus ) {
    290             stopLoading();
    291             select.display(data, q);
    292 
    293             var newData = data[0].value.split(';');
    294             data.value = newData[0];
    295 
    296             autoFill(q, data.value);
    297             select.show();
    298         } else {
    299             hideResultsNow();
    300         }
    301     };
    302 
    303     function request(term, success, failure) {
    304         if (!options.matchCase)
    305             term = term.toLowerCase();
    306         var data = cache.load(term);
    307         // recieve the cached data
    308         if (data && data.length) {
    309             success(term, data);
    310         // if an AJAX url has been supplied, try loading the data now
    311         } else if( (typeof options.url == "string") && (options.url.length > 0) ){
    312 
    313             var extraParams = {};
    314             $.each(options.extraParams, function(key, param) {
    315                 extraParams[key] = typeof param == "function" ? param() : param;
    316             });
    317 
    318             $.ajax({
    319                 // try to leverage ajaxQueue plugin to abort previous requests
    320                 mode: "abort",
    321                 // limit abortion to this input
    322                 port: "autocomplete" + input.name,
    323                 dataType: options.dataType,
    324                 url: options.url,
    325                 data: $.extend({
    326                     q: lastWord(term),
    327                     limit: options.max,
    328                     action: 'messages_autocomplete_results',
    329                     'cookie': encodeURIComponent(document.cookie)
    330                 }, extraParams),
    331                 success: function(data) {
    332                     var parsed = options.parse && options.parse(data) || parse(data);
    333                     cache.add(term, parsed);
    334                     success(term, parsed);
    335                 }
    336             });
    337         } else {
    338             failure(term);
    339         }
    340     };
    341 
    342     function parse(data) {
    343         var parsed = [];
    344         var rows = data.split("\n");
    345         for (var i=0; i < rows.length; i++) {
    346             var row = $.trim(rows[i]);
    347             if (row) {
    348                 row = row.split("|");
    349                 parsed[parsed.length] = {
    350                     data: row,
    351                     value: row[0],
    352                     result: options.formatResult && options.formatResult(row, row[0]) || row[0]
    353                 };
    354             }
    355         }
    356         return parsed;
    357     };
    358 
    359     function stopLoading() {
    360         $input.removeClass(options.loadingClass);
    361         jQuery('.ajax-loader').hide();
    362     };
    363 
    364 };
    365 
    366 $.Autocompleter.defaults = {
    367     inputClass: "ac_input",
    368     resultsClass: "ac_results",
    369     loadingClass: "ac_loading",
    370     minChars: 1,
    371     delay: 400,
    372     matchCase: false,
    373     matchSubset: true,
    374     matchContains: false,
    375     cacheLength: 10,
    376     max: 100,
    377     mustMatch: false,
    378     extraParams: {},
    379     selectFirst: true,
    380     formatItem: function(row) { return row[0]; },
    381     autoFill: false,
    382     width: 0,
    383     multiple: false,
    384     multipleSeparator: ", ",
    385     highlight: function(value, term) {
    386         return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
    387     },
    388     scroll: true,
    389     scrollHeight: 250,
    390     attachTo: 'body'
    391 };
    392 
    393 $.Autocompleter.Cache = function(options) {
    394 
    395     var data = {};
    396     var length = 0;
    397 
    398     function matchSubset(s, sub) {
    399         if (!options.matchCase)
    400             s = s.toLowerCase();
    401         var i = s.indexOf(sub);
    402         if (i == -1) return false;
    403         return i == 0 || options.matchContains;
    404     };
    405 
    406     function add(q, value) {
    407         if (length > options.cacheLength){
    408             flush();
    409         }
    410         if (!data[q]){
    411             length++;
    412         }
    413         data[q] = value;
    414     }
    415 
    416     function populate(){
    417         if( !options.data ) return false;
    418         // track the matches
    419         var stMatchSets = {},
    420             nullData = 0;
    421 
    422         // no url was specified, we need to adjust the cache length to make sure it fits the local data store
    423         if( !options.url ) options.cacheLength = 1;
    424 
    425         // track all options for minChars = 0
    426         stMatchSets[""] = [];
    427 
    428         // loop through the array and create a lookup structure
    429         for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
    430             var rawValue = options.data[i];
    431             // if rawValue is a string, make an array otherwise just reference the array
    432             rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
    433 
    434             var value = options.formatItem(rawValue, i+1, options.data.length);
    435             if ( value === false )
    436                 continue;
    437 
    438             var firstChar = value.charAt(0).toLowerCase();
    439             // if no lookup array for this character exists, look it up now
    440             if( !stMatchSets[firstChar] )
    441                 stMatchSets[firstChar] = [];
    442 
    443             // if the match is a string
    444             var row = {
    445                 value: value,
    446                 data: rawValue,
    447                 result: options.formatResult && options.formatResult(rawValue) || value
    448             };
    449 
    450             // push the current match into the set list
    451             stMatchSets[firstChar].push(row);
    452 
    453             // keep track of minChars zero items
    454             if ( nullData++ < options.max ) {
    455                 stMatchSets[""].push(row);
    456             }
    457         };
    458 
    459         // add the data items to the cache
    460         $.each(stMatchSets, function(i, value) {
    461             // increase the cache size
    462             options.cacheLength++;
    463             // add to the cache
    464             add(i, value);
    465         });
    466     }
    467 
    468     // populate any existing data
    469     setTimeout(populate, 25);
    470 
    471     function flush(){
    472         data = {};
    473         length = 0;
    474     }
    475 
    476     return {
    477         flush: flush,
    478         add: add,
    479         populate: populate,
    480         load: function(q) {
    481             if (!options.cacheLength || !length)
    482                 return null;
    483             /*
    484              * if dealing w/local data and matchContains than we must make sure
    485              * to loop through all the data collections looking for matches
    486              */
    487             if( !options.url && options.matchContains ){
    488                 // track all matches
    489                 var csub = [];
    490                 // loop through all the data grids for matches
    491                 for( var k in data ){
    492                     // don't search through the stMatchSets[""] (minChars: 0) cache
    493                     // this prevents duplicates
    494                     if( k.length > 0 ){
    495                         var c = data[k];
    496                         $.each(c, function(i, x) {
    497                             // if we've got a match, add it to the array
    498                             if (matchSubset(x.value, q)) {
    499                                 csub.push(x);
    500                             }
    501                         });
    502                     }
    503                 }
    504                 return csub;
    505             } else
    506             // if the exact item exists, use it
    507             if (data[q]){
    508                 return data[q];
    509             } else
    510             if (options.matchSubset) {
    511                 for (var i = q.length - 1; i >= options.minChars; i--) {
    512                     var c = data[q.substr(0, i)];
    513                     if (c) {
    514                         var csub = [];
    515                         $.each(c, function(i, x) {
    516                             if (matchSubset(x.value, q)) {
    517                                 csub[csub.length] = x;
    518                             }
    519                         });
    520                         return csub;
    521                     }
    522                 }
    523             }
    524             return null;
    525         }
    526     };
    527 };
    528 
    529 $.Autocompleter.Select = function (options, input, select, config) {
    530     var CLASSES = {
    531         ACTIVE: "ac_over"
    532     };
    533 
    534     var listItems,
    535         active = -1,
    536         data,
    537         term = "",
    538         needsInit = true,
    539         element,
    540         list;
    541 
    542     // Create results
    543     function init() {
    544         if (!needsInit)
    545             return;
    546         element = $("<div/>")
    547         .hide()
    548         .addClass(options.resultsClass)
    549         .css("position", "absolute")
    550         .appendTo(options.attachTo);
    551 
    552         list = $("<ul>").appendTo(element).mouseover( function(event) {
    553             if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
    554                 active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
    555                 $(target(event)).addClass(CLASSES.ACTIVE);
    556             }
    557         }).click(function(event) {
    558             $(target(event)).addClass(CLASSES.ACTIVE);
    559             select();
    560             input.focus();
    561             return false;
    562         }).mousedown(function() {
    563             config.mouseDownOnSelect = true;
    564         }).mouseup(function() {
    565             config.mouseDownOnSelect = false;
    566         });
    567 
    568         if( options.width > 0 )
    569             element.css("width", options.width);
    570 
    571         needsInit = false;
    572     }
    573 
    574     function target(event) {
    575         var element = event.target;
    576         while(element && element.tagName != "LI")
    577             element = element.parentNode;
    578         // more fun with IE, sometimes event.target is empty, just ignore it then
    579         if(!element)
    580             return [];
    581         return element;
    582     }
    583 
    584     function moveSelect(step) {
    585         listItems.slice(active, active + 1).removeClass();
    586         movePosition(step);
    587         var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
    588         if(options.scroll) {
    589             var offset = 0;
    590             listItems.slice(0, active).each(function() {
    591                 offset += this.offsetHeight;
    592             });
    593             if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
    594                 list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
    595             } else if(offset < list.scrollTop()) {
    596                 list.scrollTop(offset);
    597             }
    598         }
    599     };
    600 
    601     function movePosition(step) {
    602         active += step;
    603         if (active < 0) {
    604             active = listItems.size() - 1;
    605         } else if (active >= listItems.size()) {
    606             active = 0;
    607         }
    608     }
    609 
    610     function limitNumberOfItems(available) {
    611         return options.max && options.max < available
    612             ? options.max
    613             : available;
    614     }
    615 
    616     function fillList() {
    617         list.empty();
    618         var max = limitNumberOfItems(data.length);
    619         for (var i=0; i < max; i++) {
    620             if (!data[i])
    621                 continue;
    622             var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
    623             if ( formatted === false )
    624                 continue;
    625             var li = $("<li>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_event" : "ac_odd").appendTo(list)[0];
    626             $.data(li, "ac_data", data[i]);
    627         }
    628         listItems = list.find("li");
    629         if ( options.selectFirst ) {
    630             listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
    631             active = 0;
    632         }
    633         list.bgiframe();
    634     }
    635 
    636     return {
    637         display: function(d, q) {
    638             init();
    639             data = d;
    640             term = q;
    641             fillList();
    642         },
    643         next: function() {
    644             moveSelect(1);
    645         },
    646         prev: function() {
    647             moveSelect(-1);
    648         },
    649         pageUp: function() {
    650             if (active != 0 && active - 8 < 0) {
    651                 moveSelect( -active );
    652             } else {
    653                 moveSelect(-8);
    654             }
    655         },
    656         pageDown: function() {
    657             if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
    658                 moveSelect( listItems.size() - 1 - active );
    659             } else {
    660                 moveSelect(8);
    661             }
    662         },
    663         hide: function() {
    664             element && element.hide();
    665             active = -1;
    666         },
    667         visible : function() {
    668             return element && element.is(":visible");
    669         },
    670         current: function() {
    671             return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
    672         },
    673         show: function() {
    674             var offset = $(input).offset();
    675             element.css({
    676                 width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
    677                 top: offset.top + input.offsetHeight,
    678                 left: offset.left
    679             }).show();
    680             if(options.scroll) {
    681                 list.scrollTop(0);
    682                 list.css({
    683                     maxHeight: options.scrollHeight,
    684                     overflow: 'auto'
    685                 });
    686 
    687                 if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
    688                     var listHeight = 0;
    689                     listItems.each(function() {
    690                         listHeight += this.offsetHeight;
    691                     });
    692                     var scrollbarsVisible = listHeight > options.scrollHeight;
    693                     list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
    694                     if (!scrollbarsVisible) {
    695                         // IE doesn't recalculate width when scrollbar disappears
    696                         listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
    697                     }
    698                 }
    699 
    700             }
    701         },
    702         selected: function() {
    703             var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
    704             return selected && selected.length && $.data(selected[0], "ac_data");
    705         },
    706         unbind: function() {
    707             element && element.remove();
    708         }
    709     };
    710 };
    711 
    712 $.Autocompleter.Selection = function(field, start, end) {
    713     if( field.createTextRange ){
    714         var selRange = field.createTextRange();
    715         selRange.collapse(true);
    716         selRange.moveStart("character", start);
    717         selRange.moveEnd("character", end);
    718         selRange.select();
    719     } else if( field.setSelectionRange ){
    720         field.setSelectionRange(start, end);
    721     } else {
    722         if( field.selectionStart ){
    723             field.selectionStart = start;
    724             field.selectionEnd = end;
    725         }
    726     }
    727     field.focus();
    728 };
    729 
    730 })(jQuery);
     13(function(a){a.fn.extend({autocomplete:function(b,c){var d=typeof b=="string";c=a.extend({},a.Autocompleter.defaults,{url:d?b:null,data:d?null:b,delay:d?a.Autocompleter.defaults.delay:10,max:c&&!c.scroll?10:150},c);c.highlight=c.highlight||function(e){return e};return this.each(function(){new a.Autocompleter(this,c)})},result:function(b){return this.bind("result",b)},search:function(b){return this.trigger("search",[b])},flushCache:function(){return this.trigger("flushCache")},setOptions:function(b){return this.trigger("setOptions",[b])},unautocomplete:function(){return this.trigger("unautocomplete")}});a.Autocompleter=function(l,g){var c={UP:38,DOWN:40,DEL:46,TAB:9,RETURN:13,ESC:27,COMMA:188,PAGEUP:33,PAGEDOWN:34};var b=a(l).attr("autocomplete","off").addClass(g.inputClass);var j;var p="";var m=a.Autocompleter.Cache(g);var e=0;var u;var w={mouseDownOnSelect:false};var r=a.Autocompleter.Select(g,l,d,w);b.keydown(function(x){u=x.keyCode;switch(x.keyCode){case c.UP:x.preventDefault();if(r.visible()){r.prev()}else{t(0,true)}break;case c.DOWN:x.preventDefault();if(r.visible()){r.next()}else{t(0,true)}break;case c.PAGEUP:x.preventDefault();if(r.visible()){r.pageUp()}else{t(0,true)}break;case c.PAGEDOWN:x.preventDefault();if(r.visible()){r.pageDown()}else{t(0,true)}break;case g.multiple&&a.trim(g.multipleSeparator)==","&&c.COMMA:case c.TAB:case c.RETURN:if(d()){if(!g.multiple){b.blur()}x.preventDefault();b.focus()}break;case c.ESC:r.hide();break;default:clearTimeout(j);j=setTimeout(t,g.delay);break}}).keypress(function(){}).focus(function(){e++}).blur(function(){e=0;if(!w.mouseDownOnSelect){s()}}).click(function(){if(e++>1&&!r.visible()){t(0,true)}}).bind("search",function(){var x=(arguments.length>1)?arguments[1]:null;function y(C,B){var z;if(B&&B.length){for(var A=0;A<B.length;A++){if(B[A].result.toLowerCase()==C.toLowerCase()){z=B[A];break}}}if(typeof x=="function"){x(z)}else{b.trigger("result",z&&[z.data,z.value])}}a.each(h(b.val()),function(z,A){f(A,y,y)})}).bind("flushCache",function(){m.flush()}).bind("setOptions",function(){a.extend(g,arguments[1]);if("data" in arguments[1]){m.populate()}}).bind("unautocomplete",function(){r.unbind();b.unbind()});function d(){var y=r.selected();if(!y){return false}var x=y.result;p=x;if(g.multiple){var z=h(b.val());if(z.length>1){x=z.slice(0,z.length-1).join(g.multipleSeparator)+g.multipleSeparator+x}x+=g.multipleSeparator}b.val(x);v();b.trigger("result",[y.data,y.value]);return true}function t(z,y){if(u==c.DEL){r.hide();return}var x=b.val();if(!y&&x==p){return}p=x;x=i(x);if(x.length>=g.minChars){b.addClass(g.loadingClass);jQuery(".ajax-loader").show();if(!g.matchCase){x=x.toLowerCase()}f(x,k,v)}else{n();r.hide()}}function h(y){if(!y){return[""]}var z=y.split(a.trim(g.multipleSeparator));var x=[];a.each(z,function(A,B){if(a.trim(B)){x[A]=a.trim(B)}});return x}function i(x){if(!g.multiple){return x}var y=h(x);return y[y.length-1]}function q(x,y){if(g.autoFill&&(i(b.val()).toLowerCase()==x.toLowerCase())&&u!=8){b.val(b.val()+y.substring(i(p).length));a.Autocompleter.Selection(l,p.length,p.length+y.length)}}function s(){clearTimeout(j);j=setTimeout(v,200)}function v(){r.hide();clearTimeout(j);n();if(g.mustMatch){b.search(function(x){if(!x){b.val("")}})}}function k(z,y){if(y&&y.length&&e){n();r.display(y,z);var x=y[0].value.split(";");y.value=x[0];q(z,y.value);r.show()}else{v()}}function f(y,A,x){if(!g.matchCase){y=y.toLowerCase()}var z=m.load(y);if(z&&z.length){A(y,z)}else{if((typeof g.url=="string")&&(g.url.length>0)){var B={};a.each(g.extraParams,function(C,D){B[C]=typeof D=="function"?D():D});a.ajax({mode:"abort",port:"autocomplete"+l.name,dataType:g.dataType,url:g.url,data:a.extend({q:i(y),limit:g.max,action:"messages_autocomplete_results",cookie:encodeURIComponent(document.cookie)},B),success:function(D){var C=g.parse&&g.parse(D)||o(D);m.add(y,C);A(y,C)}})}else{x(y)}}}function o(A){var x=[];var z=A.split("\n");for(var y=0;y<z.length;y++){var B=a.trim(z[y]);if(B){B=B.split("|");x[x.length]={data:B,value:B[0],result:g.formatResult&&g.formatResult(B,B[0])||B[0]}}}return x}function n(){b.removeClass(g.loadingClass);jQuery(".ajax-loader").hide()}};a.Autocompleter.defaults={inputClass:"ac_input",resultsClass:"ac_results",loadingClass:"ac_loading",minChars:1,delay:400,matchCase:false,matchSubset:true,matchContains:false,cacheLength:10,max:100,mustMatch:false,extraParams:{},selectFirst:true,formatItem:function(b){return b[0]},autoFill:false,width:0,multiple:false,multipleSeparator:", ",highlight:function(c,b){return c.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)("+b.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi,"\\$1")+")(?![^<>]*>)(?![^&;]+;)","gi"),"<strong>$1</strong>")},scroll:true,scrollHeight:250,attachTo:"body"};a.Autocompleter.Cache=function(c){var f={};var d=0;function h(l,k){if(!c.matchCase){l=l.toLowerCase()}var j=l.indexOf(k);if(j==-1){return false}return j==0||c.matchContains}function g(j,i){if(d>c.cacheLength){b()}if(!f[j]){d++}f[j]=i}function e(){if(!c.data){return false}var k={},j=0;if(!c.url){c.cacheLength=1}k[""]=[];for(var m=0,l=c.data.length;m<l;m++){var p=c.data[m];p=(typeof p=="string")?[p]:p;var o=c.formatItem(p,m+1,c.data.length);if(o===false){continue}var n=o.charAt(0).toLowerCase();if(!k[n]){k[n]=[]}var q={value:o,data:p,result:c.formatResult&&c.formatResult(p)||o};k[n].push(q);if(j++<c.max){k[""].push(q)}}a.each(k,function(r,s){c.cacheLength++;g(r,s)})}setTimeout(e,25);function b(){f={};d=0}return{flush:b,add:g,populate:e,load:function(n){if(!c.cacheLength||!d){return null}if(!c.url&&c.matchContains){var m=[];for(var j in f){if(j.length>0){var o=f[j];a.each(o,function(p,k){if(h(k.value,n)){m.push(k)}})}}return m}else{if(f[n]){return f[n]}else{if(c.matchSubset){for(var l=n.length-1;l>=c.minChars;l--){var o=f[n.substr(0,l)];if(o){var m=[];a.each(o,function(p,k){if(h(k.value,n)){m[m.length]=k}});return m}}}}}return null}}};a.Autocompleter.Select=function(e,j,l,p){var i={ACTIVE:"ac_over"};var k,f=-1,r,m="",s=true,c,o;function n(){if(!s){return}c=a("<div/>").hide().addClass(e.resultsClass).css("position","absolute").appendTo(e.attachTo);o=a("<ul>").appendTo(c).mouseover(function(t){if(q(t).nodeName&&q(t).nodeName.toUpperCase()=="LI"){f=a("li",o).removeClass(i.ACTIVE).index(q(t));a(q(t)).addClass(i.ACTIVE)}}).click(function(t){a(q(t)).addClass(i.ACTIVE);l();j.focus();return false}).mousedown(function(){p.mouseDownOnSelect=true}).mouseup(function(){p.mouseDownOnSelect=false});if(e.width>0){c.css("width",e.width)}s=false}function q(u){var t=u.target;while(t&&t.tagName!="LI"){t=t.parentNode}if(!t){return[]}return t}function h(t){k.slice(f,f+1).removeClass();g(t);var v=k.slice(f,f+1).addClass(i.ACTIVE);if(e.scroll){var u=0;k.slice(0,f).each(function(){u+=this.offsetHeight});if((u+v[0].offsetHeight-o.scrollTop())>o[0].clientHeight){o.scrollTop(u+v[0].offsetHeight-o.innerHeight())}else{if(u<o.scrollTop()){o.scrollTop(u)}}}}function g(t){f+=t;if(f<0){f=k.size()-1}else{if(f>=k.size()){f=0}}}function b(t){return e.max&&e.max<t?e.max:t}function d(){o.empty();var u=b(r.length);for(var v=0;v<u;v++){if(!r[v]){continue}var w=e.formatItem(r[v].data,v+1,u,r[v].value,m);if(w===false){continue}var t=a("<li>").html(e.highlight(w,m)).addClass(v%2==0?"ac_event":"ac_odd").appendTo(o)[0];a.data(t,"ac_data",r[v])}k=o.find("li");if(e.selectFirst){k.slice(0,1).addClass(i.ACTIVE);f=0}o.bgiframe()}return{display:function(u,t){n();r=u;m=t;d()},next:function(){h(1)},prev:function(){h(-1)},pageUp:function(){if(f!=0&&f-8<0){h(-f)}else{h(-8)}},pageDown:function(){if(f!=k.size()-1&&f+8>k.size()){h(k.size()-1-f)}else{h(8)}},hide:function(){c&&c.hide();f=-1},visible:function(){return c&&c.is(":visible")},current:function(){return this.visible()&&(k.filter("."+i.ACTIVE)[0]||e.selectFirst&&k[0])},show:function(){var v=a(j).offset();c.css({width:typeof e.width=="string"||e.width>0?e.width:a(j).width(),top:v.top+j.offsetHeight,left:v.left}).show();if(e.scroll){o.scrollTop(0);o.css({maxHeight:e.scrollHeight,overflow:"auto"});if(a.browser.msie&&typeof document.body.style.maxHeight==="undefined"){var t=0;k.each(function(){t+=this.offsetHeight});var u=t>e.scrollHeight;o.css("height",u?e.scrollHeight:t);if(!u){k.width(o.width()-parseInt(k.css("padding-left"))-parseInt(k.css("padding-right")))}}}},selected:function(){var t=k&&k.filter("."+i.ACTIVE).removeClass(i.ACTIVE);return t&&t.length&&a.data(t[0],"ac_data")},unbind:function(){c&&c.remove()}}};a.Autocompleter.Selection=function(d,e,c){if(d.createTextRange){var b=d.createTextRange();b.collapse(true);b.moveStart("character",e);b.moveEnd("character",c);b.select()}else{if(d.setSelectionRange){d.setSelectionRange(e,c)}else{if(d.selectionStart){d.selectionStart=e;d.selectionEnd=c}}}d.focus()}})(jQuery);
  • trunk/bp-messages/js/autocomplete/jquery.autocompletefb.js

    r3476 r3477  
    1 /*!
     1/*
    22 * jQuery plugin: autoCompletefb(AutoComplete Facebook)
    33 * @requires jQuery v1.2.2 or later
     
    1414 *   http://www.gnu.org/licenses/gpl.html
    1515 */
    16  
    17 jQuery.fn.autoCompletefb = function(options)
    18 {
    19     var tmp = this;
    20     var settings =
    21     {
    22         ul         : tmp,
    23         urlLookup  : [""],
    24         acOptions  : {},
    25         foundClass : ".friend-tab",
    26         inputClass : ".send-to-input"
    27     }
    28    
    29     if(options) jQuery.extend(settings, options);
    30    
    31     var acfb =
    32     {
    33         params  : settings,
    34         removeFind : function(o){
    35             acfb.removeUsername(o);
    36             jQuery(o).unbind('click').parent().remove();
    37             jQuery(settings.inputClass,tmp).focus();
    38             return tmp.acfb;
    39         },
    40         removeUsername: function(o){
    41             var newID = o.parentNode.id.split('-');
    42             jQuery('#send-to-usernames').removeClass(newID[1]);
    43         }
    44     }
    45    
    46     jQuery(settings.foundClass+" img.p").click(function(){
    47         acfb.removeFind(this);
    48     });
    49    
    50     jQuery(settings.inputClass,tmp).autocomplete(settings.urlLookup,settings.acOptions);
    51     jQuery(settings.inputClass,tmp).result(function(e,d,f){
    52         var f = settings.foundClass.replace(/\./,'');
    53         var d = String(d).split(' (');
    54         var un = d[1].substr(0, d[1].length-1);
    55         var ln = '#link-' + un;
    56         var l = jQuery(ln).attr('value');
    57         var v = '<li class="'+f+'" id="un-'+un+'"><span><a href="'+l+'">'+d[0]+'</a></span> <span class="p">X</span></li>';
    58         var x = jQuery(settings.inputClass,tmp).before(v);
    59        
    60         jQuery('#send-to-usernames').addClass(un);
    61        
    62         jQuery('.p',x[0].previousSibling).click(function(){
    63             acfb.removeFind(this);
    64         });
    65         jQuery(settings.inputClass,tmp).val('');
    66     });
    67    
    68     jQuery(settings.inputClass,tmp).focus();
    69     return acfb;
    70 }
     16jQuery.fn.autoCompletefb=function(b){var c=this;var d={ul:c,urlLookup:[""],acOptions:{},foundClass:".friend-tab",inputClass:".send-to-input"};if(b){jQuery.extend(d,b)}var a={params:d,removeFind:function(e){a.removeUsername(e);jQuery(e).unbind("click").parent().remove();jQuery(d.inputClass,c).focus();return c.acfb},removeUsername:function(f){var e=f.parentNode.id.split("-");jQuery("#send-to-usernames").removeClass(e[1])}};jQuery(d.foundClass+" img.p").click(function(){a.removeFind(this)});jQuery(d.inputClass,c).autocomplete(d.urlLookup,d.acOptions);jQuery(d.inputClass,c).result(function(n,o,m){var m=d.foundClass.replace(/\./,"");var o=String(o).split(" (");var j=o[1].substr(0,o[1].length-1);var k="#link-"+j;var h=jQuery(k).attr("value");var i='<li class="'+m+'" id="un-'+j+'"><span><a href="'+h+'">'+o[0]+'</a></span> <span class="p">X</span></li>';var g=jQuery(d.inputClass,c).before(i);jQuery("#send-to-usernames").addClass(j);jQuery(".p",g[0].previousSibling).click(function(){a.removeFind(this)});jQuery(d.inputClass,c).val("")});jQuery(d.inputClass,c).focus();return a};
  • trunk/bp-messages/js/autocomplete/jquery.dimensions.js

    r3476 r3477  
    1 /*!
     1/*
    22 * Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
    33 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
     
    1111 * Requires: jQuery 1.2+
    1212 */
    13 
    14 (function($){
    15    
    16 $.dimensions = {
    17     version: '@VERSION'
    18 };
    19 
    20 // Create innerHeight, innerWidth, outerHeight and outerWidth methods
    21 $.each( [ 'Height', 'Width' ], function(i, name){
    22    
    23     // innerHeight and innerWidth
    24     $.fn[ 'inner' + name ] = function() {
    25         if (!this[0]) return;
    26        
    27         var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
    28             borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
    29        
    30         return this[ name.toLowerCase() ]() + num(this, 'padding' + torl) + num(this, 'padding' + borr);
    31     };
    32    
    33     // outerHeight and outerWidth
    34     $.fn[ 'outer' + name ] = function(options) {
    35         if (!this[0]) return;
    36        
    37         var torl = name == 'Height' ? 'Top'    : 'Left',  // top or left
    38             borr = name == 'Height' ? 'Bottom' : 'Right'; // bottom or right
    39        
    40         options = $.extend({ margin: false }, options || {});
    41        
    42         return this[ name.toLowerCase() ]()
    43                 + num(this, 'border' + torl + 'Width') + num(this, 'border' + borr + 'Width')
    44                 + num(this, 'padding' + torl) + num(this, 'padding' + borr)
    45                 + (options.margin ? (num(this, 'margin' + torl) + num(this, 'margin' + borr)) : 0);
    46     };
    47 });
    48 
    49 // Create scrollLeft and scrollTop methods
    50 $.each( ['Left', 'Top'], function(i, name) {
    51     $.fn[ 'scroll' + name ] = function(val) {
    52         if (!this[0]) return;
    53        
    54         return val != undefined ?
    55        
    56             // Set the scroll offset
    57             this.each(function() {
    58                 this == window || this == document ?
    59                     window.scrollTo(
    60                         name == 'Left' ? val : $(window)[ 'scrollLeft' ](),
    61                         name == 'Top'  ? val : $(window)[ 'scrollTop'  ]()
    62                     ) :
    63                     this[ 'scroll' + name ] = val;
    64             }) :
    65            
    66             // Return the scroll offset
    67             this[0] == window || this[0] == document ?
    68                 self[ (name == 'Left' ? 'pageXOffset' : 'pageYOffset') ] ||
    69                     $.boxModel && document.documentElement[ 'scroll' + name ] ||
    70                     document.body[ 'scroll' + name ] :
    71                 this[0][ 'scroll' + name ];
    72     };
    73 });
    74 
    75 $.fn.extend({
    76     position: function() {
    77         var left = 0, top = 0, elem = this[0], offset, parentOffset, offsetParent, results;
    78        
    79         if (elem) {
    80             // Get *real* offsetParent
    81             offsetParent = this.offsetParent();
    82            
    83             // Get correct offsets
    84             offset       = this.offset();
    85             parentOffset = offsetParent.offset();
    86            
    87             // Subtract element margins
    88             offset.top  -= num(elem, 'marginTop');
    89             offset.left -= num(elem, 'marginLeft');
    90            
    91             // Add offsetParent borders
    92             parentOffset.top  += num(offsetParent, 'borderTopWidth');
    93             parentOffset.left += num(offsetParent, 'borderLeftWidth');
    94            
    95             // Subtract the two offsets
    96             results = {
    97                 top:  offset.top  - parentOffset.top,
    98                 left: offset.left - parentOffset.left
    99             };
    100         }
    101        
    102         return results;
    103     },
    104    
    105     offsetParent: function() {
    106         var offsetParent = this[0].offsetParent;
    107         while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && $.css(offsetParent, 'position') == 'static') )
    108             offsetParent = offsetParent.offsetParent;
    109         return $(offsetParent);
    110     }
    111 });
    112 
    113 var num = function(el, prop) {
    114     return parseInt($.css(el.jquery?el[0]:el,prop))||0;
    115 };
    116 
    117 })(jQuery);
     13(function(b){b.dimensions={version:"@VERSION"};b.each(["Height","Width"],function(d,c){b.fn["inner"+c]=function(){if(!this[0]){return}var f=c=="Height"?"Top":"Left",e=c=="Height"?"Bottom":"Right";return this[c.toLowerCase()]()+a(this,"padding"+f)+a(this,"padding"+e)};b.fn["outer"+c]=function(f){if(!this[0]){return}var g=c=="Height"?"Top":"Left",e=c=="Height"?"Bottom":"Right";f=b.extend({margin:false},f||{});return this[c.toLowerCase()]()+a(this,"border"+g+"Width")+a(this,"border"+e+"Width")+a(this,"padding"+g)+a(this,"padding"+e)+(f.margin?(a(this,"margin"+g)+a(this,"margin"+e)):0)}});b.each(["Left","Top"],function(d,c){b.fn["scroll"+c]=function(e){if(!this[0]){return}return e!=undefined?this.each(function(){this==window||this==document?window.scrollTo(c=="Left"?e:b(window)["scrollLeft"](),c=="Top"?e:b(window)["scrollTop"]()):this["scroll"+c]=e}):this[0]==window||this[0]==document?self[(c=="Left"?"pageXOffset":"pageYOffset")]||b.boxModel&&document.documentElement["scroll"+c]||document.body["scroll"+c]:this[0]["scroll"+c]}});b.fn.extend({position:function(){var h=0,g=0,f=this[0],i,c,e,d;if(f){e=this.offsetParent();i=this.offset();c=e.offset();i.top-=a(f,"marginTop");i.left-=a(f,"marginLeft");c.top+=a(e,"borderTopWidth");c.left+=a(e,"borderLeftWidth");d={top:i.top-c.top,left:i.left-c.left}}return d},offsetParent:function(){var c=this[0].offsetParent;while(c&&(!/^body|html$/i.test(c.tagName)&&b.css(c,"position")=="static")){c=c.offsetParent}return b(c)}});var a=function(c,d){return parseInt(b.css(c.jquery?c[0]:c,d))||0}})(jQuery);
  • trunk/bp-xprofile/admin/css/admin.css

    r3300 r3477  
    1 /* Profile field group main admin page */
    2 #tabs {
    3     position: relative;
    4     }
    5     p.nofields {
    6         margin-top: 20px;
    7     }
    8 
    9     /* Field group tabs */
    10     ul#field-group-tabs {
    11         float: left;
    12         padding: 0 0 0 15px;
    13         display: none;
    14     }
    15         ul#field-group-tabs li {
    16             float: left;
    17             margin-bottom: -1px;
    18             background-color: #F7F6F1;
    19             margin-right: 8px;
    20         }
    21         ul#field-group-tabs li.ui-state-hover {
    22             background-color: #fafafa;
    23         }
    24         ul#field-group-tabs li.ui-state-hover a.ui-tab {
    25             border-color: #bbb #bbb #ccc #bbb;
    26             color: #888;
    27         }
    28         ul#field-group-tabs li.ui-state-acceptable a.ui-tab {
    29             border-color: #5a5 #5a5 #ccc #5a5;
    30             color: #8a8;
    31             background-image: url(../images/plus.gif);
    32             background-color: #efe;
    33         }
    34             ul#field-group-tabs li.ui-tabs-selected.ui-state-acceptable a.ui-tab {
    35                 background-color: #fff;
    36                 background-image: url(../images/cross.gif);
    37             }
    38         ul#field-group-tabs li.drop-candidate a.ui-tab {
    39             background-color: #ffc;
    40             border-color: #aa5 #aa5 #ccc #aa5;
    41             color: #aa8;
    42         }
    43         ul#field-group-tabs li a.ui-tab {
    44             display: block;
    45             margin-top: 3px;
    46             padding: 8px 10px 8px 28px;
    47             border: 1px solid #ccc;
    48             border-bottom: none;
    49             -moz-border-radius: 5px 5px 0 0;
    50             -khtml-border-radius: 5px 5px 0 0;
    51             -webkit-border-radius: 5px 5px 0 0;
    52             border-radius: 5px 5px 0 0;
    53             text-decoration: none;
    54             background: url(../images/move-x.gif) 7px 55% no-repeat;
    55             color: #888;
    56         }
    57 
    58         /* Selected tab */
    59         ul#field-group-tabs li.ui-tabs-selected {
    60             background-color: #fff;
    61         }
    62         ul#field-group-tabs li.ui-tabs-selected a.ui-tab {
    63             margin-top: -1px;
    64             padding: 10px 10px 10px 28px;
    65             border: 1px solid #bbb;
    66             border-bottom: 1px solid transparent;
    67             color: #000;
    68             font-weight: bold;
    69         }
    70 
    71     /* Toolbar */
    72     .tab-toolbar {
    73         margin-top: 1px;
    74         clear: left;
    75         background-color: #fff;
    76         padding: 10px;
    77         border: 1px solid #bbb;
    78     }
    79 
    80     div.tab-wrapper {
    81         clear: left;
    82         margin-bottom: 20px;
    83     }
    84 
    85     .tab-wrapper fieldset {
    86         border: 1px solid #ddd;
    87         -moz-border-radius: 5px;
    88         -khtml-border-radius: 5px;
    89         -webkit-border-radius: 5px;
    90         border-radius: 5px;
    91         padding: 0 10px 10px;
    92         margin: 10px 0 0 0;
    93         position: relative;
    94         background-color: #fff;
    95     }
    96     .tab-wrapper fieldset fieldset {
    97         padding: 10px 10px 20px 10px;
    98         background-color: #fcfcfc;
    99     }
    100         .field-group fieldset:hover {
    101             background-color: #fafafa;
    102             border-color: #ccc;
    103         }
    104         fieldset div.field-wrapper {
    105             padding-left: 30px;
    106             background: url(../images/move.gif) 0px 3px no-repeat transparent;
    107         }
    108     fieldset.radio div div,
    109     fieldset.checkbox div div {
    110         float: left;
    111     }
    112     fieldset.radio div div label,
    113     fieldset.checkbox div div label {
    114         margin-right: 20px;
    115     }
    116 
    117     fieldset.clear-value {
    118         margin-left: 10px;
    119     }
    120     .field-group div.actions {
    121         display: none;
    122         position: absolute;
    123         right: 20px;
    124         top: 0;
    125     }
    126     .field-group fieldset:hover div.actions {
    127         display: block;
    128     }
    129     .field-group fieldset.ui-sortable-placeholder {
    130         border: 1px dashed #999;
    131         background-color: #eee;
    132         visibility: visible !important;
    133     }
    134 
    135     ul.forTab {
    136         list-style: none;
    137         padding: 0;
    138         margin: 0 0 0 1em;
    139     }
    140         ul.forTab li {
    141             margin: 0 0 1em 0;
    142         }
    143 
    144             ul.forTab li label {
    145                 display: block;
    146             }
    147 
    148             ul.forTab li input {
    149                 font-size: 1.4em;
    150             }
    151 
    152     p.success { background: green;}
    153     p.err {
    154         border-top: 2px solid red;
    155         border-bottom: 2px solid red;
    156         color: red;
    157         padding: 5px 0;
    158         width: 40%;
    159     }
    160 
    161     span.desc, span.signup-description {
    162         display: block;
    163         font-size: 11px;
    164         color: #555;
    165     }
    166 
    167     select.multi-select {
    168         width:90%;
    169         height:10em !important;
    170     }
    171 
    172 ul.multi-checkbox {
    173     margin: 0 5px 0 0px;
    174     padding: .5em .9em;
    175     height: 10em;
    176     overflow: auto;
    177     list-style: none;
    178     border: solid 1px #ccc;
    179     width: 90%;
    180 }
    181 
    182 ul.multi-checkbox li {
    183     padding: 0;
    184     margin: 0;
    185 }
    186 
    187 div.options-box {
    188     margin-left: 20px !important;
    189     margin-right: 10px !important;
    190     border-left: 4px solid #EAF3FA;
    191     padding-left: 15px;
    192 }
    193 
    194 th a {
    195     background: #fff;
    196     padding: 2px 5px;
    197     -moz-border-radius: 3px;
    198     -khtml-border-radius: 3px;
    199     -webkit-border-radius: 3px;
    200     border-radius: 3px;
    201     top: -2px;
    202 }
    203 
    204 textarea#description {
    205     border: 1px solid #ddd;
    206     width: 85%;
    207 }
     1#tabs{position:relative;}p.nofields{margin-top:20px;}ul#field-group-tabs{float:left;padding:0 0 0 15px;display:none;}ul#field-group-tabs li{float:left;margin-bottom:-1px;background-color:#F7F6F1;margin-right:8px;}ul#field-group-tabs li.ui-state-hover{background-color:#fafafa;}ul#field-group-tabs li.ui-state-hover a.ui-tab{border-color:#bbb #bbb #ccc #bbb;color:#888;}ul#field-group-tabs li.ui-state-acceptable a.ui-tab{border-color:#5a5 #5a5 #ccc #5a5;color:#8a8;background-image:url(../images/plus.gif);background-color:#efe;}ul#field-group-tabs li.ui-tabs-selected.ui-state-acceptable a.ui-tab{background-color:#fff;background-image:url(../images/cross.gif);}ul#field-group-tabs li.drop-candidate a.ui-tab{background-color:#ffc;border-color:#aa5 #aa5 #ccc #aa5;color:#aa8;}ul#field-group-tabs li a.ui-tab{display:block;margin-top:3px;padding:8px 10px 8px 28px;border:1px solid #ccc;border-bottom:none;-moz-border-radius:5px 5px 0 0;-khtml-border-radius:5px 5px 0 0;-webkit-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0;text-decoration:none;background:url(../images/move-x.gif) 7px 55% no-repeat;color:#888;}ul#field-group-tabs li.ui-tabs-selected{background-color:#fff;}ul#field-group-tabs li.ui-tabs-selected a.ui-tab{margin-top:-1px;padding:10px 10px 10px 28px;border:1px solid #bbb;border-bottom:1px solid transparent;color:#000;font-weight:bold;}.tab-toolbar{margin-top:1px;clear:left;background-color:#fff;padding:10px;border:1px solid #bbb;}div.tab-wrapper{clear:left;margin-bottom:20px;}.tab-wrapper fieldset{border:1px solid #ddd;-moz-border-radius:5px;-khtml-border-radius:5px;-webkit-border-radius:5px;border-radius:5px;padding:0 10px 10px;margin:10px 0 0 0;position:relative;background-color:#fff;}.tab-wrapper fieldset fieldset{padding:10px 10px 20px 10px;background-color:#fcfcfc;}.field-group fieldset:hover{background-color:#fafafa;border-color:#ccc;}fieldset div.field-wrapper{padding-left:30px;background:url(../images/move.gif) 0 3px no-repeat transparent;}fieldset.radio div div,fieldset.checkbox div div{float:left;}fieldset.radio div div label,fieldset.checkbox div div label{margin-right:20px;}fieldset.clear-value{margin-left:10px;}.field-group div.actions{display:none;position:absolute;right:20px;top:0;}.field-group fieldset:hover div.actions{display:block;}.field-group fieldset.ui-sortable-placeholder{border:1px dashed #999;background-color:#eee;visibility:visible!important;}ul.forTab{list-style:none;padding:0;margin:0 0 0 1em;}ul.forTab li{margin:0 0 1em 0;}ul.forTab li label{display:block;}ul.forTab li input{font-size:1.4em;}p.success{background:green;}p.err{border-top:2px solid red;border-bottom:2px solid red;color:red;padding:5px 0;width:40%;}span.desc,span.signup-description{display:block;font-size:11px;color:#555;}select.multi-select{width:90%;height:10em!important;}ul.multi-checkbox{margin:0 5px 0 0;padding:.5em .9em;height:10em;overflow:auto;list-style:none;border:solid 1px #ccc;width:90%;}ul.multi-checkbox li{padding:0;margin:0;}div.options-box{margin-left:20px!important;margin-right:10px!important;border-left:4px solid #EAF3FA;padding-left:15px;}th a{background:#fff;padding:2px 5px;-moz-border-radius:3px;-khtml-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;top:-2px;}textarea#description{border:1px solid #ddd;width:85%;}
  • trunk/bp-xprofile/admin/js/admin.js

    r3300 r3477  
    1 function add_option(forWhat) {
    2     var holder = document.getElementById(forWhat + "_more");
    3     var theId = document.getElementById(forWhat + '_option_number').value;
    4 
    5     var newDiv = document.createElement('p');
    6     newDiv.setAttribute('id', forWhat + '_div' + theId);
    7 
    8     var newOption = document.createElement('input');
    9     newOption.setAttribute('type', 'text');
    10     newOption.setAttribute('name', forWhat + '_option[' + theId + ']');
    11     newOption.setAttribute('id', forWhat + '_option' + theId);
    12 
    13     var label = document.createElement('label');
    14     label.setAttribute('for', forWhat + '_option' + theId);
    15    
    16     var txt = document.createTextNode("Option " + theId + ": ");
    17     label.appendChild(txt);
    18    
    19     var isDefault = document.createElement('input');
    20    
    21     if(forWhat == 'checkbox' || forWhat == 'multiselectbox') {
    22         isDefault.setAttribute('type', 'checkbox');
    23         isDefault.setAttribute('name', 'isDefault_' + forWhat + '_option[' + theId + ']');
    24     } else {
    25         isDefault.setAttribute('type', 'radio');
    26         isDefault.setAttribute('name', 'isDefault_' + forWhat + '_option');                 
    27     }
    28    
    29     isDefault.setAttribute('value', theId);
    30    
    31     var label1 = document.createElement('label');
    32     var txt1 = document.createTextNode(" Default Value ");
    33    
    34     label1.appendChild(txt1);
    35     label1.setAttribute('for', 'isDefault_' + forWhat + '_option[]');
    36     toDelete = document.createElement('a');
    37    
    38     toDeleteText = document.createTextNode('[x]');
    39     toDelete.setAttribute('href',"javascript:hide('" + forWhat + '_div' + theId + "')");
    40    
    41     toDelete.setAttribute('class','delete');
    42 
    43     toDelete.appendChild(toDeleteText);
    44 
    45     newDiv.appendChild(label);
    46     newDiv.appendChild(newOption);
    47     newDiv.appendChild(document.createTextNode(" "));
    48     newDiv.appendChild(isDefault);
    49     newDiv.appendChild(label1);
    50     newDiv.appendChild(toDelete);   
    51     holder.appendChild(newDiv);
    52    
    53    
    54     theId++
    55     document.getElementById(forWhat + "_option_number").value = theId;
    56 }
    57 
    58 function show_options(forWhat) {
    59     document.getElementById("radio").style.display = "none";
    60     document.getElementById("selectbox").style.display = "none";
    61     document.getElementById("multiselectbox").style.display = "none";
    62     document.getElementById("checkbox").style.display = "none";
    63    
    64     if(forWhat == "radio")
    65         document.getElementById("radio").style.display = "";
    66    
    67     if(forWhat == "selectbox")
    68         document.getElementById("selectbox").style.display = "";                       
    69    
    70     if(forWhat == "multiselectbox")
    71         document.getElementById("multiselectbox").style.display = "";                       
    72    
    73     if(forWhat == "checkbox")
    74         document.getElementById("checkbox").style.display = "";                     
    75 }
    76 
    77 function hide(id) {
    78     if ( !document.getElementById(id) ) return false;
    79    
    80     document.getElementById(id).style.display = "none";
    81     document.getElementById(id).value = '';
    82 }
    83 
    84 // Set up deleting options ajax
    85 jQuery(document).ready( function() {
    86    
    87     jQuery("a.ajax-option-delete").click(
    88         function() {
    89             var theId = this.id.split('-');
    90             theId = theId[1];
    91            
    92             jQuery.post( ajaxurl, {
    93                 action: 'xprofile_delete_option',
    94                 'cookie': encodeURIComponent(document.cookie),
    95                 '_wpnonce': jQuery("input#_wpnonce").val(),
    96                
    97                 'option_id': theId
    98             },
    99             function(response)
    100             {});
    101         }
    102     );             
    103 });
    104 
    105 var fixHelper = function(e, ui) {
    106     ui.children().each(function() {
    107         jQuery(this).width( jQuery(this).width() );
    108     });
    109     return ui;
    110 };
    111 
    112 // Main XProfile behavior layer
    113 jQuery(document).ready( function() {
    114     /* Show object if JS is enabled */
    115     jQuery( "ul#field-group-tabs" ).show();
    116 
    117     /* Allow reordering of field group tabs */
    118     jQuery( "ul#field-group-tabs" ).sortable( {
    119         cursor: 'move',
    120         axis: 'x',
    121         opacity: 0.6,
    122         items: 'li',
    123         tolerance: 'pointer',
    124 
    125         update: function() {
    126             jQuery.post( ajaxurl, {
    127                 action: 'xprofile_reorder_groups',
    128                 'cookie': encodeURIComponent(document.cookie),
    129                 '_wpnonce_reorder_groups': jQuery( "input#_wpnonce_reorder_groups" ).val(),
    130                 'group_order': jQuery(this).sortable( 'serialize' )
    131             },
    132             function(response){});
    133         }
    134     }).disableSelection();
    135 
    136     /* Allow reordering of fields within groups */
    137     jQuery( "fieldset.field-group" ).sortable({
    138         cursor: 'move',
    139         opacity: 0.3,
    140         items: 'fieldset',
    141         tolerance: 'pointer',
    142 
    143         update: function() {
    144             jQuery.post( ajaxurl, {
    145                 action: 'xprofile_reorder_fields',
    146                 'cookie': encodeURIComponent(document.cookie),
    147                 '_wpnonce_reorder_fields': jQuery( "input#_wpnonce_reorder_fields" ).val(),
    148                 'field_order': jQuery(this).sortable( 'serialize' ),
    149                 'field_group_id': jQuery(this).attr( 'id' )
    150             },
    151             function(response)
    152             {});
    153         }
    154     })
    155 
    156     /* Disallow text selection */
    157     .disableSelection()
    158 
    159     /* Change cursor to move if JS is enabled */
    160     .css( 'cursor', 'move' );
    161 
    162     /* tabs init with a custom tab template and an "add" callback filling in the content */
    163     var $tab_items;
    164     var $tabs = jQuery( "#tabs" ).tabs();
    165     set_tab_items( $tabs );
    166 
    167     function set_tab_items( $tabs ) {
    168         $tab_items = jQuery( "ul:first li", $tabs ).droppable({
    169             accept: ".connectedSortable fieldset",
    170             hoverClass: "ui-state-hover",
    171             activeClass: "ui-state-acceptable",
    172             touch: "pointer",
    173             tolerance: "pointer",
    174 
    175             /* When field is dropped on tab */
    176             drop: function( ev, ui ) {
    177                 /* The tab */
    178                 var $item = jQuery(this);
    179 
    180                 /* The tab body */
    181                 var $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
    182 
    183                 /* Remove helper class */
    184                 jQuery($item).removeClass( 'drop-candidate' );
    185 
    186                 /* Hide field, change selected tab, and show new placement */
    187                 ui.draggable.hide( 'slow', function() {
    188 
    189                     /* Select new tab as current */
    190                     $tabs.tabs( 'select', $tab_items.index( $item ) );
    191 
    192                     /* Show new placement */
    193                     jQuery(this).appendTo($list).show( 'slow' ).animate( {opacity: "1"}, 500 );
    194 
    195                     /* Refresh $list variable */
    196                     $list = jQuery( $item.find( 'a' ).attr( 'href' ) ).find( '.connectedSortable' );
    197                     jQuery($list).find( 'p.nofields' ).hide( 'slow' );
    198 
    199                     /* Ajax update field locations and orders */
    200                     jQuery.post( ajaxurl, {
    201                         action: 'xprofile_reorder_fields',
    202                         'cookie': encodeURIComponent(document.cookie),
    203                         '_wpnonce_reorder_fields': jQuery( "input#_wpnonce_reorder_fields" ).val(),
    204                         'field_order': jQuery( $list ).sortable( 'serialize' ),
    205                         'field_group_id': jQuery( $list ).attr( 'id' )
    206                     },
    207                     function(response){});
    208                 });
    209             },
    210             over: function( event, ui ) {
    211                 jQuery(this).addClass( 'drop-candidate' );
    212             },
    213             out: function( event, ui ) {
    214                 jQuery(this).removeClass( 'drop-candidate' );
    215             }
    216         });
    217     }
    218 });
     1function add_option(f){var h=document.getElementById(f+"_more");var j=document.getElementById(f+"_option_number").value;var a=document.createElement("p");a.setAttribute("id",f+"_div"+j);var g=document.createElement("input");g.setAttribute("type","text");g.setAttribute("name",f+"_option["+j+"]");g.setAttribute("id",f+"_option"+j);var i=document.createElement("label");i.setAttribute("for",f+"_option"+j);var e=document.createTextNode("Option "+j+": ");i.appendChild(e);var b=document.createElement("input");if(f=="checkbox"||f=="multiselectbox"){b.setAttribute("type","checkbox");b.setAttribute("name","isDefault_"+f+"_option["+j+"]")}else{b.setAttribute("type","radio");b.setAttribute("name","isDefault_"+f+"_option")}b.setAttribute("value",j);var d=document.createElement("label");var c=document.createTextNode(" Default Value ");d.appendChild(c);d.setAttribute("for","isDefault_"+f+"_option[]");toDelete=document.createElement("a");toDeleteText=document.createTextNode("[x]");toDelete.setAttribute("href","javascript:hide('"+f+"_div"+j+"')");toDelete.setAttribute("class","delete");toDelete.appendChild(toDeleteText);a.appendChild(i);a.appendChild(g);a.appendChild(document.createTextNode(" "));a.appendChild(b);a.appendChild(d);a.appendChild(toDelete);h.appendChild(a);j++;document.getElementById(f+"_option_number").value=j}function show_options(a){document.getElementById("radio").style.display="none";document.getElementById("selectbox").style.display="none";document.getElementById("multiselectbox").style.display="none";document.getElementById("checkbox").style.display="none";if(a=="radio"){document.getElementById("radio").style.display=""}if(a=="selectbox"){document.getElementById("selectbox").style.display=""}if(a=="multiselectbox"){document.getElementById("multiselectbox").style.display=""}if(a=="checkbox"){document.getElementById("checkbox").style.display=""}}function hide(a){if(!document.getElementById(a)){return false}document.getElementById(a).style.display="none";document.getElementById(a).value=""}jQuery(document).ready(function(){jQuery("a.ajax-option-delete").click(function(){var a=this.id.split("-");a=a[1];jQuery.post(ajaxurl,{action:"xprofile_delete_option",cookie:encodeURIComponent(document.cookie),_wpnonce:jQuery("input#_wpnonce").val(),option_id:a},function(b){})})});var fixHelper=function(b,a){a.children().each(function(){jQuery(this).width(jQuery(this).width())});return a};jQuery(document).ready(function(){jQuery("ul#field-group-tabs").show();jQuery("ul#field-group-tabs").sortable({cursor:"move",axis:"x",opacity:0.6,items:"li",tolerance:"pointer",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_groups",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_groups:jQuery("input#_wpnonce_reorder_groups").val(),group_order:jQuery(this).sortable("serialize")},function(d){})}}).disableSelection();jQuery("fieldset.field-group").sortable({cursor:"move",opacity:0.3,items:"fieldset",tolerance:"pointer",update:function(){jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(this).sortable("serialize"),field_group_id:jQuery(this).attr("id")},function(d){})}}).disableSelection().css("cursor","move");var b;var a=jQuery("#tabs").tabs();c(a);function c(d){b=jQuery("ul:first li",d).droppable({accept:".connectedSortable fieldset",hoverClass:"ui-state-hover",activeClass:"ui-state-acceptable",touch:"pointer",tolerance:"pointer",drop:function(g,h){var e=jQuery(this);var f=jQuery(e.find("a").attr("href")).find(".connectedSortable");jQuery(e).removeClass("drop-candidate");h.draggable.hide("slow",function(){d.tabs("select",b.index(e));jQuery(this).appendTo(f).show("slow").animate({opacity:"1"},500);f=jQuery(e.find("a").attr("href")).find(".connectedSortable");jQuery(f).find("p.nofields").hide("slow");jQuery.post(ajaxurl,{action:"xprofile_reorder_fields",cookie:encodeURIComponent(document.cookie),_wpnonce_reorder_fields:jQuery("input#_wpnonce_reorder_fields").val(),field_order:jQuery(f).sortable("serialize"),field_group_id:jQuery(f).attr("id")},function(i){})})},over:function(e,f){jQuery(this).addClass("drop-candidate")},out:function(e,f){jQuery(this).removeClass("drop-candidate")}})}});
  • trunk/bp-xprofile/bp-xprofile-cssjs.php

    r3365 r3477  
    11<?php
    2 
    32function xprofile_add_admin_css() {
    4     wp_enqueue_style( 'xprofile-admin-css', BP_PLUGIN_URL . '/bp-xprofile/admin/css/admin.css' );
     3    if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     4        wp_enqueue_style( 'xprofile-admin-css', BP_PLUGIN_URL . '/bp-xprofile/admin/css/admin.dev.css' );
     5    else
     6        wp_enqueue_style( 'xprofile-admin-css', BP_PLUGIN_URL . '/bp-xprofile/admin/css/admin.css' );
    57}
    68add_action( 'admin_menu', 'xprofile_add_admin_css' );
    79
    810function xprofile_add_admin_js() {
    9     if ( isset( $_GET['page'] ) && strpos( $_GET['page'], 'bp-profile-setup' ) !== false ) {
     11    if ( !empty( $_GET['page'] ) && strpos( $_GET['page'], 'bp-profile-setup' ) !== false ) {
    1012        wp_enqueue_script( 'jquery-ui-core' );
    1113        wp_enqueue_script( 'jquery-ui-tabs' );
     
    1416        wp_enqueue_script( 'jquery-ui-droppable' );
    1517        wp_enqueue_script( 'jquery-ui-sortable' );
    16         wp_enqueue_script( 'xprofile-admin-js', BP_PLUGIN_URL . '/bp-xprofile/admin/js/admin.js', array( 'jquery', 'jquery-ui-sortable' ) );
     18
     19        if ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG )
     20            wp_enqueue_script( 'xprofile-admin-js', BP_PLUGIN_URL . '/bp-xprofile/admin/js/admin.dev.js', array( 'jquery', 'jquery-ui-sortable' ) );
     21        else
     22            wp_enqueue_script( 'xprofile-admin-js', BP_PLUGIN_URL . '/bp-xprofile/admin/js/admin.js', array( 'jquery', 'jquery-ui-sortable' ) );
    1723    }
    1824}
    1925add_action( 'admin_menu', 'xprofile_add_admin_js', 1 );
    20 
    2126?>
Note: See TracChangeset for help on using the changeset viewer.