Skip to content

Commit 0389e98

Browse files
committed
Merge pull request #24 from rogerleite/master
Make javascript key_code configurable
2 parents 7b5d5c4 + 9388969 commit 0389e98

9 files changed

Lines changed: 69 additions & 7 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ graph.png
66
doc/*
77
coverage/*
88
*.rbc
9+
tags

Readme.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ some configuration file):
4141
Rack::Webconsole.inject_jquery = true
4242
```
4343

44+
You can also change the javascript key_code used to start webconsole:
45+
46+
```ruby
47+
# ` = 96 (default), ^ = 94, ç = 231 ... etc.
48+
Rack::Webconsole.key_code = "231"
49+
```
50+
4451
##Usage with Rails 3
4552

4653
If you are using Rails 3, you have no further steps to do. It works! To give

lib/rack/webconsole.rb

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,36 @@ module Rack
2424
# variables and giving a true IRB-esque experience.
2525
#
2626
class Webconsole
27-
@@inject_jquery = false
27+
@@config = {:inject_jquery => false, :key_code => "96"}
2828

2929
class << self
3030
# Returns whether the Asset injecter must inject JQuery or not.
3131
#
3232
# @return [Boolean] whether to inject JQuery or not.
3333
def inject_jquery
34-
@@inject_jquery
34+
@@config[:inject_jquery]
3535
end
3636

3737
# Sets whether the Asset injecter must inject JQuery or not.
3838
#
3939
# @param [Boolean] value whether to inject JQuery or not.
4040
def inject_jquery=(value)
41-
@@inject_jquery = value
41+
@@config[:inject_jquery] = value
42+
end
43+
44+
# Returns key code used to start web console.
45+
#
46+
# @return [String] key code used at keypress event to start web console.
47+
def key_code
48+
@@config[:key_code]
49+
end
50+
51+
# Sets key code used to start web console.
52+
#
53+
# @param [String] value key code used at keypress event to start web console.
54+
def key_code=(value)
55+
value = value.to_s unless value.is_a?(String)
56+
@@config[:key_code] = value
4257
end
4358
end
4459

lib/rack/webconsole/asset_helpers.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ def js_code
4444
'</script>'
4545
end
4646

47+
def render(text, variables = {})
48+
result_text = text.dup
49+
variables.each_pair do |variable, value|
50+
result_text.gsub!("$#{variable}", value)
51+
end
52+
result_text
53+
end
54+
4755
private
4856

4957
def asset(file)

lib/rack/webconsole/assets.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def call(env)
5656
def code
5757
html_code <<
5858
css_code <<
59-
js_code.gsub('TOKEN', Webconsole::Repl.token)
59+
render(js_code, :TOKEN => Webconsole::Repl.token, :KEY_CODE => Webconsole.key_code)
6060
end
6161

6262
private

public/webconsole.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
url: '/webconsole',
2020
type: 'POST',
2121
dataType: 'json',
22-
data: ({query: query, token: "TOKEN"}),
22+
data: ({query: query, token: "$TOKEN"}),
2323
success: function (data) {
2424
var q = "<div class='query'>" + escapeHTML(">> " + query) + "</div>";
2525
var r = "<div class='result'>" + escapeHTML("=> " + data.result) + "</div>";
@@ -35,7 +35,7 @@
3535

3636
$(document).ready(function() {
3737
$(this).keypress(function(event) {
38-
if (event.which == 96) {
38+
if (event.which == $KEY_CODE) {
3939
$("#rack-webconsole").slideToggle('fast', function() {
4040
if ($(this).is(':visible')) {
4141
$("#rack-webconsole form input").focus();

spec/rack/webconsole/asset_helpers_spec.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,17 @@ module Rack
4040
end
4141
end
4242

43+
describe '#render' do
44+
it 'knows how to replace $ vars' do
45+
asset_class = AssetClass.new
46+
47+
text = "test $test test $test"
48+
asset_class.render(text, :test => "123").must_equal("test 123 test 123")
49+
50+
text = "test $var1 test $var2"
51+
asset_class.render(text, :var1 => "123", :var2 => "321").must_equal("test 123 test 321")
52+
end
53+
end
54+
4355
end
4456
end

spec/rack/webconsole/assets_spec.rb

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,20 @@ module Rack
88
it 'initializes with an app' do
99
@app = stub
1010
@assets = Webconsole::Assets.new(@app)
11-
1211
@assets.instance_variable_get(:@app).must_equal @app
1312
end
1413

14+
it '#code should inject token and key_code' do
15+
Webconsole::Repl.stubs(:token).returns('fake_generated_token')
16+
Webconsole.key_code = "96"
17+
18+
@assets = Webconsole::Assets.new(nil)
19+
assets_code = @assets.code
20+
21+
assets_code.must_match /fake_generated_token/
22+
assets_code.must_match /event\.which == 96/
23+
end
24+
1525
describe "#call" do
1626

1727
describe 'when the call is not appropriate to inject the view code' do

spec/rack/webconsole_spec.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,15 @@ module Rack
4242
Webconsole.inject_jquery = true
4343
Webconsole.inject_jquery.must_equal true
4444
end
45+
it '#key_code accessors' do
46+
Webconsole.key_code.must_equal "96"
47+
Webconsole.key_code = "97"
48+
Webconsole.key_code.must_equal "97"
49+
end
50+
it '#key_code setter cast parameter type' do
51+
Webconsole.key_code = 96
52+
Webconsole.key_code.must_equal "96"
53+
end
4554
end
4655
end
4756
end

0 commit comments

Comments
 (0)