📄 html_baseimpl.cpp
字号:
return false;
#endif
// Ignore display: none.
return isURLAllowed(url);
}
RenderObject *HTMLFrameElementImpl::createRenderer(RenderArena *arena, RenderStyle *style)
{
return new (arena) RenderFrame(this);
}
void HTMLFrameElementImpl::attach()
{
// we should first look up via id, then via name.
// this shortterm hack fixes the ugly case. ### rewrite needed for next release
name = getAttribute(ATTR_NAME);
if (name.isNull())
name = getAttribute(ATTR_ID);
// inherit default settings from parent frameset
HTMLElementImpl* node = static_cast<HTMLElementImpl*>(parentNode());
while(node)
{
if(node->id() == ID_FRAMESET)
{
HTMLFrameSetElementImpl* frameset = static_cast<HTMLFrameSetElementImpl*>(node);
if(!frameBorderSet) frameBorder = frameset->frameBorder();
if(!noresize) noresize = frameset->noResize();
break;
}
node = static_cast<HTMLElementImpl*>(node->parentNode());
}
HTMLElementImpl::attach();
if (!m_render)
return;
KHTMLPart *part = getDocument()->part();
if (!part)
return;
part->incrementFrameCount();
AtomicString relativeURL = url;
if (relativeURL.isEmpty()) {
relativeURL = "about:blank";
}
// we need a unique name for every frame in the frameset. Hope that's unique enough.
if (name.isEmpty() || part->frameExists( name.string() ) )
name = AtomicString(part->requestFrameName());
// load the frame contents
part->requestFrame( static_cast<RenderFrame*>(m_render), relativeURL.string(), name.string() );
}
void HTMLFrameElementImpl::detach()
{
KHTMLPart *part = getDocument()->part();
if (m_render && part) {
part->decrementFrameCount();
KHTMLPart *framePart = part->findFrame( name.string() );
if (framePart)
framePart->frameDetached();
}
HTMLElementImpl::detach();
}
void HTMLFrameElementImpl::setLocation( const DOMString& str )
{
if (url == str) return;
url = AtomicString(str);
updateForNewURL();
}
bool HTMLFrameElementImpl::isFocusable() const
{
#if NOKIA_CHANGES
return false;
#endif
return m_render!=0;
}
void HTMLFrameElementImpl::setFocus(bool received)
{
HTMLElementImpl::setFocus(received);
khtml::RenderFrame *renderFrame = static_cast<khtml::RenderFrame *>(m_render);
if (!renderFrame || !renderFrame->widget())
return;
if (received)
renderFrame->widget()->setFocus();
else
renderFrame->widget()->clearFocus();
}
KHTMLPart* HTMLFrameElementImpl::contentPart() const
{
// Start with the part that contains this element, our ownerDocument.
KHTMLPart* ownerDocumentPart = getDocument()->part();
if (!ownerDocumentPart) {
return 0;
}
// Find the part for the subframe that this element represents.
return ownerDocumentPart->findFrame(name.string());
}
DocumentImpl* HTMLFrameElementImpl::contentDocument() const
{
KHTMLPart* part = contentPart();
if (!part) {
return 0;
}
// Return the document for that part, which is our contentDocument.
return part->xmlDocImpl();
}
bool HTMLFrameElementImpl::isURLAttribute(AttributeImpl *attr) const
{
return attr->id() == ATTR_SRC;
}
// -------------------------------------------------------------------------
HTMLFrameSetElementImpl::HTMLFrameSetElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
// default value for rows and cols...
m_totalRows = 1;
m_totalCols = 1;
m_rows = m_cols = 0;
frameborder = true;
frameBorderSet = false;
m_border = 4;
noresize = false;
m_resizing = false;
}
HTMLFrameSetElementImpl::~HTMLFrameSetElementImpl()
{
if (m_rows)
delete [] m_rows;
if (m_cols)
delete [] m_cols;
}
NodeImpl::Id HTMLFrameSetElementImpl::id() const
{
return ID_FRAMESET;
}
void HTMLFrameSetElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr)
{
switch(attr->id())
{
case ATTR_ROWS:
if (attr->isNull()) break;
if (m_rows) delete [] m_rows;
m_rows = attr->value().toLengthArray(m_totalRows);
setChanged();
break;
case ATTR_COLS:
if (attr->isNull()) break;
delete [] m_cols;
m_cols = attr->value().toLengthArray(m_totalCols);
setChanged();
break;
case ATTR_FRAMEBORDER:
// false or "no" or "0"..
if ( attr->value().toInt() == 0 ) {
frameborder = false;
m_border = 0;
}
frameBorderSet = true;
break;
case ATTR_NORESIZE:
noresize = true;
break;
case ATTR_BORDER:
m_border = attr->value().toInt();
if(!m_border)
frameborder = false;
break;
case ATTR_ONLOAD:
setHTMLEventListener(EventImpl::LOAD_EVENT,
getDocument()->createHTMLEventListener(attr->value().string(), this));
break;
case ATTR_ONUNLOAD:
setHTMLEventListener(EventImpl::UNLOAD_EVENT,
getDocument()->createHTMLEventListener(attr->value().string(), this));
break;
default:
HTMLElementImpl::parseHTMLAttribute(attr);
}
}
bool HTMLFrameSetElementImpl::rendererIsNeeded(RenderStyle *style)
{
// Ignore display: none but do pay attention if a stylesheet has caused us to delay our loading.
return style->isStyleAvailable();
}
RenderObject *HTMLFrameSetElementImpl::createRenderer(RenderArena *arena, RenderStyle *style)
{
#if NOKIA_CHANGES
if (getDocument()->fastDisplayMode())
return ElementImpl::createRenderer(arena,style);
#endif
return new (arena) RenderFrameSet(this);
}
void HTMLFrameSetElementImpl::attach()
{
// inherit default settings from parent frameset
HTMLElementImpl* node = static_cast<HTMLElementImpl*>(parentNode());
while(node)
{
if(node->id() == ID_FRAMESET)
{
HTMLFrameSetElementImpl* frameset = static_cast<HTMLFrameSetElementImpl*>(node);
if(!frameBorderSet) frameborder = frameset->frameBorder();
if(!noresize) noresize = frameset->noResize();
break;
}
node = static_cast<HTMLElementImpl*>(node->parentNode());
}
HTMLElementImpl::attach();
}
void HTMLFrameSetElementImpl::defaultEventHandler(EventImpl *evt)
{
if (evt->isMouseEvent() && !noresize && m_render) {
static_cast<khtml::RenderFrameSet *>(m_render)->userResize(static_cast<MouseEventImpl*>(evt));
evt->setDefaultHandled();
}
HTMLElementImpl::defaultEventHandler(evt);
}
void HTMLFrameSetElementImpl::detach()
{
if(attached())
// ### send the event when we actually get removed from the doc instead of here
dispatchHTMLEvent(EventImpl::UNLOAD_EVENT,false,false);
HTMLElementImpl::detach();
}
void HTMLFrameSetElementImpl::recalcStyle( StyleChange ch )
{
if (changed() && m_render) {
m_render->setNeedsLayout(true);
// m_render->layout();
setChanged(false);
}
HTMLElementImpl::recalcStyle( ch );
}
// -------------------------------------------------------------------------
HTMLHeadElementImpl::HTMLHeadElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLHeadElementImpl::~HTMLHeadElementImpl()
{
}
NodeImpl::Id HTMLHeadElementImpl::id() const
{
return ID_HEAD;
}
// -------------------------------------------------------------------------
HTMLHtmlElementImpl::HTMLHtmlElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLHtmlElementImpl::~HTMLHtmlElementImpl()
{
}
NodeImpl::Id HTMLHtmlElementImpl::id() const
{
return ID_HTML;
}
// -------------------------------------------------------------------------
HTMLIFrameElementImpl::HTMLIFrameElementImpl(DocumentPtr *doc) : HTMLFrameElementImpl(doc)
{
frameBorder = false;
marginWidth = -1;
marginHeight = -1;
needWidgetUpdate = false;
}
HTMLIFrameElementImpl::~HTMLIFrameElementImpl()
{
}
NodeImpl::Id HTMLIFrameElementImpl::id() const
{
return ID_IFRAME;
}
bool HTMLIFrameElementImpl::mapToEntry(NodeImpl::Id attr, MappedAttributeEntry& result) const
{
switch (attr) {
case ATTR_WIDTH:
case ATTR_HEIGHT:
result = eUniversal;
return false;
case ATTR_ALIGN:
result = eReplaced; // Share with <img> since the alignment behavior is the same.
return false;
default:
break;
}
return HTMLElementImpl::mapToEntry(attr, result);
}
void HTMLIFrameElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr )
{
switch ( attr->id() )
{
case ATTR_WIDTH:
addCSSLength( attr, CSS_PROP_WIDTH, attr->value());
break;
case ATTR_HEIGHT:
addCSSLength( attr, CSS_PROP_HEIGHT, attr->value() );
break;
case ATTR_ALIGN:
addHTMLAlignment( attr );
break;
default:
HTMLFrameElementImpl::parseHTMLAttribute( attr );
}
}
bool HTMLIFrameElementImpl::rendererIsNeeded(RenderStyle *style)
{
#if NOKIA_CHANGES
if (getDocument()->fastDisplayMode())
return false;
#endif
// Don't ignore display: none the way frame does.
return isURLAllowed(url) && style->display() != NONE;
}
RenderObject *HTMLIFrameElementImpl::createRenderer(RenderArena *arena, RenderStyle *style)
{
return new (arena) RenderPartObject(this);
}
void HTMLIFrameElementImpl::attach()
{
HTMLElementImpl::attach();
KHTMLPart *part = getDocument()->part();
if (m_render && part) {
// we need a unique name for every frame in the frameset. Hope that's unique enough.
part->incrementFrameCount();
if(name.isEmpty() || part->frameExists( name.string() ))
name = AtomicString(part->requestFrameName());
static_cast<RenderPartObject*>(m_render)->updateWidget();
needWidgetUpdate = false;
}
}
void HTMLIFrameElementImpl::recalcStyle( StyleChange ch )
{
if (needWidgetUpdate) {
if(m_render) static_cast<RenderPartObject*>(m_render)->updateWidget();
needWidgetUpdate = false;
}
HTMLElementImpl::recalcStyle( ch );
}
void HTMLIFrameElementImpl::openURL()
{
needWidgetUpdate = true;
setChanged();
}
bool HTMLIFrameElementImpl::isURLAttribute(AttributeImpl *attr) const
{
return attr->id() == ATTR_SRC;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -