1 /* 2 * Copyright (C) 2009 Google 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 are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #include "config.h" 32 #include "V8HTMLInputElement.h" 33 34 #include "HTMLInputElement.h" 35 36 #include "V8Binding.h" 37 #include "V8Proxy.h" 38 39 namespace WebCore { 40 41 v8::Handle<v8::Value> V8HTMLInputElement::selectionStartAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) 42 { 43 INC_STATS("DOM.HTMLInputElement.selectionStart._get"); 44 v8::Handle<v8::Object> holder = info.Holder(); 45 HTMLInputElement* imp = V8HTMLInputElement::toNative(holder); 46 47 if (!imp->canHaveSelection()) 48 return throwError("Accessing selectionStart on an input element that cannot have a selection."); 49 50 int v = imp->selectionStart(); 51 return v8::Integer::New(v); 52 } 53 54 void V8HTMLInputElement::selectionStartAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) 55 { 56 INC_STATS("DOM.HTMLInputElement.selectionStart._set"); 57 v8::Handle<v8::Object> holder = info.Holder(); 58 HTMLInputElement* imp = V8HTMLInputElement::toNative(holder); 59 60 if (!imp->canHaveSelection()) { 61 throwError("Accessing selectionStart on an input element that cannot have a selection."); 62 return; 63 } 64 imp->setSelectionStart(value->Int32Value()); 65 } 66 67 v8::Handle<v8::Value> V8HTMLInputElement::selectionEndAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) 68 { 69 INC_STATS("DOM.HTMLInputElement.selectionEnd._get"); 70 v8::Handle<v8::Object> holder = info.Holder(); 71 HTMLInputElement* imp = V8HTMLInputElement::toNative(holder); 72 73 if (!imp->canHaveSelection()) 74 return throwError("Accessing selectionEnd on an input element that cannot have a selection."); 75 76 int v = imp->selectionEnd(); 77 return v8::Integer::New(v); 78 } 79 80 void V8HTMLInputElement::selectionEndAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) 81 { 82 INC_STATS("DOM.HTMLInputElement.selectionEnd._set"); 83 v8::Handle<v8::Object> holder = info.Holder(); 84 HTMLInputElement* imp = V8HTMLInputElement::toNative(holder); 85 86 if (!imp->canHaveSelection()) { 87 throwError("Accessing selectionEnd on an input element that cannot have a selection."); 88 return; 89 } 90 91 imp->setSelectionEnd(value->Int32Value()); 92 } 93 94 v8::Handle<v8::Value> V8HTMLInputElement::setSelectionRangeCallback(const v8::Arguments& args) 95 { 96 INC_STATS("DOM.HTMLInputElement.setSelectionRange"); 97 v8::Handle<v8::Object> holder = args.Holder(); 98 HTMLInputElement* imp = V8HTMLInputElement::toNative(holder); 99 100 if (!imp->canHaveSelection()) 101 return throwError("Calling setSelectionRange on an input element that cannot have a selection."); 102 103 int start = args[0]->Int32Value(); 104 int end = args[1]->Int32Value(); 105 106 imp->setSelectionRange(start, end); 107 return v8::Undefined(); 108 } 109 110 } // namespace WebCore 111