From 1bb412239d0735af11c3939bfe437cb8b49c7004 Mon Sep 17 00:00:00 2001 From: Pavel Zuna Date: Thu, 16 Sep 2010 10:28:07 -0400 Subject: Big webUI patch. Quick summary: - use jQuery UI and jQuery BBQ libraries - code restructuring The patch has so many changes they can't be listed here. Many parts of the code have been rewritten from scrach. See freeipa-devel mailing list: webUI code restructuring [wall of text, diagrams, ... you've been warned!] 2010-09-07 --- install/static/associate.js | 321 +++++++++++++++++++++++++++++--------------- 1 file changed, 210 insertions(+), 111 deletions(-) (limited to 'install/static/associate.js') diff --git a/install/static/associate.js b/install/static/associate.js index cd07c9f7..11c160f8 100644 --- a/install/static/associate.js +++ b/install/static/associate.js @@ -16,22 +16,17 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/* IPA Object Add - creating new instances of entities */ +*/ /* REQUIRES: ipa.js */ - -function keyForFacet(tab, facet){ - qs = ipa_parse_qs(); - var key = qs['tab'] +'-'+ qs['facet']; - return key; -} +/* CURRENTLY ALSO REQUIRES search.js, because it reuses it's code to create + * the AssociationList elements; IT NEEDS IT'S OWN CODE! */ /** *This associator is built for the case where each association requires a separate rpc */ -function SerialAssociator(form, oneObjPkey, manyObjPkeys){ +function SerialAssociator(form, oneObjPkey, manyObjPkeys) +{ this.form = form; this.manyObjPkeys = manyObjPkeys; this.oneObjPkey = oneObjPkey; @@ -55,27 +50,28 @@ function SerialAssociator(form, oneObjPkey, manyObjPkeys){ }, form.manyObj ); }else{ - location.hash="tab="+form.oneObj - +"&facet=details&pkey="+this.oneObjPkey; + var state = {}; + state[form.oneObj + '-facet'] = 'associate'; + state[form.oneObj + '-pkey'] = this.oneObjPkey; + $.bbq.pushState(state); } } - } /** *This associator is for the common case where all the asociations can be sent in a single rpc */ -function BulkAssociator(form, pkey, manyObjPkeys){ - - this.form = form; - this.pkey =pkey; - this.manyObjPkeys = manyObjPkeys; +function BulkAssociator(form, pkey, manyObjPkeys) +{ + this.form = form; + this.pkey = pkey; + this.manyObjPkeys = manyObjPkeys; - this.associateNext = function(){ + this.associateNext = function() { var form = this.form; var option = manyObjPkeys.shift(); - while(manyObjPkeys.length > 0){ + while(manyObjPkeys.length > 0) { option += "," + manyObjPkeys.shift(); } @@ -85,15 +81,16 @@ function BulkAssociator(form, pkey, manyObjPkeys){ options[form.manyObj] = option; var args = [this.pkey]; - var associator = this; + ipa_cmd( form.method,args, options , function(response){ - var qs = ipa_parse_qs(); if (response.error){ alert("error adding memeber"); }else{ - location.hash="tab=" +form.oneObj - +"&facet=details&pkey="+associator.pkey; + var state = {}; + state[form.onObj + '-facet'] = 'associate'; + state[form.oneObj + '-pkey'] = this.pkey; + $.bbq.pushState(state); } }, function(response){ @@ -107,45 +104,42 @@ function BulkAssociator(form, pkey, manyObjPkeys){ * Create a form for a one to many association. * */ -function AssociationForm(oneObj, manyObj,facet,facets, searchColumn, headerText , associatorConstructor, method){ +function AssociationForm(oneObj, manyObj, pkey, jobj, associatorConstructor, method) +{ this.oneObj = oneObj; this.manyObj = manyObj; - this.facet = facet; - this.facets = facets; - this.headerText = headerText; - this.searchColumn = searchColumn; + this.searchColumn = pkey; + this.parentTab = jobj + //An optional parameter to determine what ipa method to call to create //the association - if (method){ + if (method) this.method = method; - }else{ + else this.method = 'add_member'; - } - if (associatorConstructor){ + if (associatorConstructor) this.associatorConstructor = associatorConstructor; - }else{ + else this.associatorConstructor = SerialAssociator; - } - - this.setup = function(pkey){ - showAssociations(); - qs = ipa_parse_qs(); - $("#availableList").html(""); - $("#enrollments").html(""); - setupFacetNavigation(this.oneObj,qs['pkey'],qs['facet'],this.facets); + this.setup = function() { + association_form_create(this.parentTab); + this.parentTab.find('#availableList').html(''); + this.parentTab.find('#enrollments').html(''); - this.currentUserToEnroll = qs['pkey']; - this.manyObjPkeys = []; + var currentObjToEnroll = $.bbq.getState(this.oneObj + '-pkey', true) || ''; var form = this; - $('h1').text(this.headerText()); - - - $("#enroll").click(function(){ + $('h1').text('Enroll ' + this.oneObj + ' ' + currentObjToEnroll + ' in ' + this.manyObj + '.'); + $('#enroll').click(function () { form.associate(); }); + $('#cancel').click(function () { + var state = {}; + state[form.oneObj + '-facet'] = 'associate'; + $.bbq.pushState(state); + }); $("#addToList").click(function(){ $('#availableList :selected').each(function(i, selected){ $("#enrollments").append(selected); @@ -161,97 +155,91 @@ function AssociationForm(oneObj, manyObj,facet,facets, searchColumn, headerText $("#find").click(function(){ form.search(); }); - } - this.search = function(){ - - var queryFilter = $("#associateFilter").val(); + }; + this.search = function() { var form = this; - ipa_cmd( 'find', [queryFilter], {}, - function(searchResults){ - form.populateSearch(searchResults); - }, - function(){ - alert("associationSearchFailure"); - }, - this.manyObj); - } - this.associate = function(){ - var manyObjPkeys = []; - $('#enrollments').children().each(function(i, selected){ + function search_on_win(data, text_status, xhr) { + var results = data.result; + $("#availableList").html(""); + for (var i =0; i != results.count; i++){ + var result = results.result[i]; + $("",{ + value: result[form.searchColumn][0], + html: result[form.searchColumn][0] + }).appendTo( $("#availableList")); + } + }; + + function search_on_fail(xhr, text_status, errow_thrown) { + alert("associationSearchFailure"); + }; + + var queryFilter = $('#associateFilter').val(); + ipa_cmd('find', [queryFilter], {}, search_on_win, null, this.manyObj); + }; + + this.associate = function () { + var manyObjPkeys = []; + $('#enrollments').children().each(function (i, selected) { manyObjPkeys.push(selected.value); }); - var pkey = qs['pkey']; + var pkey = $.bbq.getState(this.oneObj + '-pkey', true) || ''; var associator = - new this.associatorConstructor (this, pkey, manyObjPkeys); + new this.associatorConstructor(this, pkey, manyObjPkeys); associator.associateNext(); - } - this.populateSearch = function(searchResults){ - var results = searchResults.result; - $("#availableList").html(""); - for (var i =0; i != results.count; i++){ - var result = results.result[i]; - $("