html_blockimpl.cpp [plain text]
#include "html_blockimpl.h"
#include "html_documentimpl.h"
#include "css/cssstyleselector.h"
#include "css/cssproperties.h"
#include "css/cssvalues.h"
#include "misc/htmlhashes.h"
#include <kdebug.h>
using namespace khtml;
using namespace DOM;
HTMLBlockquoteElementImpl::HTMLBlockquoteElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLBlockquoteElementImpl::~HTMLBlockquoteElementImpl()
{
}
NodeImpl::Id HTMLBlockquoteElementImpl::id() const
{
return ID_BLOCKQUOTE;
}
HTMLDivElementImpl::HTMLDivElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLDivElementImpl::~HTMLDivElementImpl()
{
}
NodeImpl::Id HTMLDivElementImpl::id() const
{
return ID_DIV;
}
void HTMLDivElementImpl::parseAttribute(AttributeImpl *attr)
{
switch(attr->id())
{
case ATTR_ALIGN:
{
DOMString v = attr->value();
if ( strcasecmp( attr->value(), "middle" ) == 0 || strcasecmp( attr->value(), "center" ) == 0 )
addCSSProperty(CSS_PROP_TEXT_ALIGN, CSS_VAL__KONQ_CENTER);
else
addCSSProperty(CSS_PROP_TEXT_ALIGN, v);
break;
}
default:
HTMLElementImpl::parseAttribute(attr);
}
}
HTMLHRElementImpl::HTMLHRElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLHRElementImpl::~HTMLHRElementImpl()
{
}
NodeImpl::Id HTMLHRElementImpl::id() const
{
return ID_HR;
}
void HTMLHRElementImpl::parseAttribute(AttributeImpl *attr)
{
switch( attr->id() )
{
case ATTR_ALIGN:
if ( strcasecmp( attr->value(), "left") != 0) addCSSProperty(CSS_PROP_MARGIN_LEFT, CSS_VAL_AUTO);
else
addCSSProperty(CSS_PROP_MARGIN_LEFT, "1px");
if( strcasecmp( attr->value(), "right") != 0)
addCSSProperty(CSS_PROP_MARGIN_RIGHT, CSS_VAL_AUTO);
else
addCSSProperty(CSS_PROP_MARGIN_RIGHT, "1px");
break;
case ATTR_WIDTH:
{
if(!attr->val()) break;
bool ok;
int v = attr->val()->toInt(&ok);
if(ok && !v)
addCSSLength(CSS_PROP_WIDTH, "1");
else
addCSSLength(CSS_PROP_WIDTH, attr->value());
}
break;
default:
HTMLElementImpl::parseAttribute(attr);
}
}
void HTMLHRElementImpl::attach()
{
if (attributes(true )) {
DOMString color = getAttribute(ATTR_COLOR);
DOMStringImpl* si = getAttribute(ATTR_SIZE).implementation();
int _s = si ? si->toInt() : -1;
DOMString n("1");
if (!color.isNull()) {
addCSSProperty(CSS_PROP_BORDER_TOP_STYLE, CSS_VAL_SOLID);
addCSSProperty(CSS_PROP_BORDER_RIGHT_STYLE, CSS_VAL_SOLID);
addCSSProperty(CSS_PROP_BORDER_BOTTOM_STYLE, CSS_VAL_SOLID);
addCSSProperty(CSS_PROP_BORDER_LEFT_STYLE, CSS_VAL_SOLID);
addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, DOMString("0"));
addCSSLength(CSS_PROP_BORDER_BOTTOM_WIDTH, DOMString(si));
addHTMLColor(CSS_PROP_BORDER_COLOR, color);
}
else {
if (_s > 1 && getAttribute(ATTR_NOSHADE).isNull()) {
addCSSProperty(CSS_PROP_BORDER_BOTTOM_WIDTH, n);
addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, n);
addCSSProperty(CSS_PROP_BORDER_LEFT_WIDTH, n);
addCSSProperty(CSS_PROP_BORDER_RIGHT_WIDTH, n);
addCSSLength(CSS_PROP_HEIGHT, DOMString(QString::number(_s-2)));
}
else if (_s >= 0) {
addCSSProperty(CSS_PROP_BORDER_TOP_WIDTH, DOMString(QString::number(_s)));
addCSSProperty(CSS_PROP_BORDER_BOTTOM_WIDTH, DOMString("0"));
}
}
if (_s == 0)
addCSSProperty(CSS_PROP_MARGIN_BOTTOM, n);
}
HTMLElementImpl::attach();
}
HTMLHeadingElementImpl::HTMLHeadingElementImpl(DocumentPtr *doc, ushort _tagid)
: HTMLGenericElementImpl(doc, _tagid)
{
}
HTMLParagraphElementImpl::HTMLParagraphElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
NodeImpl::Id HTMLParagraphElementImpl::id() const
{
return ID_P;
}
void HTMLParagraphElementImpl::parseAttribute(AttributeImpl *attr)
{
switch(attr->id())
{
case ATTR_ALIGN:
{
DOMString v = attr->value();
if ( strcasecmp( attr->value(), "middle" ) == 0 || strcasecmp( attr->value(), "center" ) == 0 )
addCSSProperty(CSS_PROP_TEXT_ALIGN, CSS_VAL__KONQ_CENTER);
else
addCSSProperty(CSS_PROP_TEXT_ALIGN, v);
break;
}
default:
HTMLElementImpl::parseAttribute(attr);
}
}
HTMLPreElementImpl::HTMLPreElementImpl(DocumentPtr *doc, unsigned short _tagid)
: HTMLGenericElementImpl(doc, _tagid)
{
}
long HTMLPreElementImpl::width() const
{
return 0;
}
void HTMLPreElementImpl::setWidth( long )
{
}
HTMLLayerElementImpl::HTMLLayerElementImpl(DocumentPtr *doc)
: HTMLDivElementImpl( doc )
{
}
HTMLLayerElementImpl::~HTMLLayerElementImpl()
{
}
NodeImpl::Id HTMLLayerElementImpl::id() const
{
return ID_LAYER;
}
void HTMLLayerElementImpl::parseAttribute(AttributeImpl *attr)
{
HTMLElementImpl::parseAttribute(attr);
}