Changeset 299 in main


Ignore:
Timestamp:
09/19/11 13:32:29 (8 years ago)
Author:
pcosquer
Message:

navigate: ajax

Location:
trunk/openPLM
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/media/js/navigate.js

    r298 r299  
    3636} 
    3737 
    38 function display_docs(doc_parts){ 
     38function update_nav(focus_node_id, data){ 
     39    var offset = $(focus_node_id).offset(); 
     40    var date = new Date(); 
     41    var divNav = $("#DivNav"); 
     42    $("#ImgNav").attr("src", data["img"] + '?v=' + date.getTime()); 
     43    $("#ImgNav").load( 
     44         function() { 
     45            $("div.node").remove(); 
     46            divNav.append(data.divs); 
     47            var submit = $("#FilterNav").find("li").last().clone(); 
     48            $("#FilterNavUl").html(data.form); 
     49            $("#FilterNavUl").append(submit); 
     50            var new_offset = $(focus_node_id).offset(); 
     51            var delta_top = new_offset.top - offset.top; 
     52            var delta_left = new_offset.left - offset.left; 
     53            divNav.css({ 
     54                left: '-=' + delta_left+"px", 
     55                top: '-=' + delta_top + "px"}); 
     56            init(); 
     57    }); 
     58} 
     59 
     60function display_docs(node_id, ajax_url, doc_parts){ 
    3961    $("#id_doc_parts").attr("value", doc_parts); 
    4062    $("#id_update").attr("value", "on"); 
    41     $("#FilterNav").find("form").submit(); 
     63    $.post(ajax_url, 
     64           $("#FilterNav").find("form").serialize(), 
     65           function(data) {update_nav("#" + node_id, data);}); 
    4266} 
    4367 
     68 
     69function init(){ 
     70        $("div.node").mouseenter( 
     71        function () { 
     72            $(this).find(".node_thumbnails").show(); 
     73            $(this).find(".node_show_docs").show(); 
     74        });  
     75        $("div.node").mouseleave( 
     76        function () { 
     77            $(this).find(".node_thumbnails").hide(); 
     78            $(this).find(".node_show_docs").hide(); 
     79        } 
     80        ); 
     81 
     82        $("#closeThumbnails").button({ 
     83            icons : { 
     84                primary: 'ui-icon-close' 
     85                }, 
     86            text: false}).click(hide_thumbnails_panel); 
     87 
     88        var config = {     
     89             over: function(){ 
     90                 if ($("#navThumbnails").is(":visible")) 
     91                       $(this).click();}, // function = onMouseOver callback (REQUIRED)     
     92             timeout: 500, // number = milliseconds delay before onMouseOut     
     93             out: function(){} // function = onMouseOut callback (REQUIRED)     
     94        }; 
     95        $(".node_thumbnails").hoverIntent(config); 
     96 
     97} 
    4498 
    4599$(document).ready(function(){ 
     
    91145cursor: 'crosshair' 
    92146}); 
    93         $("div.node").mouseenter( 
    94         function () { 
    95             $(this).find(".node_thumbnails").show(); 
    96             $(this).find(".node_show_docs").show(); 
    97         });  
    98         $("div.node").mouseleave( 
    99         function () { 
    100             $(this).find(".node_thumbnails").hide(); 
    101             $(this).find(".node_show_docs").hide(); 
    102         } 
    103         ); 
    104147 
    105         $("#closeThumbnails").button({ 
    106             icons : { 
    107                 primary: 'ui-icon-close' 
    108                 }, 
    109             text: false}).click(hide_thumbnails_panel); 
    110  
    111         var config = {     
    112              over: function(){ 
    113                  if ($("#navThumbnails").is(":visible")) 
    114                        $(this).click();}, // function = onMouseOver callback (REQUIRED)     
    115              timeout: 500, // number = milliseconds delay before onMouseOut     
    116              out: function(){} // function = onMouseOut callback (REQUIRED)     
    117         }; 
    118         $(".node_thumbnails").hoverIntent(config); 
     148    init(); 
    119149}); 
  • trunk/openPLM/plmapp/navigate.py

    r298 r299  
    4848 
    4949def get_path(obj): 
    50     return "/".join(map(encode, (obj.type, obj.reference, obj.revision))) 
     50    if hasattr(obj, "type"): 
     51        return "/".join(map(encode, (obj.type, obj.reference, obj.revision))) 
     52    else: 
     53        return obj.username 
    5154 
    5255 
     
    274277                         'request_notification_from':(self._create_object_edges, 'notified'), 
    275278                         } 
    276         self.options["doc"] = self.options["doc"] or self.object.id in self.options["doc_parts"] 
    277279        for field, value in self.options.items(): 
    278280            if value and field in functions_dic: 
    279281                function, argument = functions_dic[field] 
    280282                function(self.object, argument) 
     283        if not self.options["doc"] and self.object.id in self.options["doc_parts"]: 
     284            self._create_doc_edges(self.object, None) 
    281285 
    282286    def _set_node_attributes(self, obj, obj_id=None, extra_label=""): 
     
    295299                node.attr["tooltip"] = "/ajax/thumbnails/" + get_path(obj) 
    296300            elif type_ == PartController and not self.options["doc"]: 
    297                 s = "+" if  not obj.id in self.options["doc_parts"] else "-" 
     301                s = "+" if obj.id not in self.options["doc_parts"] else "-" 
    298302                node.attr["tooltip"] = s + str(obj.id) 
    299303        else: 
    300304            node.attr["label"] = encode(obj.username) 
    301305        node.attr["label"] += "\\n" + encode(extra_label) 
     306        node.attr["id"] = obj_id or obj.id 
    302307 
    303308    def convert_map(self, map_string): 
    304309        elements = [] 
    305310        doc_parts = "#".join(str(o) for o in self.options["doc_parts"]) 
     311        ajax_navigate = "/ajax/navigate/" + get_path(self.object) 
    306312        for area in ET.fromstring(map_string).findall("area"): 
    307313            left, top, x2, y2 = map(int, area.get("coords").split(",")) 
     
    330336                        title="Show related documents") 
    331337                show_doc.set("class", "node_show_docs ui-button ui-widget ui-state-default ui-corner-all") 
    332                 show_doc.set("onclick", "display_docs('%s');" % (parts)) 
    333                  
     338                show_doc.set("onclick", "display_docs('%s', '%s', '%s');" % (id_, ajax_navigate, parts)) 
    334339            a = ET.SubElement(div, "a", href=area.get("href"))  
    335340            ET.SubElement(a, "span") 
  • trunk/openPLM/plmapp/views.py

    r298 r299  
    14051405 
    14061406def get_navigate_data(request, obj_type, obj_ref, obj_revi): 
    1407  
    1408     pass 
    1409  
    1410 @handle_errors 
    1411 def navigate(request, obj_type, obj_ref, obj_revi): 
    1412     """ 
    1413     Manage html page which displays a graphical picture the different links 
    1414     between :class:`~django.contrib.auth.models.User` and  :class:`.models.PLMObject`. 
    1415     This function uses Graphviz (http://graphviz.org/). 
    1416     Some filters let user defines which type of links he/she wants to display. 
    1417     It computes a context dictionary based on 
    1418      
    1419     :param request: :class:`django.http.QueryDict` 
    1420     :param obj_type: :class:`~django.contrib.auth.models.User` 
    1421     :type obj_type: str 
    1422     :param obj_ref: :attr:`~django.contrib.auth.models.User.username` 
    1423     :type obj_ref: str 
    1424     :param obj_revi: "-" 
    1425     :type obj_revi: str 
    1426     :return: a :class:`django.http.HttpResponse` 
    1427     """ 
    14281407    obj, context_dict, request_dict = display_global_page(request, obj_type, obj_ref, obj_revi) 
    14291408    request.session.update(request_dict) 
     
    14431422    if not form.is_valid(): 
    14441423        return HttpResponse('Bad post request') 
    1445      
    14461424    graph = NavigationGraph(obj, context_dict["results"]) 
    14471425    options = form.cleaned_data 
     
    14661444                         'y_img_position': y_img_position_corrected, 
    14671445                         'navigate_bool': True}) 
    1468     return render_to_response('Navigate.htm', context_dict,  
     1446    return context_dict 
     1447 
     1448@handle_errors 
     1449def navigate(request, obj_type, obj_ref, obj_revi): 
     1450    """ 
     1451    Manage html page which displays a graphical picture the different links 
     1452    between :class:`~django.contrib.auth.models.User` and  :class:`.models.PLMObject`. 
     1453    This function uses Graphviz (http://graphviz.org/). 
     1454    Some filters let user defines which type of links he/she wants to display. 
     1455    It computes a context dictionary based on 
     1456     
     1457    :param request: :class:`django.http.QueryDict` 
     1458    :param obj_type: :class:`~django.contrib.auth.models.User` 
     1459    :type obj_type: str 
     1460    :param obj_ref: :attr:`~django.contrib.auth.models.User.username` 
     1461    :type obj_ref: str 
     1462    :param obj_revi: "-" 
     1463    :type obj_revi: str 
     1464    :return: a :class:`django.http.HttpResponse` 
     1465    """ 
     1466    context = get_navigate_data(request, obj_type, obj_ref, obj_revi) 
     1467    return render_to_response('Navigate.htm', context,  
    14691468                              context_instance=RequestContext(request)) 
    14701469     
     
    15401539 
    15411540@login_required 
    1542 def ajax_show_docs(request, obj_type, obj_ref, obj_revi): 
    1543     """ 
    1544     Ajax view to get files and thumbnails of a document. 
    1545  
    1546     :param request: :class:`django.http.QueryDict` 
    1547     :param obj_type: :attr:`.PLMObject.type` 
    1548     :type obj_type: str 
    1549     :param obj_ref: :attr:`.PLMObject.reference` 
    1550     :type obj_ref: str 
    1551     :param obj_revi: :attr:`.PLMObject.revision` 
    1552     :type obj_revi: str 
    1553     """ 
    1554     obj = get_obj(obj_type, obj_ref, obj_revi, request.user) 
    1555     files = [] 
    1556     doc = "|".join((obj_type, obj_ref, obj_revi)) 
    1557     for f in obj.files: 
    1558         if f.thumbnail: 
    1559             img = "/media/thumbnails/%s" % f.thumbnail  
    1560         else: 
    1561             img = "/media/img/image-missing.png" 
    1562         files.append((f.filename, "/file/%d/" % f.id, img)) 
    1563     json = JSONEncoder().encode(dict(files=files, doc=doc)) 
     1541def ajax_navigate(request, obj_type, obj_ref, obj_revi): 
     1542    context = get_navigate_data(request, obj_type, obj_ref, obj_revi) 
     1543    data = {} 
     1544    data["img"] = context["picture_path"] 
     1545    data["divs"] = context["map_areas"] 
     1546    data["left"] = context["x_img_position"] 
     1547    data["top"] = context["y_img_position"] 
     1548    data["form"] = context["filter_object_form"].as_ul() 
     1549    json = JSONEncoder().encode(data) 
    15641550    return HttpResponse(json, mimetype='application/json') 
    15651551 
    1566  
  • trunk/openPLM/templates/Navigate.htm

    r292 r299  
    3939            {% trans "Display :" %} 
    4040                <form method="post" action="." > 
    41                     <ul id="FilterNav"> 
     41                    <ul id="FilterNavUl"> 
    4242                    {{filter_object_form.as_ul}} 
    4343                    <li><input type="submit" value="{% trans "FILTER" %}"/></li> 
  • trunk/openPLM/urls.py

    r298 r299  
    6666    (r'ajax/search/$', ajax_search_form), 
    6767    (r'ajax/complete/(?P<obj_type>\w+)/(?P<field>\w+)/$', ajax_autocomplete), 
    68     (r'ajax/thumbnails/(?P<obj_type>\w+)/(?P<obj_ref>%(x)s)/(?P<obj_revi>%(x)s)/' % {'x' : r'[^/?#\t\r\v\f]+'}, ajax_thumbnails), 
    69     (r'ajax/show_docs/(?P<obj_type>\w+)/(?P<obj_ref>%(x)s)/(?P<obj_revi>%(x)s)/' % {'x' : r'[^/?#\t\r\v\f]+'}, ajax_show_docs), 
     68    (r'ajax/thumbnails/(?P<obj_type>\w+)/(?P<obj_ref>%(x)s)/(?P<obj_revi>%(x)s)/?$' % {'x' : r'[^/?#\t\r\v\f]+'}, ajax_thumbnails), 
     69    (r'ajax/navigate/(?P<obj_type>\w+)/(?P<obj_ref>%(x)s)/(?P<obj_revi>%(x)s)/?$' % {'x' : r'[^/?#\t\r\v\f]+'}, ajax_navigate), 
    7070 
    7171    (object_url + r'$', display_object), 
Note: See TracChangeset for help on using the changeset viewer.