summaryrefslogtreecommitdiff
path: root/plugins/enigma/enigma.js
diff options
context:
space:
mode:
authoralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2010-08-30 18:18:21 +0000
committeralec <alec@208e9e7b-5314-0410-a742-e7e81cd9613c>2010-08-30 18:18:21 +0000
commit1767322c2a35dad565e1f25b7466d7a5874ef1a6 (patch)
treee199f385a2597fb3fd329e11f6c4e409157216d1 /plugins/enigma/enigma.js
parent259c6dc0df4b753c93c56a4ad6f3ef705cdbf59d (diff)
- Keys list paging and searching
git-svn-id: https://svn.roundcube.net/trunk@3928 208e9e7b-5314-0410-a742-e7e81cd9613c
Diffstat (limited to 'plugins/enigma/enigma.js')
-rw-r--r--plugins/enigma/enigma.js99
1 files changed, 86 insertions, 13 deletions
diff --git a/plugins/enigma/enigma.js b/plugins/enigma/enigma.js
index 609e78114..2cd2d62e3 100644
--- a/plugins/enigma/enigma.js
+++ b/plugins/enigma/enigma.js
@@ -17,12 +17,18 @@ if (window.rcmail)
rcmail.keys_list.addEventListener('select', function(o){ p.enigma_key_select(o); });
rcmail.keys_list.init();
rcmail.keys_list.focus();
+
+ rcmail.enigma_list();
+
+ rcmail.register_command('firstpage', function(props) {return rcmail.enigma_list_page('first'); });
+ rcmail.register_command('previouspage', function(props) {return rcmail.enigma_list_page('previous'); });
+ rcmail.register_command('nextpage', function(props) {return rcmail.enigma_list_page('next'); });
+ rcmail.register_command('lastpage', function(props) {return rcmail.enigma_list_page('last'); });
}
if (rcmail.env.action == 'edit-prefs') {
- rcmail.enable_command('search', 'reset-search', true);
- rcmail.addEventListener('beforesearch', 'enigma_search', rcmail);
- rcmail.addEventListener('beforereset-search', 'enigma_search_reset', rcmail);
+ rcmail.register_command('search', function(props) {return rcmail.enigma_search(props); }, true);
+ rcmail.register_command('reset-search', function(props) {return rcmail.enigma_search_reset(props); }, true);
}
else if (rcmail.env.action == 'plugin.enigma') {
rcmail.register_command('plugin.enigma-import', function() { rcmail.enigma_import() }, true);
@@ -33,7 +39,7 @@ if (window.rcmail)
}
/*********************************************************/
-/********* Enigma Settings methods *********/
+/********* Enigma Settings/Keys/Certs UI *********/
/*********************************************************/
// Display key(s) import form
@@ -83,28 +89,28 @@ rcube_webmail.prototype.enigma_loadframe = function(id, url)
}
};
+// Search keys/certs
rcube_webmail.prototype.enigma_search = function(props)
{
if (!props && this.gui_objects.qsearchbox)
props = this.gui_objects.qsearchbox.value;
- if (props) {
+ if (props || this.env.search_request) {
+ var params = {'_a': 'keysearch', '_q': urlencode(props)};
// if (this.gui_objects.search_filter)
// addurl += '&_filter=' + this.gui_objects.search_filter.value;
this.env.current_page = 1;
this.set_busy(true, 'searching');
- this.enigma_loadframe();
- // reload page (for keys list refresh)
- this.http_post('plugin.enigma',
- {'_a': 'keysearch', '_q': urlencode(props)},
- true);
+ this.enigma_loadframe();
+ this.enigma_clear_list();
+ this.http_post('plugin.enigma', params, true);
}
- // skip default 'search' command action
return false;
}
+// Reset search filter and the list
rcube_webmail.prototype.enigma_search_reset = function(props)
{
var s = this.env.search_request;
@@ -112,13 +118,79 @@ rcube_webmail.prototype.enigma_search_reset = function(props)
if (s) {
this.enigma_loadframe();
- // reload page (for keys list refresh)
+ this.enigma_clear_list();
+
+ // refresh the list
+ this.enigma_list();
}
- // skip default 'reset-search' command action
return false;
}
+// Keys/certs listing
+rcube_webmail.prototype.enigma_list = function(page)
+{
+ var params = {'_a': 'keylist'};
+
+ this.env.current_page = page ? page : 1;
+ this.set_busy(true, 'loading');
+
+ if (this.env.search_request)
+ params._q = this.env.search_request;
+ if (page)
+ params._p = page;
+
+ this.enigma_clear_list();
+ this.http_post('plugin.enigma', params, true);
+}
+
+// Change list page
+rcube_webmail.prototype.enigma_list_page = function(page)
+{
+ if (page == 'next')
+ page = this.env.current_page + 1;
+ else if (page == 'last')
+ page = this.env.pagecount;
+ else if (page == 'prev' && this.env.current_page > 1)
+ page = this.env.current_page - 1;
+ else if (page == 'first' && this.env.current_page > 1)
+ page = 1;
+
+ this.enigma_list(page);
+}
+
+// Remove list rows
+rcube_webmail.prototype.enigma_clear_list = function()
+{
+ this.enigma_loadframe();
+ if (this.keys_list)
+ this.keys_list.clear(true);
+}
+
+// Adds a row to the list
+rcube_webmail.prototype.enigma_add_list_row = function(r)
+{
+ if (!this.gui_objects.keyslist || !this.keys_list)
+ return false;
+
+ var list = this.keys_list,
+ tbody = this.gui_objects.keyslist.tBodies[0],
+ rowcount = tbody.rows.length,
+ even = rowcount%2,
+ css_class = 'message'
+ + (even ? ' even' : ' odd'),
+ // for performance use DOM instead of jQuery here
+ row = document.createElement('tr'),
+ col = document.createElement('td');
+
+ row.id = 'rcmrow' + r.id;
+ row.className = css_class;
+
+ col.innerHTML = r.name;
+ row.appendChild(col);
+ list.insert_row(row);
+}
+
/*********************************************************/
/********* Enigma Message methods *********/
/*********************************************************/
@@ -132,3 +204,4 @@ rcube_webmail.prototype.enigma_import_attachment = function(mime_id)
return false;
};
+