Closed Bug 253905 Opened 20 years ago Closed 20 years ago

the function goToLine in viewSource.js (Page Source) can not go to the last line

Categories

(Core Graveyard :: View Source, defect)

x86
Windows 2000
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: mgueury, Assigned: rbs)

References

()

Details

(Keywords: regression)

Attachments

(1 file, 1 obsolete file)

583 bytes, patch
bzbarsky
: review+
bzbarsky
: superreview+
Details | Diff | Splinter Review
User-Agent:       Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.1) Gecko/20040725
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.1) Gecko/20040725

The function goToLine of the viewSource.js can not go to the last
line.

I was trying to use this function for writting a new browser extension.
But I am not able to jump to the last line of a file:

The reason is because of this code:

         if (curLine == line && !("range" in result)) {
 -  489           result.range = document.createRange();
 -  490           result.range.setStart(textNode, curPos);
    491 
    492           //
    493           // This will always be overridden later, except when we look for
    494           // the very last line in the file (this is the only line that does
    495           // not end with \n).
    496           //
 -  497           result.range.setEndAfter(pre.lastChild);
    498 
 -  499         } else if (curLine == line + 1) {
 -  500           result.range.setEnd(textNode, curPos - 1);
 -  501           found = true;
 -  502           break;
    503         }

Line 499, there is a condition with curLine=line+1
Unhappily if you try to go to the last line, there is no line +1 and it does
not work.



Reproducible: Always
Steps to Reproduce:
1. call the function goToLine( 16 ) when viewing www.google.com
  ( 16 ) is the last line

Actual Results:  
Nothing - the line is not found

Expected Results:  
Jump to the line 16
To correct the problem, one possibility is to check at the end
of the search that the searched line is the last line.

I tried to correct the viewSource.js (the one of 171 that I have).
I will attach the file.

By doing the following
1) added a variable lastNode 
2) test at the end if 
   - it is a search
   - with curLine = serched line
   - and that is not found 
   - and where the lastNode exist
   then set then end of the range

[...]
  var found = false;
  var lastNode = null;
  for (var textNode = treewalker.firstChild();
       textNode && !found;
[...]
    }    
    lastNode = textNode;
  }

  // The searched line is the last line
  if( pre && curLine == line && !found && lastNode ) {
    // Set the range end.
    result.range.setEnd(lastNode, lastNode.data.length);
    found = true;
  }
    
  return found;
}
[...]

Tested with that change. And it works. I have no access to CVS of Mozilla :-)
Can you double-check this ?

Thanks
Attached file Potential fix (obsolete) —
Can you please make a patch against this file here
http://lxr.mozilla.org/seamonkey/source/xpfe/browser/resources/content/viewsource.js?raw=1
(this is from trunk) and attach it? I tried to create a patch, but wasn't sure
what changes were from you and what changes were from 1.7.1->trunk. You can get
diff from http://gnuwin32.sourceforge.net/packages/diffutils.htm if you don't
have it.
-> regression

The code was heavily tested, and it used to work. In fact, it still works in my
copy of Netscape 7.1, but not in the latest Mozilla build. Maybe something has
changed somewhere in the back-end. Anyway, making the front-end more robust is
welcomed.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: regression
Attachment #154913 - Attachment mime type: application/octet-stream → text/plain
Here is the output from diff:

432d431
<   var lastNode = null;
506,507c505
<     }
<     lastNode = textNode;
---
>     }
510,516d507
<   // The searched line is the last line
<   if( pre && curLine == line && !found && lastNode ) {
<     // Set the range end.
<     result.range.setEnd(lastNode, lastNode.data.length);
<     found = true;
<   }
<
Can you create a version with diff -u please? It seems patch doesn't quite like
the normal diff version (without the -u).
Here it is.

--- viewsource.js2      2004-08-07 20:49:46.981737600 +0200
+++ viewsource.js1      2004-08-07 20:49:18.560870400 +0200
@@ -429,6 +429,7 @@
   var firstCol = 1;

   var found = false;
+  var lastNode = null;
   for (var textNode = treewalker.firstChild();
        textNode && !found;
        textNode = treewalker.nextNode()) {
@@ -502,9 +503,17 @@
           break;
         }
       }
-    }
+    }
+    lastNode = textNode;
   }

+  // The searched line is the last line
+  if( pre && curLine == line && !found && lastNode ) {
+    // Set the range end.
+    result.range.setEnd(lastNode, lastNode.data.length);
+    found = true;
+  }
+
   return found;
 }
Attached patch real fixSplinter Review
This is the real fix. It was a regression from when we started displaying the
line:col on the status bar. The code (in m1.4 / Nav7.1) used to check the
range. Since then, the |found| variable was introduced, and it missed precisely
the case of the last line. 

------- the other patch duplicates that -----
+  // The searched line is the last line
+  if( pre && curLine == line && !found && lastNode ) {

->   |pre| always true.
->   |curLine == line && !found && lastNode|, that's equivalent to last line
test in the loop...

+  }
+
Assignee: doronr → rbs
Attachment #154913 - Attachment is obsolete: true
Status: NEW → ASSIGNED
Comment on attachment 155754 [details] [diff] [review]
real fix

Will also request approval-aviary & approval1.7.3.
Attachment #155754 - Flags: superreview?(bzbarsky)
Attachment #155754 - Flags: review?(bzbarsky)
Comment on attachment 155754 [details] [diff] [review]
real fix

Yeah, makes sense.  r+sr=bzbarsky.
Attachment #155754 - Flags: superreview?(bzbarsky)
Attachment #155754 - Flags: superreview+
Attachment #155754 - Flags: review?(bzbarsky)
Attachment #155754 - Flags: review+
Comment on attachment 155754 [details] [diff] [review]
real fix

[Bad timing, the tree has just closed for 1.8a3...]

drivers, this is a regression from m1.4/Nav7.1. Goto Line (Ctrl+L) in
view-source cannot go to the last line due to an incomplete test condition. The
fix is a one-liner that brings the code in parity to what is in m1.4/Nav7.1.
Attachment #155754 - Flags: approval1.8a3?
Attachment #155754 - Flags: approval1.7.3?
Attachment #155754 - Flags: approval-aviary?
Comment on attachment 155754 [details] [diff] [review]
real fix

a=mkaply for all
Attachment #155754 - Flags: approval1.8a3?
Attachment #155754 - Flags: approval1.8a3+
Attachment #155754 - Flags: approval1.7.3?
Attachment #155754 - Flags: approval1.7.3+
Attachment #155754 - Flags: approval-aviary?
Attachment #155754 - Flags: approval-aviary+
Fixed on the aviary1.0 branch and the 1.7.3 branch.

However, I am having troubles fixing the bug on the trunk. I get the message:
cvs [diff aborted]: connect to cvs.mozilla.org:2401 failed: Connection timed out

Somebody knows what is going on? I cannot access anything, including the
aviary1.0 branch and the 1.7.3 branch. I checked in there a couple of days ago
immediately after I got the approval.
> Somebody knows what is going on?

pserver access finally got turned off yesterday.  That may be causing trouble
for you...  Google groups doesn't seem to have the message yet; it said:

  The pserver protocol has been disabled for cvs.mozilla.org; access is now via
  ssh only.

  If you need assistance establishing adding ssh to your cvs account, or if you
  need assistance getting checkins landed, please contact or
  cvs-admin@mozilla.org

  Information is up (and will be updated as time goes on) at:
  http://www.mozilla.org/cvs-ssh-faq.html
Being quite novice, is aviary and Firefox, the same thing ?
I just wished to say that I checkout Firefox yesterday from CVS.
And the problem is in Firefox too.

Forget this message, if it is stupid.
> Being quite novice, is aviary and Firefox, the same thing ?

aviary is a branch of the Firefox trunk -- it is what is going to become Firefox
1.0. [similar as m1.7 is a branch of the seamonkey trunk and m1.7 gave Netscape7.2].

I haven't yet checked in the fix on the trunk [Firefox & Seamonkey]. So if you
checkout from the CVS trunk, you will still see the problem. I am not yet able
to checkin the fix. I am having all sort of problems with the newish CVS over
ssh because I use samba, and the CVS admins haven't yet resolved those problems.
Finally fixed on the trunk.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Resolution: --- → FIXED
Can you fix it too for Firefox ? Aviary ? How does it work to get it 
fixed there ? 

I was looking the source of viewsource.js in Firefox 1.0 PR
today. There is another bug in Firefox 1.0 PR only. I will log it.

Thanks by advance.

Ps: this is for this: http://users.skynet.be/mgueury/mozilla/
Sorry forget my update. It is working in Firefox 1.0 PR.
But there is another problem. bug 259363. But this is fixed. 
Product: Browser → Seamonkey
Product: SeaMonkey → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: