Feedback:

First of all, let me say that this is a tremendous effort. I'm impressed. Lots of good work here.

Don't include the full state of the application, just the current tab. The URL gets too long, and the application becomes confused. When transitioning betwen tabs, if you want to keep the state of other tabs, save the whole pre hashchange state in a hashtable, keyed on the tab name. It won't be bookmarked, but it will live as long as the user doesn't do a reload.

Facets are specific to the entity, not a generalizable list. The code that manages the set of facets should take a list from the entity object. Take a look at how the most recent netgroup.js file manages them:

this.setup = function(facet){
<http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l100> if (this[facet]){ <http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l101> this[facet].setup();
<http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l102>         }else{
<http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l103> this.unspecified.setup();
<http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l104>         }
<http://git.fedorahosted.org/cgi-bin/gitweb.cgi#l105>     }

But we also maintain an array: this.facets = ["details","users","groups","hosts","hostgroups"];

(I've removed the assign<entity> factets, as they are going to be modals just like 'add' is for 'details')

This is one place where JavaScript falls down. We should be able to enumerate through the property names of the object, but JavaScript enumeration does not honor order.

The CSS is broken and needs to be redone for:
    toplevel tabs
    subtabs
    facets
    list tables

As you mentioned, we need to add services back in.

I get an error on an undefined variable associationsList. Need to hunt that code down and remove it.


In navigation.js

I'm not a fan of the template approach. I prefer the $jquery way, as it at least validates the nodes. Please replace code like


var _nav_li_tab_template = '<li><a href="#I">N</a></li>';

function nav_insert_tab_li(jobj, id, name)
{
    jobj.append(_nav_li_tab_template.replace('I', id).replace('N', name));
}


with $("<li>" {
html = $("<a/>",{
    id=id,
    href=name
}




Don't prepend functions with ipa_ or nav_. We should not be creating new global variables. Instead, create a single global var ipa= {};

And then the global variables and functions go under that as:

ipa.entity={
    search_list: {};

    set_search_definition: function(obj_name, data)
    {
        search_list[obj_name] = data;
    }

    function tab_on_click(obj)
    {
        var jobj = $(this);
        var state = {};
        var id = jobj.closest('.tabs').attr('id');
        var index = jobj.parent().prevAll().length;

        state[id] = index;
        $.bbq.pushState(state);
    }

}

functions like tab_on_click that you want to be local should not be exposed in the public interface, just leave them like this and the other members of ipa.entity have access to them, but nothing else.


Don't repeat long parameter lists. Create a spec object, and pass it in to the functions. thus:

function nav_create(nls, container, tabclass)

becomes
/ *spec must have nls, container, tabclass*/
function nav_create(spec);

Then it can be called

nav_create({nls : blah, container : that, tabclass: "tabclass"});

Ideally this is done for factories and Constructors.


webui.js has the javascript function that kicks off all of the loigic, but it might get executed too early. It gets executed when the webui.js file is parsed, which might be before the index.xhtml file is fully loaded. It doesn't seem to be a problem, but one way to make sure is to put it at the end of the index.xhtml file, or to put an onload event hander lin the index.xhtml file that then calls the code in webui.xhtml. It is OK to start JS processing prior to the load of the main page, so long as it doesn't modify the dom of the main page. I suspect that the reason this works so far is because of the additional json calls for init and for whoami.

Again, delegate the code of the form "if (facet)..." to the tab object, just like the setup code above.

add.js: Add/ Add Edit should be Add and Edit /Add and Add Another. The logic looks OK, just the labels are off, I think

associate.js : The H1 tag is rendereing both above and below the enrollments.

We should change obj_name to entity, but not in this patch.

groups.js:  f_posix should probably be if_posix










_______________________________________________
Freeipa-devel mailing list
Freeipa-devel@redhat.com
https://www.redhat.com/mailman/listinfo/freeipa-devel

Reply via email to