Closed Bug 133735 Opened 23 years ago Closed 23 years ago

Copying from a list <li> always copies the position in the list

Categories

(SeaMonkey :: General, defect)

x86
Windows 98
defect
Not set
minor

Tracking

(Not tracked)

VERIFIED FIXED
mozilla1.0

People

(Reporter: valerio, Assigned: mozeditor)

References

()

Details

(Whiteboard: EDITORBASE+; fixinhand; need a=[adt2])

Attachments

(1 file, 1 obsolete file)

From Bugzilla Helper: User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.9+) Gecko/20020325 BuildID: 2002032503 Probably related to Bug 133728 but not a duplicate. When you copy a part of an item in a list, its position in the list is copied in the clipboard as well. It applies to Ordered Lists (including with parameters) and Unordered lists. Example: <OL> <LI> Item 1 <LI> Item 2 <LI> Item 3 </OL> <UL> <LI> Item 1 <LI> Item 2 <LI> Item 3 </UL> <OL TYPE=a START=3> <LI> Item 1 <LI> Item 2 <LI> Item 3 </OL> Let's say you try to copy only "tem 2" from the second element in every list. You should get tem 2 in all cases instead: In the first list you'll get: 2. tem 2 In the second list you'll get: # tem 2 Note that if you select the whole line you get: * Item 3 ( * instead of # ) In the third list you'll get: 4. tem 2 This is interesting because you don't get the letter (d), nor its position (2), but the number related to letter d. You can make further tests at this URL: http://www.elfqrin.com/Sample.html#Lists Reproducible: Always Steps to Reproduce: 1. Go to any webpage with a list, or create your own 2. Select a part of an item in a list (not from the beginning of the line, or however excluding the list marker) 3. Copy it in a text editor or somewhere else Actual Results: The position of the element in the list is pasted at the beginning of the pasted text even if you didn't select/copy it. Expected Results: should paste only the selected/copied text. This is could be a feature, not a bug, yet it should apply only when you select/copy the whole element in a list, not just a part of it.
Confirmed on v.9.9+ build 2002032708 win98
Joe, they shouldn't be getting any list info in the sample case (when only part of the list item is selected), should they? I thought that only the text was copied in that case. Tanu has done some work recently regarding conversion of ordered lists to plaintext; cc'ing, but I think there are two issues here: whether the <li> and <ol> or <ul> should be getting copied to the context (Joe), and the issue about ol order (Tanu).
Akkana is correct that this behavior is a bug. It is likely a document encoder bug. I am the mamajama (doh!).
Assignee: asa → jfrancis
Target Milestone: --- → mozilla1.0.1
*** Bug 134046 has been marked as a duplicate of this bug. ***
Ya, document encoder has been altered in a bad way. Someone added "li" to IncludeInContext(). This is very bad, and casues this bug. Tanu, did you do this? I don't remember approving any such change to doc encoder, but maybe I missed it in a review? This will need to be undone, so I'm wondering what previous bugfix is dependent on it.
Whiteboard: fixinhand
cvsblame shows it was badami@netscape.com, sr'd by jst. That patch has to be backed out. patch to do that is here.
Nominating for EDITORBASE and nsbeta1 since this is a) fixinhand b) a backout of a recent patch, so there is no regression risk (other than bug original patch was for: 62188, which is not nearly as serious as this bug).
Status: UNCONFIRMED → ASSIGNED
Ever confirmed: true
Keywords: nsbeta1
Whiteboard: fixinhand → EDITORBASE; fixinhand; need r=,sr=,a=
Keywords: nsbeta1nsbeta1+
Whiteboard: EDITORBASE; fixinhand; need r=,sr=,a= → EDITORBASE+; fixinhand; need r=,sr=,a=[adt2]
Target Milestone: mozilla1.0.1 → mozilla1.0
It was from Tanu's bug 62188, and I reviewed an earlier version of the patch for that bug which also had this problem. Whoops, sorry! I'm hoping that if we back out just this part, that the rest of the fix for bug 62188 will continue to work in the case where multiple list items are chosen (i.e. if you select part of a list item, the list item and list don't go into the copy context, but if you select a complete list item, they do). Yes? No? We should probably go ahead and back it out, but let's make sure we know whether we're regressing bug 62188 or not.
Well, It just looks like a typo -- nsHTMLAtoms::ul probably was meant to be used instead of nsHTMLAtoms::li Making that change (below) fixes this bug and does not regress bug 62188. Index: base/src/nsDocumentEncoder.cpp =================================================================== RCS file: /cvsroot/mozilla/content/base/src/nsDocumentEncoder.cpp,v retrieving revision 1.66 diff -u -1 -r1.66 nsDocumentEncoder.cpp --- base/src/nsDocumentEncoder.cpp 23 Mar 2002 23:54:44 -0000 1.66 +++ base/src/nsDocumentEncoder.cpp 29 Mar 2002 00:47:09 -0000 @@ -1307,3 +1307,3 @@ tag.get() == nsHTMLAtoms::ol || - tag.get() == nsHTMLAtoms::li) { + tag.get() == nsHTMLAtoms::ul) { return PR_TRUE;
Attached patch Patch to fix this... (obsolete) — Splinter Review
The bug is a regression caused my patch for bug#62188. This patch is to fix it in the same way as discussed above. It carries few more changes to resolve the inconsistency in indentation of elements in OL and UL. More specifically, earlier if I copied "b" from <OL>abc</OL>, on pasting it to some Text Editor, I was getting(with indentation) b but for <UL>abc</UL> I was getting(without indentation) b With the patch both are pasted as: b Instead of opening a new bug, here I'm including a fix for that too.
Neither ol or ul (or li) can remain in IncludeInContext(). That will force even one letter selections in the middle of a list item to emit a list into the clipboard data. And now that will be a list without a list item, with text directly in the list: not even legal html. Any patch that goes in for this has to have no list elements in InludeInContext(). If that regresses 62188, that's ok - this bug is worse. You get the indention of "b" in Tanu's example above because of the text directly in a list (with no list item) - that's how browsers have historically rendered that illagal html, but it doen't mean we should generate it. I need r's and sr's for the original patch I attached here. kin, can u sr this?
*** Bug 134257 has been marked as a duplicate of this bug. ***
*** Bug 134475 has been marked as a duplicate of this bug. ***
>Neither ol or ul (or li) can remain in IncludeInContext(). Without these tags, my fix for 62188 has no meaning. >That will force even one letter selections in the middle of a list item to emit >a list into the clipboard data. And now that will be a list without a list >item, with text directly in the list: not even legal html. This is true. So we need to decide if we want to avoid generating an illegal html as mentioned above or loose a feature that 62188 adds.
>So we need to decide if we want to avoid generating an illegal >html as mentioned above or loose a feature that 62188 adds. Tanu, that decision is easy. Mozilla is all about standards compliance. We need to output valid HTML, much as I would hate to see 62188 backed out. >>Neither ol or ul (or li) can remain in IncludeInContext(). >Without these tags, my fix for 62188 has no meaning. jfrancis, I didn't investigate further when I posted comment 9, but I do see now. However we should probably be looking at a full backout of 62188 and not just this one file, since Tanu says the other changes are void without the nsDocumentEncoder changes. I'd hate to see 62188 regress, but in order to fix this bug, it is the right thing unless an alternate solution to 62188 is found quickly.
I couldn't imagine it would be so hard to implement the copy of list markers as in Bug 62188 I've tried to examine the behaviour of Internet Explorer 6 and Opera 6 for curiosity and in fact they both only copy the texts ignoring <li> tags. Anyway I think there could be a workaround. For example, neither ol or ul (or li) would be included in IncludeInContext() if only a single line has been selected and there's at least another character before than the first character selected, so that ol or ul would always be included as it happens now with an exception.
In response to Tanu's comment #14, this is not really a choice between just illegal html or a fix for 62188. If we take Tanu's patch, you will get bad results whenever you copy from inside a list item and do a plaintext paste. It would paste on a new line, indented. Plaintext serialization basically needs some extra info on the clipboard in order to solve 62188. When we needed extra info for html paste inside composer, we added some extra data flavors on the clipboard to hold that info (see EncodeToStringWithContext()). Ironically, this is just the kind of problem that XIF would have been good at solving.
akkana, can i get an r= here? this is fairly serious bug with simple fix. kin or jst, can i get sr?
Comment on attachment 76729 [details] [diff] [review] Patch to fix this... Reluctant r=akkana because it is a regression. Sigh. We really need to find a solution to this problem, though! The inability to list any of these items in the copy context is causing a large number of other bugs like the one Tanu was fixing -- we need to find a way to include that information somehow.
Attachment #76729 - Flags: review+
*** Bug 135235 has been marked as a duplicate of this bug. ***
Comment on attachment 76663 [details] [diff] [review] undoing earlier patch of nsDocumentEncoder.cpp This was actually the patch I was reviewing.
Attachment #76663 - Flags: review+
Comment on attachment 76729 [details] [diff] [review] Patch to fix this... Mistakenly marked this patch as reviewed ... un-marking (though I'd love to be able to keep this one).
Attachment #76729 - Flags: review+
Comment on attachment 76663 [details] [diff] [review] undoing earlier patch of nsDocumentEncoder.cpp sr=kin@netscape.com Please reopen bug 62188 if you check this in.
Attachment #76663 - Flags: superreview+
Whiteboard: EDITORBASE+; fixinhand; need r=,sr=,a=[adt2] → EDITORBASE+; fixinhand; need a=[adt2]
See also bug 78676, "selection inside a single <li> shouldn't include bullet". The recent change makes bug 78676 trigger more often, but that doesn't mean it's at fault.
Jfrancis, I think in nsDocumentEncoder, if we can do something like the parent tag is included only if the child node is completely selected, we would get the right thing. This is something that Akkana has always suggested for all the tags in general. It would resolve quite some table related bugs and many more. As I recall, it could take quite some time, which we all agree and we may not like to do that for 1.0. So can we make a compromise at this stage? I think we can, because even though we know that something like <ol>abc</ol> is incorrect yet we know that most of the browsers are able to resolve this and do the right thing with this and such situations are much lesser than the ones where we are doing copy/paste with the list items.
Keywords: adt1.0.0, approval
Comment on attachment 76663 [details] [diff] [review] undoing earlier patch of nsDocumentEncoder.cpp a=asa (on behalf of drivers) for checkin to the 1.0 trunk
Attachment #76663 - Flags: approval+
adt1.0.0+ (on ADT's behalf) approval for checkin into 1.0.
Keywords: adt1.0.0adt1.0.0+
Tanu, the idea of having certain tags force certain ancestors into the copy stream is probably a good one, but we can not do that for moz1.0. In the meatime, I can't leave any list structure in IncludeInContext(). Even if you excluded li, and only did ol/ul, it would still break paste.
Comment on attachment 76729 [details] [diff] [review] Patch to fix this... we cant do this
Attachment #76729 - Attachment is obsolete: true
fix landed on trunk
Status: ASSIGNED → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
Still pastes as # when copying from middle of a list: bug 137482
This landed before branch cut. Hence: fixed1.0.0
Keywords: approvalfixed1.0.0
using trunk build from 2003040708 on win2K, this works correctly. I created a test case with the initial list descriptions, viewed the test case in the browser, selected partial list item content and pasted into notepad. Only the text was pasted, not the list item marker.
Status: RESOLVED → VERIFIED
I confirm that the list item marker is not copied (OS X 2003040708). However, I do note that if you select a word manually, an extra space gets copied. eg on the originator's web page, select 'Item' by placing the cursor to the right of the 'm', click and hold the left mouse button, and moving left until the cursor has just moved to the left of the 'I', such that the whole word 'Item' is selected, so as you can be sure that no 'space' before the 'I' has been selected. Copy and paste that into another window, and it will have a space before the 'I'. I also notice that when you cut and paste the entire list, an extra space is inserted between the '#' character and the 'I' of 'Item'. Also wondering why the '#'s aren't numbers, since I was copying an ordered list (from the first list on http://www.elfqrin.com/Sample.html#Lists) Different bug(s) perhaps? Max.
Product: Browser → Seamonkey
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: