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
selectionStartAccessorGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)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
selectionStartAccessorSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)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
selectionEndAccessorGetter(v8::Local<v8::String> name,const v8::AccessorInfo & info)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
selectionEndAccessorSetter(v8::Local<v8::String> name,v8::Local<v8::Value> value,const v8::AccessorInfo & info)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
setSelectionRangeCallback(const v8::Arguments & args)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