diff options
author | Pavel Zuna <pzuna@redhat.com> | 2010-10-01 12:40:30 -0400 |
---|---|---|
committer | Adam Young <ayoung@redhat.com> | 2010-10-01 10:00:10 -0400 |
commit | c106922c137d15f26d4085382e3d2418250949cb (patch) | |
tree | 95ec6b8fe233ec4d8e001ea08be012508e050b66 /install/static | |
parent | 838c1f2c943a4dd315b4da17a0951a6d53d31ad3 (diff) | |
download | freeipa-c106922c137d15f26d4085382e3d2418250949cb.tar.gz freeipa-c106922c137d15f26d4085382e3d2418250949cb.tar.xz freeipa-c106922c137d15f26d4085382e3d2418250949cb.zip |
Add Delete capabilities to Search facet in the WebUI.
Ticket #206
Diffstat (limited to 'install/static')
-rw-r--r-- | install/static/search.js | 103 |
1 files changed, 101 insertions, 2 deletions
diff --git a/install/static/search.js b/install/static/search.js index 59caf71f0..e97632b70 100644 --- a/install/static/search.js +++ b/install/static/search.js @@ -34,6 +34,52 @@ function search_create(obj_name, scl, container) $.bbq.pushState(state); }; + function delete_on_click() { + var delete_list = []; + var delete_dialog = $('<div></div>', { + title: ipa_messages.button.delete, + 'class': 'search-dialog-delete', + }); + + function delete_on_click() { + ipa_cmd('del', delete_list, {}, delete_on_win, null, obj_name); + delete_dialog.dialog('close'); + }; + + function delete_on_win() { + for (var i = 0; i < delete_list.length; ++i) { + var chk = container.find( + '.search-selector[title=' + delete_list[i] + ']' + ); + if (chk) + chk.closest('tr').remove(); + } + }; + + function cancel_on_click() { + delete_dialog.dialog('close'); + }; + + container.find('.search-selector').each(function () { + var jobj = $(this); + if (jobj.attr('checked')) + delete_list.push(jobj.attr('title')); + }); + + if (delete_list.length == 0) + return; + + delete_dialog.text(ipa_messages.search.delete_confirm); + + delete_dialog.dialog({ + modal: true, + buttons: { + 'Delete': delete_on_click, + 'Cancel': cancel_on_click, + }, + }); + }; + if (!container) { alert('ERROR: search_create: Second argument "container" missing!'); return; @@ -50,6 +96,8 @@ function search_create(obj_name, scl, container) jobj.children().last().attr('name', 'search-' + obj_name + '-filter') jobj.append('<input type="submit" value="'+ipa_messages.button.find+ '" />'); jobj.children().last().click(find_on_click); + jobj.append('<input type="submit" value="'+ipa_messages.button.delete+ '" />'); + jobj.children().last().click(delete_on_click); div.append('<span class="search-buttons"></span>'); var search_results = $('<div/>', { @@ -65,12 +113,45 @@ function search_create(obj_name, scl, container) search_table.append('<tfoot></tfoot>'); var tr = search_table.find('tr'); + search_insert_checkbox_th(tr); for (var i = 0; i < scl.length; ++i) { var c = scl[i]; search_insert_th(tr, obj_name, c[0], c[1], c[2]); } } +function search_insert_checkbox_th(jobj) +{ + function select_all_on_click() { + var jobj = $(this); + + var checked = null; + if (jobj.attr('checked')) { + checked = true; + jobj.attr('title', 'Unselect All'); + } else { + checked = false; + jobj.attr('title', 'Select All'); + } + jobj.attr('checked', checked); + + var chks = jobj.closest('.search-container').find('.search-selector'); + for (var i = 0; i < chks.length; ++i) + chks[i].checked = checked; + }; + + var checkbox = $('<input />', { + type: 'checkbox', + title: 'Select All', + }); + checkbox.click(select_all_on_click); + + var th = $('<th></th>'); + th.append(checkbox); + + jobj.append(th); +} + var _search_th_template = '<th abbr="A" title="C">N</th>'; function search_insert_th(jobj, obj_name, attr, name, render_call) @@ -119,11 +200,16 @@ function search_load(jobj, criteria, on_win, on_fail) function search_generate_tr(thead, tbody, entry_attrs) { + var obj_name = tbody.closest('.search-container').attr('title'); + var pkey = ipa_objs[obj_name].primary_key; + var pkey_value = entry_attrs[pkey]; + tbody.append('<tr></tr>'); var tr = tbody.children().last(); + search_generate_checkbox_td(tr, pkey_value); var ths = thead.find('th'); - for (var i = 0; i < ths.length; ++i) { + for (var i = 1; i < ths.length; ++i) { var jobj = $(ths[i]); var attr = jobj.attr('abbr'); var value = entry_attrs[attr]; @@ -137,7 +223,6 @@ function search_generate_tr(thead, tbody, entry_attrs) tbody.find('.search-a-pkey').click(function () { var jobj = $(this); - var obj_name = tbody.closest('.search-container').attr('title'); var state = {}; state[obj_name + '-facet'] = 'details'; @@ -148,6 +233,20 @@ function search_generate_tr(thead, tbody, entry_attrs) }); } +function search_generate_checkbox_td(tr, pkey) +{ + var checkbox = $('<input />', { + name: pkey, + title: pkey, + type: 'checkbox', + 'class': 'search-selector', + }); + var td = $('<td></td>'); + + td.append(checkbox); + tr.append(td); +} + var _search_td_template = '<td title="A">V</td>'; var _search_a_pkey_template = '<a href="jslink" class="search-a-pkey">V</a>'; |