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