387 lines
11 KiB
JavaScript
387 lines
11 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This Source Code Form is "Incompatible With Secondary Licenses", as
|
|
* defined by the Mozilla Public License, v. 2.0.
|
|
*/
|
|
|
|
function validateAttachmentForm(theform) {
|
|
var desc_value = YAHOO.lang.trim(theform.description.value);
|
|
if (desc_value == '') {
|
|
alert(BUGZILLA.string.attach_desc_required);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function updateCommentPrivacy(checkbox) {
|
|
var text_elem = document.getElementById('comment');
|
|
if (checkbox.checked) {
|
|
text_elem.className='bz_private';
|
|
} else {
|
|
text_elem.className='';
|
|
}
|
|
}
|
|
|
|
function setContentTypeDisabledState(form) {
|
|
var isdisabled = false;
|
|
if (form.ispatch.checked)
|
|
isdisabled = true;
|
|
|
|
for (var i = 0; i < form.contenttypemethod.length; i++)
|
|
form.contenttypemethod[i].disabled = isdisabled;
|
|
|
|
form.contenttypeselection.disabled = isdisabled;
|
|
form.contenttypeentry.disabled = isdisabled;
|
|
|
|
// if WEBKIT_CHANGES
|
|
if (isdisabled) {
|
|
document.getElementById('legal').style.display = "table-row";
|
|
var createButton = document.getElementById('create');
|
|
if (createButton && createButton.value == "Submit")
|
|
createButton.value = "Agree and Submit";
|
|
else {
|
|
var commitButton = document.getElementById('commit');
|
|
if (commitButton && commitButton.value == "Submit Bug")
|
|
commitButton.value = "Agree and Submit Bug";
|
|
}
|
|
} else {
|
|
var createButton = document.getElementById('create');
|
|
if (createButton && createButton.value == "Agree and Submit")
|
|
createButton.value = "Submit";
|
|
else {
|
|
var commitButton = document.getElementById('commit');
|
|
if (commitButton && commitButton.value == "Agree and Submit Bug")
|
|
commitButton.value = "Submit Bug";
|
|
}
|
|
document.getElementById('legal').style.display = "none";
|
|
}
|
|
// endif WEBKIT_CHANGES
|
|
}
|
|
|
|
function TextFieldHandler() {
|
|
var field_text = document.getElementById("attach_text");
|
|
var greyfields = new Array("data", "autodetect", "list", "manual",
|
|
"contenttypeselection", "contenttypeentry");
|
|
var i, thisfield;
|
|
if (field_text.value.match(/^\s*$/)) {
|
|
for (i = 0; i < greyfields.length; i++) {
|
|
thisfield = document.getElementById(greyfields[i]);
|
|
if (thisfield) {
|
|
thisfield.removeAttribute("disabled");
|
|
}
|
|
}
|
|
} else {
|
|
for (i = 0; i < greyfields.length; i++) {
|
|
thisfield = document.getElementById(greyfields[i]);
|
|
if (thisfield) {
|
|
thisfield.setAttribute("disabled", "disabled");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function DataFieldHandler() {
|
|
var field_data = document.getElementById("data");
|
|
var greyfields = new Array("attach_text");
|
|
var i, thisfield;
|
|
if (field_data.value.match(/^\s*$/)) {
|
|
for (i = 0; i < greyfields.length; i++) {
|
|
thisfield = document.getElementById(greyfields[i]);
|
|
if (thisfield) {
|
|
thisfield.removeAttribute("disabled");
|
|
}
|
|
}
|
|
} else {
|
|
for (i = 0; i < greyfields.length; i++) {
|
|
thisfield = document.getElementById(greyfields[i]);
|
|
if (thisfield) {
|
|
thisfield.setAttribute("disabled", "disabled");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function clearAttachmentFields() {
|
|
var element;
|
|
|
|
document.getElementById('data').value = '';
|
|
DataFieldHandler();
|
|
if ((element = document.getElementById('attach_text'))) {
|
|
element.value = '';
|
|
TextFieldHandler();
|
|
}
|
|
document.getElementById('description').value = '';
|
|
/* Fire onchange so that the disabled state of the content-type
|
|
* radio buttons are also reset
|
|
*/
|
|
element = document.getElementById('ispatch');
|
|
element.checked = '';
|
|
bz_fireEvent(element, 'change');
|
|
if ((element = document.getElementById('isprivate')))
|
|
element.checked = '';
|
|
}
|
|
|
|
/* Functions used when viewing patches in Diff mode. */
|
|
|
|
function collapse_all() {
|
|
var elem = document.checkboxform.firstChild;
|
|
while (elem != null) {
|
|
if (elem.firstChild != null) {
|
|
var tbody = elem.firstChild.nextSibling;
|
|
if (tbody.className == 'file') {
|
|
tbody.className = 'file_collapse';
|
|
twisty = get_twisty_from_tbody(tbody);
|
|
twisty.firstChild.nodeValue = '(+)';
|
|
twisty.nextSibling.checked = false;
|
|
}
|
|
}
|
|
elem = elem.nextSibling;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function expand_all() {
|
|
var elem = document.checkboxform.firstChild;
|
|
while (elem != null) {
|
|
if (elem.firstChild != null) {
|
|
var tbody = elem.firstChild.nextSibling;
|
|
if (tbody.className == 'file_collapse') {
|
|
tbody.className = 'file';
|
|
twisty = get_twisty_from_tbody(tbody);
|
|
twisty.firstChild.nodeValue = '(-)';
|
|
twisty.nextSibling.checked = true;
|
|
}
|
|
}
|
|
elem = elem.nextSibling;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
var current_restore_elem;
|
|
|
|
function restore_all() {
|
|
current_restore_elem = null;
|
|
incremental_restore();
|
|
}
|
|
|
|
function incremental_restore() {
|
|
if (!document.checkboxform.restore_indicator.checked) {
|
|
return;
|
|
}
|
|
var next_restore_elem;
|
|
if (current_restore_elem) {
|
|
next_restore_elem = current_restore_elem.nextSibling;
|
|
} else {
|
|
next_restore_elem = document.checkboxform.firstChild;
|
|
}
|
|
while (next_restore_elem != null) {
|
|
current_restore_elem = next_restore_elem;
|
|
if (current_restore_elem.firstChild != null) {
|
|
restore_elem(current_restore_elem.firstChild.nextSibling);
|
|
}
|
|
next_restore_elem = current_restore_elem.nextSibling;
|
|
}
|
|
}
|
|
|
|
function restore_elem(elem, alertme) {
|
|
if (elem.className == 'file_collapse') {
|
|
twisty = get_twisty_from_tbody(elem);
|
|
if (twisty.nextSibling.checked) {
|
|
elem.className = 'file';
|
|
twisty.firstChild.nodeValue = '(-)';
|
|
}
|
|
} else if (elem.className == 'file') {
|
|
twisty = get_twisty_from_tbody(elem);
|
|
if (!twisty.nextSibling.checked) {
|
|
elem.className = 'file_collapse';
|
|
twisty.firstChild.nodeValue = '(+)';
|
|
}
|
|
}
|
|
}
|
|
|
|
function twisty_click(twisty) {
|
|
tbody = get_tbody_from_twisty(twisty);
|
|
if (tbody.className == 'file') {
|
|
tbody.className = 'file_collapse';
|
|
twisty.firstChild.nodeValue = '(+)';
|
|
twisty.nextSibling.checked = false;
|
|
} else {
|
|
tbody.className = 'file';
|
|
twisty.firstChild.nodeValue = '(-)';
|
|
twisty.nextSibling.checked = true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function get_tbody_from_twisty(twisty) {
|
|
return twisty.parentNode.parentNode.parentNode.nextSibling;
|
|
}
|
|
function get_twisty_from_tbody(tbody) {
|
|
return tbody.previousSibling.firstChild.nextSibling.firstChild.firstChild;
|
|
}
|
|
|
|
var prev_mode = 'raw';
|
|
var current_mode = 'raw';
|
|
var has_edited = 0;
|
|
var has_viewed_as_diff = 0;
|
|
// if WEBKIT_CHANGES
|
|
var viewing_formatted_diff = false;
|
|
// endif WEBKIT_CHANGES
|
|
function editAsComment(patchviewerinstalled)
|
|
{
|
|
switchToMode('edit', patchviewerinstalled);
|
|
has_edited = 1;
|
|
}
|
|
function undoEditAsComment(patchviewerinstalled)
|
|
{
|
|
switchToMode(prev_mode, patchviewerinstalled);
|
|
}
|
|
function redoEditAsComment(patchviewerinstalled)
|
|
{
|
|
switchToMode('edit', patchviewerinstalled);
|
|
}
|
|
|
|
// if WEBKIT_CHANGES
|
|
function viewPrettyPatch(attachment_id)
|
|
{
|
|
viewing_formatted_diff = !viewing_formatted_diff;
|
|
var src = "attachment.cgi?id=" + attachment_id;
|
|
var buttonText = "View Formatted Diff";
|
|
if (viewing_formatted_diff) {
|
|
src += "&action=prettypatch"
|
|
buttonText = "View Plain Diff";
|
|
}
|
|
|
|
document.getElementById('viewFrame').src = src;
|
|
document.getElementById('viewPrettyPatchButton').innerHTML = buttonText;
|
|
}
|
|
// endif WEBKIT_CHANGES
|
|
|
|
function viewDiff(attachment_id, patchviewerinstalled)
|
|
{
|
|
switchToMode('diff', patchviewerinstalled);
|
|
|
|
// If we have not viewed as diff before, set the view diff frame URL
|
|
if (!has_viewed_as_diff) {
|
|
var viewDiffFrame = document.getElementById('viewDiffFrame');
|
|
viewDiffFrame.src =
|
|
'attachment.cgi?id=' + attachment_id + '&action=diff&headers=0';
|
|
has_viewed_as_diff = 1;
|
|
}
|
|
}
|
|
|
|
function viewRaw(patchviewerinstalled)
|
|
{
|
|
switchToMode('raw', patchviewerinstalled);
|
|
}
|
|
|
|
function switchToMode(mode, patchviewerinstalled)
|
|
{
|
|
// Switch out of current mode
|
|
if (current_mode == 'edit') {
|
|
hideElementById('editFrame');
|
|
hideElementById('undoEditButton');
|
|
} else if (current_mode == 'raw') {
|
|
hideElementById('viewFrame');
|
|
// if WEBKIT_CHANGES
|
|
hideElementById('viewPrettyPatchButton');
|
|
// endif WEBKIT_CHANGES
|
|
if (patchviewerinstalled)
|
|
hideElementById('viewDiffButton');
|
|
hideElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
hideElementById('smallCommentFrame');
|
|
} else if (current_mode == 'diff') {
|
|
if (patchviewerinstalled)
|
|
hideElementById('viewDiffFrame');
|
|
hideElementById('viewRawButton');
|
|
hideElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
hideElementById('smallCommentFrame');
|
|
}
|
|
|
|
// Switch into new mode
|
|
if (mode == 'edit') {
|
|
showElementById('editFrame');
|
|
showElementById('undoEditButton');
|
|
} else if (mode == 'raw') {
|
|
showElementById('viewFrame');
|
|
// if WEBKIT_CHANGES
|
|
showElementById('viewPrettyPatchButton');
|
|
// endif WEBKIT_CHANGES
|
|
if (patchviewerinstalled)
|
|
showElementById('viewDiffButton');
|
|
|
|
showElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
showElementById('smallCommentFrame');
|
|
} else if (mode == 'diff') {
|
|
if (patchviewerinstalled)
|
|
showElementById('viewDiffFrame');
|
|
|
|
showElementById('viewRawButton');
|
|
showElementById(has_edited ? 'redoEditButton' : 'editButton');
|
|
showElementById('smallCommentFrame');
|
|
}
|
|
|
|
prev_mode = current_mode;
|
|
current_mode = mode;
|
|
}
|
|
|
|
function hideElementById(id)
|
|
{
|
|
var elm = document.getElementById(id);
|
|
if (elm) {
|
|
YAHOO.util.Dom.addClass(elm, 'bz_default_hidden');
|
|
}
|
|
}
|
|
|
|
function showElementById(id)
|
|
{
|
|
var elm = document.getElementById(id);
|
|
if (elm) {
|
|
YAHOO.util.Dom.removeClass(elm, 'bz_default_hidden');
|
|
}
|
|
}
|
|
|
|
function normalizeComments()
|
|
{
|
|
// Remove the unused comment field from the document so its contents
|
|
// do not get transmitted back to the server.
|
|
|
|
var small = document.getElementById('smallCommentFrame');
|
|
var big = document.getElementById('editFrame');
|
|
if ( (small) && YAHOO.util.Dom.hasClass(small, 'bz_default_hidden') )
|
|
{
|
|
small.parentNode.removeChild(small);
|
|
}
|
|
if ( (big) && YAHOO.util.Dom.hasClass(big, 'bz_default_hidden') )
|
|
{
|
|
big.parentNode.removeChild(big);
|
|
}
|
|
}
|
|
|
|
function toggle_attachment_details_visibility ( )
|
|
{
|
|
// show hide classes
|
|
var container = document.getElementById('attachment_info');
|
|
if( YAHOO.util.Dom.hasClass(container, 'read') ){
|
|
YAHOO.util.Dom.replaceClass(container, 'read', 'edit');
|
|
}else{
|
|
YAHOO.util.Dom.replaceClass(container, 'edit', 'read');
|
|
}
|
|
}
|
|
|
|
/* Used in bug/create.html.tmpl to show/hide the attachment field. */
|
|
|
|
function handleWantsAttachment(wants_attachment) {
|
|
if (wants_attachment) {
|
|
hideElementById('attachment_false');
|
|
showElementById('attachment_true');
|
|
}
|
|
else {
|
|
showElementById('attachment_false');
|
|
hideElementById('attachment_true');
|
|
clearAttachmentFields();
|
|
}
|
|
}
|