📄 html_headimpl.cpp
字号:
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()
{
//const char* name = "name";
AtomicString str = getAttribute(DOMString("name"));
if(!str.isEmpty()) {
//const char* value="content";
AtomicString v = getAttribute(DOMString("content"));
//Inform the bridge about this meta value;
KHTMLPart* part = getDocument()->part();
KWQ(part)->notifyMetaData(str.string(),v.string());
}
// 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), m_cachedScript(0), m_createdByParser(false)
{
}
HTMLScriptElementImpl::~HTMLScriptElementImpl()
{
if (m_cachedScript)
m_cachedScript->deref(this);
}
void HTMLScriptElementImpl::insertedIntoDocument()
{
HTMLElementImpl::insertedIntoDocument();
assert(!m_cachedScript);
if (m_createdByParser)
return;
QString url = getAttribute(ATTR_SRC).string();
if (!url.isEmpty()) {
QString charset = getAttribute(ATTR_CHARSET).string();
m_cachedScript = getDocument()->docLoader()->requestScript(DOMString(url), charset);
if (m_cachedScript)
m_cachedScript->ref(this);
return;
}
DOMString scriptString = "";
for (NodeImpl *n = firstChild(); n; n = n->nextSibling())
if (n->isTextNode())
scriptString += static_cast<TextImpl*>(n)->data();
DocumentImpl *doc = getDocument();
KHTMLPart *part = doc->part();
if (!part)
return;
KJSProxy *proxy = KJSProxy::proxy(part);
if (!proxy)
return;
proxy->evaluate(doc->URL(), 0, scriptString.string(), Node());
DocumentImpl::updateDocumentsRendering();
}
void HTMLScriptElementImpl::removedFromDocument()
{
HTMLElementImpl::removedFromDocument();
if (m_cachedScript) {
m_cachedScript->deref(this);
m_cachedScript = 0;
}
}
void HTMLScriptElementImpl::notifyFinished(CachedObject* o)
{
CachedScript *cs = static_cast<CachedScript *>(o);
assert(cs == m_cachedScript);
KHTMLPart *part = getDocument()->part();
if (part) {
KJSProxy *proxy = KJSProxy::proxy(part);
if (proxy) {
proxy->evaluate(cs->url().string(), 0, cs->script().string(), Node());
DocumentImpl::updateDocumentsRendering();
}
}
cs->deref(this);
m_cachedScript = 0;
}
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), m_title("")
{
}
HTMLTitleElementImpl::~HTMLTitleElementImpl()
{
}
NodeImpl::Id HTMLTitleElementImpl::id() const
{
return ID_TITLE;
}
void HTMLTitleElementImpl::insertedIntoDocument()
{
HTMLElementImpl::insertedIntoDocument();
getDocument()->setTitle(m_title, this);
}
void HTMLTitleElementImpl::removedFromDocument()
{
HTMLElementImpl::removedFromDocument();
getDocument()->removeTitle(this);
}
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 (inDocument())
getDocument()->setTitle(m_title, this);
}
DOMString HTMLTitleElementImpl::text() const
{
DOMString val = "";
for (NodeImpl *n = firstChild(); n; n = n->nextSibling()) {
if (n->isTextNode())
val += static_cast<TextImpl *>(n)->data();
}
return val;
}
void HTMLTitleElementImpl::setText(const DOMString &value)
{
int exceptioncode = 0;
int numChildren = childNodeCount();
if (numChildren == 1 && firstChild()->isTextNode()) {
static_cast<DOM::TextImpl *>(firstChild())->setData(value, exceptioncode);
} else {
if (numChildren > 0) {
removeChildren();
}
appendChild(getDocument()->createTextNode(value.implementation()), exceptioncode);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -