• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Copyright (C) 2010 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/**
32 * @constructor
33 * @extends {WebInspector.DialogDelegate}
34 */
35WebInspector.GoToLineDialog = function(view)
36{
37    WebInspector.DialogDelegate.call(this);
38
39    this.element = document.createElement("div");
40    this.element.className = "go-to-line-dialog";
41
42    this.element.createChild("label").textContent = WebInspector.UIString("Go to line: ");
43
44    this._input = this.element.createChild("input");
45    this._input.setAttribute("type", "text");
46    this._input.setAttribute("size", 6);
47
48    this._goButton = this.element.createChild("button");
49    this._goButton.textContent = WebInspector.UIString("Go");
50    this._goButton.addEventListener("click", this._onGoClick.bind(this), false);
51
52    this._view = view;
53}
54
55/**
56 * @param {!WebInspector.Panel} panel
57 * @param {function():?WebInspector.View} viewGetter
58 */
59WebInspector.GoToLineDialog.install = function(panel, viewGetter)
60{
61    var goToLineShortcut = WebInspector.GoToLineDialog.createShortcut();
62    panel.registerShortcuts([goToLineShortcut], WebInspector.GoToLineDialog._show.bind(null, viewGetter));
63}
64
65/**
66 * @param {function():?WebInspector.View} viewGetter
67 * @param {?Event=} event
68 * @return {boolean}
69 */
70WebInspector.GoToLineDialog._show = function(viewGetter, event)
71{
72    var sourceView = viewGetter();
73    if (!sourceView || !sourceView.canHighlightPosition())
74        return false;
75    WebInspector.Dialog.show(sourceView.element, new WebInspector.GoToLineDialog(sourceView));
76    return true;
77}
78
79/**
80 * @return {!WebInspector.KeyboardShortcut.Descriptor}
81 */
82WebInspector.GoToLineDialog.createShortcut = function()
83{
84    var isMac = WebInspector.isMac();
85    var shortcut;
86    return WebInspector.KeyboardShortcut.makeDescriptor("g", WebInspector.KeyboardShortcut.Modifiers.Ctrl);
87}
88
89WebInspector.GoToLineDialog.prototype = {
90    focus: function()
91    {
92        WebInspector.setCurrentFocusElement(this._input);
93        this._input.select();
94    },
95
96    _onGoClick: function()
97    {
98        this._applyLineNumber();
99        WebInspector.Dialog.hide();
100    },
101
102    _applyLineNumber: function()
103    {
104        var value = this._input.value;
105        var lineNumber = parseInt(value, 10) - 1;
106        if (!isNaN(lineNumber) && lineNumber >= 0)
107            this._view.highlightPosition(lineNumber);
108    },
109
110    onEnter: function()
111    {
112        this._applyLineNumber();
113    },
114
115    __proto__: WebInspector.DialogDelegate.prototype
116}
117