📄 html_headimpl.cpp
字号:
HTMLElementImpl::removedFromDocument();
process();
}
void HTMLLinkElementImpl::setStyleSheet(const DOM::DOMString &url, const DOM::DOMString &sheetStr)
{
// kdDebug( 6030 ) << "HTMLLinkElement::setStyleSheet()" << endl;
// kdDebug( 6030 ) << "**** current medium: " << m_media << endl;
if (m_sheet)
m_sheet->deref();
m_sheet = new CSSStyleSheetImpl(this, url);
kdDebug( 6030 ) << "style sheet parse mode strict = " << ( !getDocument()->inCompatMode() ) << endl;
m_sheet->ref();
m_sheet->parseString( sheetStr, !getDocument()->inCompatMode() );
MediaListImpl *media = new MediaListImpl( m_sheet, m_media );
m_sheet->setMedia( media );
m_loading = false;
// Tell the doc about the sheet.
if (!isLoading() && m_sheet && !isDisabled() && !isAlternate())
getDocument()->stylesheetLoaded();
}
bool HTMLLinkElementImpl::isLoading() const
{
// kdDebug( 6030 ) << "link: checking if loading!" << endl;
if(m_loading) return true;
if(!m_sheet) return false;
//if(!m_sheet->isCSSStyleSheet()) return false;
return static_cast<CSSStyleSheetImpl *>(m_sheet)->isLoading();
}
void HTMLLinkElementImpl::sheetLoaded()
{
if (!isLoading() && !isDisabled() && !isAlternate())
getDocument()->stylesheetLoaded();
}
bool HTMLLinkElementImpl::isURLAttribute(AttributeImpl *attr) const
{
return attr->id() == ATTR_HREF;
}
// -------------------------------------------------------------------------
HTMLMetaElementImpl::HTMLMetaElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc)
{
}
HTMLMetaElementImpl::~HTMLMetaElementImpl()
{
}
NodeImpl::Id HTMLMetaElementImpl::id() const
{
return ID_META;
}
void HTMLMetaElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr)
{
switch(attr->id())
{
case ATTR_HTTP_EQUIV:
m_equiv = attr->value();
process();
break;
case ATTR_CONTENT:
m_content = attr->value();
process();
break;
case ATTR_NAME:
break;
default:
HTMLElementImpl::parseHTMLAttribute(attr);
}
}
void HTMLMetaElementImpl::insertedIntoDocument()
{
HTMLElementImpl::insertedIntoDocument();
process();
}
void HTMLMetaElementImpl::process()
{
// Get the document to process the tag, but only if we're actually part of DOM tree (changing a meta tag while
// it's not in the tree shouldn't have any effect on the document)
if (inDocument() && !m_equiv.isNull() && !m_content.isNull())
getDocument()->processHttpEquiv(m_equiv,m_content);
}
// -------------------------------------------------------------------------
HTMLScriptElementImpl::HTMLScriptElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc)
{
}
HTMLScriptElementImpl::~HTMLScriptElementImpl()
{
}
NodeImpl::Id HTMLScriptElementImpl::id() const
{
return ID_SCRIPT;
}
bool HTMLScriptElementImpl::isURLAttribute(AttributeImpl *attr) const
{
return attr->id() == ATTR_SRC;
}
// -------------------------------------------------------------------------
HTMLStyleElementImpl::HTMLStyleElementImpl(DocumentPtr *doc) : HTMLElementImpl(doc)
{
m_sheet = 0;
m_loading = false;
}
HTMLStyleElementImpl::~HTMLStyleElementImpl()
{
if(m_sheet) m_sheet->deref();
}
NodeImpl::Id HTMLStyleElementImpl::id() const
{
return ID_STYLE;
}
// other stuff...
void HTMLStyleElementImpl::parseHTMLAttribute(HTMLAttributeImpl *attr)
{
switch (attr->id())
{
case ATTR_TYPE:
m_type = attr->value().domString().lower();
break;
case ATTR_MEDIA:
m_media = attr->value().string().lower();
break;
default:
HTMLElementImpl::parseHTMLAttribute(attr);
}
}
void HTMLStyleElementImpl::insertedIntoDocument()
{
HTMLElementImpl::insertedIntoDocument();
if (m_sheet)
getDocument()->updateStyleSelector();
}
void HTMLStyleElementImpl::removedFromDocument()
{
HTMLElementImpl::removedFromDocument();
if (m_sheet)
getDocument()->updateStyleSelector();
}
void HTMLStyleElementImpl::childrenChanged()
{
DOMString text = "";
for (NodeImpl *c = firstChild(); c != 0; c = c->nextSibling()) {
if ((c->nodeType() == Node::TEXT_NODE) ||
(c->nodeType() == Node::CDATA_SECTION_NODE) ||
(c->nodeType() == Node::COMMENT_NODE))
text += c->nodeValue();
}
if (m_sheet) {
if (static_cast<CSSStyleSheetImpl *>(m_sheet)->isLoading())
getDocument()->stylesheetLoaded(); // Remove ourselves from the sheet list.
m_sheet->deref();
m_sheet = 0;
}
m_loading = false;
if ((m_type.isEmpty() || m_type == "text/css") // Type must be empty or CSS
&& (m_media.isNull() || m_media.contains("screen") || m_media.contains("all") || m_media.contains("print"))) {
getDocument()->addPendingSheet();
m_loading = true;
m_sheet = new CSSStyleSheetImpl(this);
m_sheet->ref();
m_sheet->parseString( text, !getDocument()->inCompatMode() );
MediaListImpl *media = new MediaListImpl( m_sheet, m_media );
m_sheet->setMedia( media );
m_loading = false;
}
if (!isLoading() && m_sheet)
getDocument()->stylesheetLoaded();
}
bool HTMLStyleElementImpl::isLoading() const
{
if (m_loading) return true;
if(!m_sheet) return false;
return static_cast<CSSStyleSheetImpl *>(m_sheet)->isLoading();
}
void HTMLStyleElementImpl::sheetLoaded()
{
if (!isLoading())
getDocument()->stylesheetLoaded();
}
// -------------------------------------------------------------------------
HTMLTitleElementImpl::HTMLTitleElementImpl(DocumentPtr *doc)
: HTMLElementImpl(doc)
{
}
HTMLTitleElementImpl::~HTMLTitleElementImpl()
{
}
NodeImpl::Id HTMLTitleElementImpl::id() const
{
return ID_TITLE;
}
void HTMLTitleElementImpl::insertedIntoDocument()
{
HTMLElementImpl::insertedIntoDocument();
#if APPLE_CHANGES
// Only allow title to be set by first <title> encountered.
if (getDocument()->title().isEmpty())
getDocument()->setTitle(m_title);
#else
getDocument()->setTitle(m_title);
#endif
}
void HTMLTitleElementImpl::removedFromDocument()
{
HTMLElementImpl::removedFromDocument();
// Title element removed, so we have no title... we ignore the case of multiple title elements, as it's invalid
// anyway (?)
getDocument()->setTitle(DOMString());
}
void HTMLTitleElementImpl::childrenChanged()
{
HTMLElementImpl::childrenChanged();
m_title = "";
for (NodeImpl *c = firstChild(); c != 0; c = c->nextSibling()) {
if ((c->nodeType() == Node::TEXT_NODE) || (c->nodeType() == Node::CDATA_SECTION_NODE))
m_title += c->nodeValue();
}
#if APPLE_CHANGES
// Only allow title to be set by first <title> encountered.
if (inDocument() && getDocument()->title().isEmpty())
#else
if (inDocument()))
#endif
getDocument()->setTitle(m_title);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -