Page 1 of 1
CSS select previous sibling
Posted: Fri Apr 25, 2014 2:30 am
by dvezina
Hi,
My CSS looks like this:
Code: Select all
CITY + NEIGHBORHOOD[name=""] {
display:inline;
font-style:italic;
content: oxy_xpath("//CITY/@name");
}
My XML looks like this:
Code: Select all
<LISTING>
<COUNTRY geo_id="0" id="1051" name="Canada"/>
<STATE geo_id="0" id="48999" name="North America|Canada|British Columbia"/>
<CITY geo_id="0" id="5503" name="North America|Canada|British Columbia|Whistler"></CITY>
<NEIGHBORHOOD geo_id="" id="0" name=""/>
</LISTING>
The expected output is:
North America|Canada|British Columbia|Whistler
Does anyone see why this doesn't work.
THANKS
Re: CSS select previous sibling
Posted: Fri Apr 25, 2014 12:49 pm
by alex_jitianu
Hi,
I tested the samples you provided and in my case the author mode presented just what you've expected :
North America|Canada|British Columbia|Whistler. Perhaps there is a
StylesFilter involved and it also changes the styles of the element? If not, what Oxygen version you are using? If you test these samples in a fresh Oxygen installation (one that has just the default frameworks) are they working as expected?
Best regards,
Alex
Re: CSS select previous sibling
Posted: Fri Apr 25, 2014 7:56 pm
by dvezina
There is a StyleFilter and DocumentModificationFilter (setAttribute) in play.
If CITY and NEIGBORHOOD are in LISTING, they are form controls. If they are a chapter, I render them as normal text. Everything seems to work but the xpath with the attribte that doesnt work.
My StyleFilter code is:
Code: Select all
else if (authorNode.getName().equals("CITY")) {
// getOwnerDocument returns null when part of DocumentFrgement
// This is what crashes [+ City] action
AuthorNode authorDocument = authorNode.getOwnerDocument();
if (authorDocument != null) {
AuthorElement rootElement = authorNode.getOwnerDocument().getRootElement();
if (rootElement.getName().equals("LISTING")) {
EditorContent editorContent = geosBuilder.getEditorContent("city");
styles.setProperty(Styles.KEY_MIXED_CONTENT, new StaticContent[] {editorContent});
returnAlteredStyles = true;
}
}
}
else if (authorNode.getName().equals("NEIGHBORHOOD")) {
// getOwnerDocument returns null when part of DocumentFrgement
// This is what crashes [+ Hood] action
AuthorNode authorDocument = authorNode.getOwnerDocument();
if (authorDocument != null) {
AuthorElement rootElement = authorNode.getOwnerDocument().getRootElement();
if (rootElement.getName().equals("LISTING")) {
EditorContent editorContent = geosBuilder.getEditorContent("hood");
styles.setProperty(Styles.KEY_MIXED_CONTENT, new StaticContent[] {editorContent});
returnAlteredStyles = true;
}
}
}
My CSS is attempting th following: (1) If NEIGHBORBHOOD/@name is empty or does not exist, print CITY/@name, (2)Otherwise print NEIGHBORHOOD/@name.
Code: Select all
/*DOES NOT WORK/
CITY + NEIGHBORHOOD[name=""] {
display:inline;
font-style:italic;
content: ", " oxy_xpath("//CITY/@name");
}
/*WORKS*/
CITY + NEIGHBORHOOD[name*="|"] {
display:inline;
font-style:italic;
content: ", " oxy_substring(attr(name), oxy_add(oxy_lastindexof(attr(name), '|'), 1, integer));
}
/*WORKS*/
CITY + NEIGHBORHOOD[name] {
display:inline;
font-style:italic;
content: ", " oxy_substring(attr(name), oxy_add(oxy_lastindexof(attr(name), '|'), 1, integer));
}
What I did notice is that if I use oxy_xpath("//CITY/text()"), I do get the text. So it appears to be the name attribute. I will try to run this down in the DocumentModificationsFilter.
Thanks for your help
Re: CSS select previous sibling
Posted: Mon Apr 28, 2014 4:23 pm
by alex_jitianu
Hi Deanna,
The code below, changes the
content property in the styles. This is the same property on which you put the oxy_xpath() on. The StylesFilter is applied last so it will override the rule from the CSS.
Code: Select all
else if (authorNode.getName().equals("NEIGHBORHOOD")) {
// getOwnerDocument returns null when part of DocumentFrgement
// This is what crashes [+ Hood] action
AuthorNode authorDocument = authorNode.getOwnerDocument();
if (authorDocument != null) {
AuthorElement rootElement = authorNode.getOwnerDocument().getRootElement();
if (rootElement.getName().equals("LISTING")) {
EditorContent editorContent = geosBuilder.getEditorContent("hood");
styles.setProperty(Styles.KEY_MIXED_CONTENT, new StaticContent[] {editorContent});
returnAlteredStyles = true;
}
}
}
You should probably add some checks in the StylesFilter to only change the
content property of NEIGHBORBHOOD so that it doesn't overlap with the CSS rules. It's strange that oxy_xpath("//CITY/text()") works, because from the StylesFilter code looks like it always overrides the content of NEIGHBORBHOOD.
Best regards,
Alex