Editor needs a way to identify "unknown" ("userdefined") tags (not in HTML DTD)

VERIFIED FIXED in M16

Status

()

P3
normal
VERIFIED FIXED
19 years ago
19 years ago

People

(Reporter: cmanske, Assigned: cmanske)

Tracking

Trunk
x86
Windows NT
Points:
---

Firefox Tracking Flags

(Not tracked)

Details

(Whiteboard: [nsbeta2+ until 5/16])

Attachments

(1 attachment)

(Assignee)

Description

19 years ago
In Composer, I am implementing an "All Tags" editing mode that displays
an image for all the known HTML tags starting with <body> and it's
children using CSS-generated content. But what happens when we encounter
a tagname that the parser doesn't understand (e.g., very old tags or
maybe some Microsoft proprietary tags)? I assume the display type is set
to "none" and we just ignore them in the frame tree. But the editor
needs to display a generic icon, like the "yellow tags" we have in 4.x
Composer.
This is how we display an icon for tags that are known:

body {
  margin-left: 2px;
  padding-left: 13px;
  background: url(chrome://editor/skin/images/tag-body.gif) no-repeat;
  background-position: top left;
}

So it's hard to make a rule if we don't know the tagname.
A suggestion:
During parsing, can we append an attribute node
named "_moz-unknown" to any tag not in the HTML DTD? Then I could make a rule
like this:

*[_moz-unknown] {
  display: inline;
  margin-left: 2px;
  padding-left: 13px;
  background: url(chrome://editor/skin/images/tag-unknown.gif) no-repeat;
  background-position: top left;
}
(Assignee)

Updated

19 years ago
Blocks: 22262
(Assignee)

Comment 1

19 years ago
Some good comments from Matthew Thomas (mpt26@student.canterbury.ac.nz):
Such an idea could work, provided that:
(a) the attribute has a name such as "moz-unknown", which is much less
    likely to clash with a real attribute in a future DTD than a single
    English word like "unknown" is;
(b) the "moz-unknown" attributes are *not* saved with the document, but
    are regenerated each time the document is opened. (You'd probably
    want to hide them when showing the source of the document while
    editing it, too.)

These two things would help make sure that bad stuff doesn't happen if I
happen to use an old copy of Moz Composer to edit a W3C HTML 6.1
document, in a few years time. :-)

Comment 2

19 years ago
Fine plan. I land it in within a week or so.
Status: NEW → ASSIGNED

Comment 3

19 years ago
Harish has been working on a method GetDTDForDoctype() that will solve this 
problem.
Assignee: rickg → harishd
Status: ASSIGNED → NEW
(Assignee)

Comment 4

19 years ago
I don't see how GetDTDForDoctype solves this problem. Harish?
(Assignee)

Comment 5

19 years ago
Beth: Is this a "feature"? If yes, then we better get it on the beta2 bandwagon
ASAP.
An outside developer made a suggestion that is worth exploring:
Use this style to cover all tags:
* {
  display: inline;
  margin-left: 2px; margin-top: 2px;
  padding-left: 13px; 
  background: url(chrome://editor/skin/images/unknown.gif) no-repeat; 
  background-position: top left;
}
I tried using this in an editor override stylesheet, but that doesn't work.
Do override sheets have their own cascading? Would loading this in an override
sheet before ua.css work? Possible problem is performance.
Does that sound like a viable strategy?

Keywords: nsbeta2

Comment 6

19 years ago
I'm not sure either how the DOCTYPE would address this problem. I'll consult 
with Rickg about this. Setting M16
Status: NEW → ASSIGNED
Target Milestone: --- → M16
(Assignee)

Comment 7

19 years ago
As an experiment, I added the general rule described above to ua.css, before
the 2 @import lines for html.css and xul.css and it definitely does not work!
The rules in html and xul css don't seem to override the general rule.

Comment 8

19 years ago
Charles: I understood from talking to beth that you were iterating the content 
model yourself to determine the elements. It looks from you example that you're 
using CSS instead (and mapping an image via a property). In this case, using the  
DTD is insufficient. We'll add the _moz-unknown property for you shortly.

Comment 9

19 years ago
Taking this back to implement for charles.
Assignee: harishd → rickg
Status: ASSIGNED → NEW

Comment 10

19 years ago
I added support for this attribute. The special attribute is called, drumroll 
please, -moz-userdefined. It works fine in my tests, but I didn't check in any 
support in the html.css file (I'll leave that to charlie).
Status: NEW → RESOLVED
Last Resolved: 19 years ago
Resolution: --- → FIXED
(Assignee)

Comment 11

19 years ago
I need this open until I do the required CSS part for Composer. Also:
Akkana: Do you need to detect this when we output HTML so the attribute is
stripped?
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
(Assignee)

Updated

19 years ago
Status: REOPENED → ASSIGNED
(Assignee)

Comment 12

19 years ago
I'm going to show the "unknown" tag icon only in "Show All Tags" mode.
Does that sound ok? I don't see any point in cluttering the normal editor 
mode -- that will make Mail Composer much cleaner, especially with input
from Microsoft mail programs.

Comment 13

19 years ago
The output methods automatically strip any attribute which starts with the
string "_moz", since that's what the editor has been using.  I'd appreciate it
if we could change the attribute name to start with _moz instead of -moz.

Comment 14

19 years ago
Do me a favor, please: let's refer to this as the user-defined tag, no the 
unknown tag. UnknownTag has different semantics altogether in layout.
(Assignee)

Comment 15

19 years ago
Just occured to me: Is "-moz-userdefined" the best term? It is really "we don't
know about it in our DTD" which covers deprecated tags and Microsoft and old
Netscape proprietary tags. I'm using "tag-unknown.gif" for the icon;
anything wrong with "-moz-unknown"?
Assignee: rickg → cmanske
Status: ASSIGNED → NEW
(Assignee)

Comment 16

19 years ago
Rick: Didn't see your comment -- what is UnknownTag in layout?
Status: NEW → ASSIGNED
(Assignee)

Comment 17

19 years ago
I can make that change - I don't think Rick will mind, correct?
Summary: Editor needs a way to identify "unknown" tags (not in HTML DTD) → Editor needs a way to identify ?unknown? tags (not in HTML DTD)

Comment 18

19 years ago
nsbeta2+
Whiteboard: [nsbeta2+ until 5/16]
(Assignee)

Comment 19

19 years ago
The attribute is now set, but the CSS rule is not responding to show the
icon.
(Assignee)

Comment 20

19 years ago
Created attachment 8363 [details]
Test page with a "userdefined" tag <foo>
(Assignee)

Comment 21

19 years ago
I can't get the "_moz-userdefined" to trigger a CSS change.
I want to use this:
*[_moz-userdefined] {
  display: inline:
  min-height: 35px; margin-left: 2px; margin-top: 2px;
  padding-left: 16px; 
  background: url(chrome://editor/skin/images/tag-unknown.gif) no-repeat; 
  background-position: top left;
}
in an editor override CSS file, but it didn't work.
I added the sample Rickg sent me directly to ua.css:
@import url(resource:/res/html.css);
@import url(resource:/chrome/xul.css);

*[_moz-userdefined] { 
  display: inline; 
  margin-left: 2px; 
  padding-left: 13px; 
  background-color: yellow; 
} 
and it doesn't show the yellow background in mozilla browser or viewer.
Try
   *[-moz-userdefined] { ... }
Or, if you have changed the code to use underscores,
   *[\_moz-userdefined] { ... }
Underscores are not valid in CSS and must be escaped.
(Assignee)

Comment 23

19 years ago
Thanks for the escaping tip. This finally works!
Will checkin soon.
Summary: Editor needs a way to identify ?unknown? tags (not in HTML DTD) → Editor needs a way to identify "unknown" ("userdefined") tags (not in HTML DTD)
(Assignee)

Comment 24

19 years ago
*** Bug 22262 has been marked as a duplicate of this bug. ***
(Assignee)

Comment 25

19 years ago
CSS now checked in. Thanks Rick and Ian!
Status: ASSIGNED → RESOLVED
Last Resolved: 19 years ago19 years ago
Resolution: --- → FIXED

Comment 26

19 years ago
changing qa contact to sujay, this is his area.
QA Contact: janc → sujay

Comment 27

19 years ago
this is not my area....Gerardo please assign this to someone on your team...
I only verify Editor component bugs...
QA Contact: sujay → gerardok
(Assignee)

Comment 28

19 years ago
This is a Composer issue! Simply load the attached test page, view it in the
"Show All Tags" mode (tab near window bottom), and you should see an icon with
"?" to represent the <foo> tag.

Updated

19 years ago
QA Contact: gerardok → sujay

Comment 29

19 years ago
verified in 6/4 build.
Status: RESOLVED → VERIFIED
You need to log in before you can comment on or make changes to this bug.