Bug 131574 - Add AJAX function with callback and some code refactoring

git-svn-id: svn://svn.office.custis.ru/3rdparty/bugzilla.org/trunk@1822 6955db30-a419-402b-8a0d-67ecbb4d7f56
master
akrasilnikov 2013-09-30 12:13:22 +00:00
parent 323693b4dd
commit 3baff646a1
3 changed files with 73 additions and 106 deletions

View File

@ -365,36 +365,22 @@ addListener(window, 'load', function() {
function showEditComment(comment_id) {
var el_container = document.getElementById("bz_textarea_"+comment_id);
var x;
if (window.XMLHttpRequest)
x = new XMLHttpRequest();
else
{
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
}
x.onreadystatechange = function()
{
if (x.readyState == 4)
var u = window.location.href.replace(/[^\/]+$/, '');
u += 'xml.cgi?method=Bug.comments&output=json&comment_ids=' + comment_id;
AjaxLoader(u, function(x) {
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
if (r.comments)
{
if (r.comments)
for(var key in r.comments)
{
for(var key in r.comments)
{
var comment = r.comments[key];
el_container.innerHTML = '<textarea class="bz_textarea" name="edit_comment[' + comment_id + ']"> ' + comment.text + '</textarea>';
}
var comment = r.comments[key];
el_container.innerHTML = '<textarea class="bz_textarea" name="edit_comment[' + comment_id + ']"> ' + comment.text + '</textarea>';
}
}
}
};
var u = window.location.href.replace(/[^\/]+$/, '');
u += 'xml.cgi?method=Bug.comments&output=json&comment_ids=' + comment_id;
x.open('GET', u);
x.send(null);
});
}

View File

@ -142,39 +142,27 @@ function userAutocomplete(hint, emptyOptions)
hint.replaceItems(null);
return;
}
var x;
if (window.XMLHttpRequest)
x = new XMLHttpRequest();
else
{
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
}
x.onreadystatechange = function()
{
if (x.readyState == 4)
{
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertUserList(r.users);
// FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
if (data.length == 0 && hint.input.value.length < 3)
hint.emptyText = 'Type at least 3 letters';
else
hint.emptyText = 'No users found';
hint.replaceItems(data);
}
}
};
var u = window.location.href.replace(/[^\/]+$/, '');
u += 'xml.cgi?method=User.get&output=json&maxusermatches=20&excludedisabled=1';
var l = hint.input.value.split(/[\s,]*,[\s,]*/);
for (var i = 0; i < l.length; i++)
u += '&match='+encodeURI(l[i]);
x.open('GET', u);
x.send(null);
AjaxLoader(u, function(x) {
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertUserList(r.users);
// FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
if (data.length == 0 && hint.input.value.length < 3)
hint.emptyText = 'Type at least 3 letters';
else
hint.emptyText = 'No users found';
hint.replaceItems(data);
}
});
}
@ -203,71 +191,43 @@ function keywordAutocomplete(hint, emptyOptions)
hint.replaceItems(null);
return;
}
var x;
if (window.XMLHttpRequest)
x = new XMLHttpRequest();
else
{
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
}
x.onreadystatechange = function()
{
if (x.readyState == 4)
{
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertSimpleList(r.keywords);
// FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
if (data.length == 0 && hint.input.value.length < 3)
hint.emptyText = 'Type at least 3 letters';
else
hint.emptyText = 'No keywords found';
hint.replaceItems(data);
}
}
};
var u = window.location.href.replace(/[^\/]+$/, '');
u += 'xml.cgi?method=Keyword.get&output=json&maxkeywordmatches=20';
var l = hint.input.value.split(/[\s,]*,[\s,]*/);
for (var i = 0; i < l.length; i++)
u += '&match='+encodeURI(l[i]);
x.open('GET', u);
x.send(null);
AjaxLoader(u, function(x) {
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertSimpleList(r.keywords);
// FIXME "3" constant, messages: remove hardcode, also in Bugzilla::User::match()
if (data.length == 0 && hint.input.value.length < 3)
hint.emptyText = 'Type at least 3 letters';
else
hint.emptyText = 'No keywords found';
hint.replaceItems(data);
}
});
}
// Data loader for field in buglist autocomplete
function fieldBuglistAutocomplete(hint, field, emptyOptions)
{
var x;
if (window.XMLHttpRequest)
x = new XMLHttpRequest();
else
{
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
}
x.onreadystatechange = function()
{
if (x.readyState == 4)
{
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertSimpleList(r.values);
hint.replaceItems(data);
}
}
};
var u = window.location.href.replace(/[^\/]+$/, '');
u += 'xml.cgi?method=Field.get_values&output=json&field=' + field;
x.open('GET', u);
x.send(null);
AjaxLoader(u, function(x) {
var r = {};
try { eval('r = '+x.responseText+';'); } catch (e) { return; }
if (r.status == 'ok')
{
var data = convertSimpleList(r.values);
hint.replaceItems(data);
}
});
}
function showFullComment(el_link, oper_id)

View File

@ -433,3 +433,24 @@ if (!String.prototype.trim)
return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
};
}
function AjaxLoader(url, callback)
{
var x;
if (window.XMLHttpRequest)
x = new XMLHttpRequest();
else
{
try { x = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (e) { x = new ActiveXObject("Microsoft.XMLHTTP"); }
}
x.onreadystatechange = function()
{
if (x.readyState == 4)
{
callback(x);
}
};
x.open('GET', url, true);
x.send(null);
}