15f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian/*
25f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/)
35af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke * Copyright (C) 2010 Apple Inc. All rights reserved.
45f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
55f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is free software; you can redistribute it and/or
65f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * modify it under the terms of the GNU Library General Public
75f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * License as published by the Free Software Foundation; either
85f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * version 2 of the License, or (at your option) any later version.
95f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
105f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * This library is distributed in the hope that it will be useful,
115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * but WITHOUT ANY WARRANTY; without even the implied warranty of
125f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
135f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Library General Public License for more details.
145f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian *
155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * You should have received a copy of the GNU Library General Public License
165f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * along with this library; see the file COPYING.LIB.  If not, write to
175f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
185f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Boston, MA 02110-1301, USA.
195f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian */
205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "config.h"
225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if ENABLE(XHTMLMP)
245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "HTMLNoScriptElement.h"
255f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
265f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "CSSStyleSelector.h"
275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "HTMLNames.h"
285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "RenderObject.h"
295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qiannamespace WebCore {
315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianusing namespace HTMLNames;
335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeinline HTMLNoScriptElement::HTMLNoScriptElement(const QualifiedName& tagName, Document* document)
355af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke    : HTMLElement(tagName, document)
365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    ASSERT(hasTagName(noscriptTag));
385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
405af96e2c7b73ebc627c6894727826a7576d31758Leon ClarkePassRefPtr<HTMLNoScriptElement> HTMLNoScriptElement::create(const QualifiedName& tagName, Document* document)
415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen    return adoptRef(new HTMLNoScriptElement(tagName, document));
435f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid HTMLNoScriptElement::attach()
465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    HTMLElement::attach();
485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    // If no need to process <noscript>, we hide it by setting display:none temporarily
505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    if (!document()->shouldProcessNoscriptElement()) {
515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        if (renderer() && renderer()->style())
525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian            renderer()->style()->setDisplay(NONE);
535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        setNeedsStyleRecalc();
545f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    }
555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianvoid HTMLNoScriptElement::recalcStyle(StyleChange change)
585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    if (!document()->shouldProcessNoscriptElement() || !renderer() || !renderer()->style())
605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        return;
615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    // If <noscript> needs processing, we make it visiable here, including its visible children
635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    RefPtr<RenderStyle> style = renderer()->style();
645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    if (style->display() == NONE) {
655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        style->setDisplay(INLINE);
665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        // Create renderers for its children
685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        if (hasChildNodes()) {
695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian            for (Node* n = firstChild(); n; n = n->traverseNextNode(this))
705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian                if (!n->renderer())
715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian                    n->createRendererIfNeeded();
725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian        }
735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    }
745f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
755f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
765af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkebool HTMLNoScriptElement::childShouldCreateRenderer(Node*) const
775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian    return document()->shouldProcessNoscriptElement();
795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
825af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke
835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif
84