Home | History | Annotate | Download | only in js
      1 /*
      2  * Copyright (C) 2008 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
     14  *     its contributors may be used to endorse or promote products derived
     15  *     from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     18  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     20  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     21  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     22  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     23  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     24  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include "config.h"
     30 
     31 #if ENABLE(XSLT)
     32 
     33 #include "JSXSLTProcessor.h"
     34 
     35 #include "Document.h"
     36 #include "DocumentFragment.h"
     37 #include "JSDocument.h"
     38 #include "JSDocumentFragment.h"
     39 #include "JSNode.h"
     40 #include "Node.h"
     41 #include "PlatformString.h"
     42 #include "XSLTProcessor.h"
     43 #include "JSDOMBinding.h"
     44 
     45 using namespace JSC;
     46 
     47 namespace WebCore {
     48 
     49 JSValue JSXSLTProcessor::importStylesheet(ExecState* exec)
     50 {
     51     JSValue nodeVal = exec->argument(0);
     52     if (nodeVal.inherits(&JSNode::s_info)) {
     53         JSNode* node = static_cast<JSNode*>(asObject(nodeVal));
     54         impl()->importStylesheet(node->impl());
     55         return jsUndefined();
     56     }
     57     // Throw exception?
     58     return jsUndefined();
     59 }
     60 
     61 JSValue JSXSLTProcessor::transformToFragment(ExecState* exec)
     62 {
     63     JSValue nodeVal = exec->argument(0);
     64     JSValue docVal = exec->argument(1);
     65     if (nodeVal.inherits(&JSNode::s_info) && docVal.inherits(&JSDocument::s_info)) {
     66         WebCore::Node* node = static_cast<JSNode*>(asObject(nodeVal))->impl();
     67         Document* doc = static_cast<Document*>(static_cast<JSDocument*>(asObject(docVal))->impl());
     68         return toJS(exec, impl()->transformToFragment(node, doc).get());
     69     }
     70     // Throw exception?
     71     return jsUndefined();
     72 }
     73 
     74 JSValue JSXSLTProcessor::transformToDocument(ExecState* exec)
     75 {
     76     JSValue nodeVal = exec->argument(0);
     77     if (nodeVal.inherits(&JSNode::s_info)) {
     78         JSNode* node = static_cast<JSNode*>(asObject(nodeVal));
     79         RefPtr<Document> resultDocument = impl()->transformToDocument(node->impl());
     80         if (resultDocument)
     81             return toJS(exec, resultDocument.get());
     82         return jsUndefined();
     83     }
     84     // Throw exception?
     85     return jsUndefined();
     86 }
     87 
     88 JSValue JSXSLTProcessor::setParameter(ExecState* exec)
     89 {
     90     if (exec->argument(1).isUndefinedOrNull() || exec->argument(2).isUndefinedOrNull())
     91         return jsUndefined(); // Throw exception?
     92     String namespaceURI = ustringToString(exec->argument(0).toString(exec));
     93     String localName = ustringToString(exec->argument(1).toString(exec));
     94     String value = ustringToString(exec->argument(2).toString(exec));
     95     impl()->setParameter(namespaceURI, localName, value);
     96     return jsUndefined();
     97 }
     98 
     99 JSValue JSXSLTProcessor::getParameter(ExecState* exec)
    100 {
    101     if (exec->argument(1).isUndefinedOrNull())
    102         return jsUndefined();
    103     String namespaceURI = ustringToString(exec->argument(0).toString(exec));
    104     String localName = ustringToString(exec->argument(1).toString(exec));
    105     String value = impl()->getParameter(namespaceURI, localName);
    106     return jsStringOrUndefined(exec, value);
    107 }
    108 
    109 JSValue JSXSLTProcessor::removeParameter(ExecState* exec)
    110 {
    111     if (exec->argument(1).isUndefinedOrNull())
    112         return jsUndefined();
    113     String namespaceURI = ustringToString(exec->argument(0).toString(exec));
    114     String localName = ustringToString(exec->argument(1).toString(exec));
    115     impl()->removeParameter(namespaceURI, localName);
    116     return jsUndefined();
    117 }
    118 
    119 EncodedJSValue JSC_HOST_CALL JSXSLTProcessorConstructor::constructJSXSLTProcessor(ExecState* exec)
    120 {
    121     JSXSLTProcessorConstructor* jsConstructor = static_cast<JSXSLTProcessorConstructor*>(exec->callee());
    122     return JSValue::encode(CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor->globalObject(), XSLTProcessor, XSLTProcessor::create().get()));
    123 }
    124 
    125 } // namespace WebCore
    126 
    127 #endif // ENABLE(XSLT)
    128