Changeset 14843

Show
Ignore:
Timestamp:
02/11/08 13:27:51 (10 months ago)
Author:
w_i
Message:

Added loader.gif, hover classes, default structure and CSS, Made it work optionally through GET args also

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/midcom/net.nemein.favourites/admin.php

    r14773 r14843  
    206206        echo net_nemein_favourites_admin::get_add_link($objectType, $guid, $url, $link_for_anonymous); 
    207207    } 
     208     
     209    function get_ajax_headers($js_options='{}', $element_path='.net_nemein_favourites') 
     210    { 
     211        $html = "<script type=\"text/javascript\" src=\"" . MIDCOM_STATIC_URL . "/jQuery/jquery.metadata.js\"></script>\n"; 
     212        $html .= "<script type=\"text/javascript\" src=\"" . MIDCOM_STATIC_URL . "/net.nemein.favourites/net_nemein_favourites.js\" ></script>\n"; 
     213 
     214        $html .= "<link rel=\"stylesheet\" type=\"text/css\" href=\"" . MIDCOM_STATIC_URL . "/net.nemein.favourites/screen.css\" media=\"screen\" />\n\n"; 
     215         
     216        $add_html = ''; 
     217        if (   isset($_REQUEST['net_nemein_favourites_execute_for']) 
     218            && isset($_REQUEST['net_nemein_favourites_url'])) 
     219        { 
     220            $action = $_REQUEST['net_nemein_favourites_execute']; 
     221            $guid = $_REQUEST['net_nemein_favourites_execute_for']; 
     222            // $add_html .= "jQuery('{$element_path}').net_nemein_favourites_execute({$js_options}, '{$action}', '{$guid}', '{$_REQUEST['net_nemein_favourites_url']}');\n"; 
     223             
     224            $add_html .= ".net_nemein_favourites_execute({$js_options}, '{$action}', '{$guid}', '{$_REQUEST['net_nemein_favourites_url']}')\n"; 
     225        } 
     226         
     227        $html .= "<script type=\"text/javascript\">\n"; 
     228        $html .= "jQuery(document).ready(function(){\n"; 
     229        $html .= "jQuery('{$element_path}').net_nemein_favourites({$js_options}){$add_html};\n"; 
     230        //$html .= $add_html; 
     231        $html .= "});\n"; 
     232        $html .= "</script>\n\n"; 
     233         
     234        echo $html; 
     235    } 
    208236} 
    209237?> 
  • trunk/midcom/net.nemein.favourites/static/net_nemein_favourites.js

    r14377 r14843  
    1010                return new $.net.nemein.favourites.controller(this, options); 
    1111            }); 
    12         } 
     12        }, 
     13        net_nemein_favourites_execute: function(options, action, guid, url) 
     14        { 
     15            $.net.nemein.favourites.execute(options, action, guid, url); 
     16        }         
    1317    }); 
    1418     
     
    2327                bury_count: 'bury_count' 
    2428            }, 
    25             show_activity: false 
    26         } 
    27     }; 
    28      
    29     $.net.nemein.favourites.controller = function(holder, options) {         
    30         var _self = this; 
    31         var fav_btn = $('.'+options.classes.fav_btn, holder); 
    32         var bury_btn = $('.'+options.classes.bury_btn, holder); 
    33         var favs_cnt = $('.'+options.classes.favs_count, holder); 
    34         var bury_cnt = $('.'+options.classes.bury_count, holder); 
    35  
    36         $.meta.setType("class"); 
    37         var data = $(holder).data(); 
    38  
    39         update_view(data); 
    40  
    41         function execute(action, url) { 
    42             $.ajax({ 
    43                 url: url, 
    44                 type: "POST", 
    45                 global: false, 
    46                 cache: false, 
    47                 dataType: "json", 
    48                 contentType: 'application/json', 
    49                 processData: false, 
    50                 error: function(req) { 
    51                     return false; 
    52                 }, 
    53                 success: function(data) { 
    54                     update_view(data, action); 
     29            show_activity: false, 
     30            force_ssl: false 
     31        }, 
     32        execute: function() { 
     33            var options = jQuery.extend({}, $.net.nemein.favourites.defaults, arguments[0] || {}); 
     34            var url = arguments[3]; 
     35            var action = arguments[1];             
     36            var btn_class = options.classes[action+'_btn']; 
     37             
     38            if (typeof arguments[2] == 'string') { 
     39                var guid = arguments[2]; 
     40                 
     41                var loading_class = btn_class + '_loading'; 
     42                var button = $('#net_nemein_favourites_for_'+guid+' .'+btn_class); 
     43 
     44                button.addClass(loading_class); 
     45                $.ajax({ 
     46                    url: url, 
     47                    type: "POST", 
     48                    global: false, 
     49                    cache: false, 
     50                    dataType: "json", 
     51                    contentType: 'application/json', 
     52                    processData: false, 
     53                    error: function(req) { 
     54                        button.removeClass(loading_class); 
     55                        return false; 
     56                    }, 
     57                    success: function(data) { 
     58                        button.removeClass(loading_class); 
     59                        $.net.nemein.favourites.update_view(options, data, action); 
     60                        return true; 
     61                    } 
     62                }); 
     63            } else { 
     64                var button = arguments[2]; 
     65 
     66                var loading_class = options.classes[action+'_btn'] + '_loading'; 
     67 
     68                if (options.force_ssl) { 
     69                    var needs_to_change = true; 
     70                    if (window.location.protocol == 'https:') { 
     71                        needs_to_change = false; 
     72                    } 
     73 
     74                    var current_url = '' + (window.location).toString().split('?')[0]; 
     75                    if (needs_to_change) { 
     76                        //current_url = current_url.replace(/http/, 'https'); 
     77                    } 
     78 
     79                    var url_parts = url.split('/');                 
     80                    var guid = url_parts[url_parts.length-1]; 
     81                    if (guid == '') { 
     82                        guid = url_parts[url_parts.length-2]; 
     83                    } 
     84 
     85                    window.location.href = current_url + '?net_nemein_favourites_execute='+action+'&net_nemein_favourites_execute_for='+guid+'&net_nemein_favourites_url='+url; 
     86 
    5587                    return true; 
     88                } else { 
     89                    button.addClass(loading_class); 
     90 
     91                    $.ajax({ 
     92                        url: url, 
     93                        type: "POST", 
     94                        global: false, 
     95                        cache: false, 
     96                        dataType: "json", 
     97                        contentType: 'application/json', 
     98                        processData: false, 
     99                        error: function(req) { 
     100                            button.removeClass(loading_class); 
     101                            return false; 
     102                        }, 
     103                        success: function(data) { 
     104                            button.removeClass(loading_class); 
     105                            $.net.nemein.favourites.update_view(options, data, action); 
     106                            return true; 
     107                        } 
     108                    }); 
    56109                } 
    57             }); 
    58         } 
    59  
    60         function update_view(data, action) { 
     110            } 
     111        }, 
     112        update_view: function(options, data, action) { 
     113            var fav_btn = $('.'+options.classes.fav_btn); 
     114            var bury_btn = $('.'+options.classes.bury_btn); 
     115            var favs_cnt = $('.'+options.classes.favs_count); 
     116            var bury_cnt = $('.'+options.classes.bury_count); 
     117             
    61118            if (typeof action == 'undefined') { 
    62119                action = false; 
     
    76133                favs_cnt.removeClass(options.classes.favs_count+'_disabled'); 
    77134                fav_btn.bind("click", function(){         
    78                     execute('fav', data.fav_url); 
     135                    return $.net.nemein.favourites.execute(options, 'fav', fav_btn, data.fav_url); 
     136                }); 
     137                fav_btn.mouseover(function(){ 
     138                    fav_btn.addClass(options.classes.fav_btn+'_hover'); 
     139                }); 
     140                fav_btn.mouseout(function(){ 
     141                    fav_btn.removeClass(options.classes.fav_btn+'_hover'); 
    79142                }); 
    80143            } else { 
     
    90153                bury_cnt.removeClass(options.classes.bury_count+'_disabled'); 
    91154                bury_btn.bind("click", function(){ 
    92                     execute('bury', data.bury_url); 
     155                    return $.net.nemein.favourites.execute(options, 'bury', bury_btn, data.bury_url); 
     156                }); 
     157                bury_btn.mouseover(function(){ 
     158                    bury_btn.addClass(options.classes.bury_btn+'_hover'); 
     159                }); 
     160                bury_btn.mouseout(function(){ 
     161                    bury_btn.removeClass(options.classes.bury_btn+'_hover'); 
    93162                }); 
    94163            } else { 
     
    98167            } 
    99168        } 
    100  
    101169    }; 
     170     
     171    $.net.nemein.favourites.controller = function(holder, options) { 
     172        // var _self = this; 
     173        // var fav_btn = $('.'+options.classes.fav_btn, holder); 
     174        // var bury_btn = $('.'+options.classes.bury_btn, holder); 
     175        // var favs_cnt = $('.'+options.classes.favs_count, holder); 
     176        // var bury_cnt = $('.'+options.classes.bury_count, holder); 
     177 
     178        $.meta.setType("class"); 
     179        var data = $(holder).data(); 
     180 
     181        $.net.nemein.favourites.update_view(options, data); 
     182    }; 
    102183 
    103184})(jQuery); 
    104185 
    105 // To use this on site, following must be included in the header: 
     186// To use this on site, something like the following must be included in the header: 
    106187/* 
    107 <script type="text/javascript" src="<?php echo MIDCOM_STATIC_URL;?>/jQuery/jquery.metadata.js"></script> 
    108 <script type="text/javascript" src="<?php echo MIDCOM_STATIC_URL;?>/net.nemein.favourites/net_nemein_favourites.js"></script> 
    109 <script type="text/javascript"> 
    110     jQuery(document).ready(function(){ 
    111         jQuery('.net_nemein_favourites').net_nemein_favourites(); 
    112     }); 
    113 </script> 
     188<?php 
     189$_MIDCOM->componentloader->load_graceful('net.nemein.favourites'); 
     190net_nemein_favourites_admin::get_ajax_headers(); 
     191?> 
    114192*/ 
    115193 
    116 // Example html structure to use: 
     194// Default html structure to use: 
    117195/* 
    118 <div class='net_nemein_favourites <?php echo net_nemein_favourites_admin::get_json_data($data['article']->__new_class_name__, $data['article']->guid, '/favourites/');?>'> 
    119     <div class="fav_btn">Fav</div> 
    120     <div class="bury_btn">Bury</div> 
    121     <span class="favs_count">0</span> 
    122     <span class="bury_count">0</span> 
     196<div id="net_nemein_favourites_for_<?php echo $data['article']->guid; ?>" class='net_nemein_favourites <?php echo net_nemein_favourites_admin::get_json_data($data['article']->__new_class_name__, $data['article']->guid, '/favourites/');?>'> 
     197    <div class="fav_btn"><span class="favs_count">0</span></div> 
     198    <div class="bury_btn"><span class="bury_count">0</span></div> 
    123199</div> 
    124200*/