codemirror-rails 4.2 → 4.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/.travis.yml +10 -0
- data/codemirror-rails.gemspec +3 -4
- data/gemfiles/Gemfile.rails-3.2 +5 -0
- data/gemfiles/Gemfile.rails-4.0 +4 -0
- data/gemfiles/Gemfile.rails-4.1 +4 -0
- data/lib/codemirror/rails/version.rb +2 -2
- data/test/{dummy → dummy-3.2.x}/README.rdoc +0 -0
- data/test/{dummy → dummy-3.2.x}/Rakefile +0 -0
- data/test/{dummy → dummy-3.2.x}/app/assets/javascripts/application.js +0 -0
- data/test/{dummy → dummy-3.2.x}/app/assets/stylesheets/application.css +0 -0
- data/test/{dummy → dummy-3.2.x}/app/controllers/application_controller.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/app/helpers/application_helper.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/app/mailers/.gitkeep +0 -0
- data/test/{dummy → dummy-3.2.x}/app/models/.gitkeep +0 -0
- data/test/{dummy → dummy-3.2.x}/app/views/layouts/application.html.erb +0 -0
- data/test/{dummy → dummy-3.2.x}/config.ru +0 -0
- data/test/{dummy → dummy-3.2.x}/config/application.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/boot.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/database.yml +0 -0
- data/test/{dummy → dummy-3.2.x}/config/environment.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/environments/development.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/environments/production.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/environments/test.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/backtrace_silencers.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/inflections.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/mime_types.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/secret_token.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/session_store.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/initializers/wrap_parameters.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/config/locales/en.yml +0 -0
- data/test/{dummy → dummy-3.2.x}/config/routes.rb +0 -0
- data/test/{dummy → dummy-3.2.x}/db/.gitkeep +0 -0
- data/test/{dummy → dummy-3.2.x}/lib/assets/.gitkeep +0 -0
- data/test/{dummy → dummy-3.2.x}/log/.gitkeep +0 -0
- data/test/{dummy → dummy-3.2.x}/public/404.html +0 -0
- data/test/{dummy → dummy-3.2.x}/public/422.html +0 -0
- data/test/{dummy → dummy-3.2.x}/public/500.html +0 -0
- data/test/{dummy → dummy-3.2.x}/public/favicon.ico +0 -0
- data/test/{dummy → dummy-3.2.x}/script/rails +0 -0
- data/test/dummy-4.0.x/README.rdoc +28 -0
- data/test/dummy-4.0.x/Rakefile +6 -0
- data/test/dummy-4.0.x/app/assets/images/.keep +0 -0
- data/test/dummy-4.0.x/app/assets/javascripts/application.js +13 -0
- data/test/dummy-4.0.x/app/assets/stylesheets/application.css +13 -0
- data/test/dummy-4.0.x/app/controllers/application_controller.rb +5 -0
- data/test/dummy-4.0.x/app/controllers/concerns/.keep +0 -0
- data/test/dummy-4.0.x/app/helpers/application_helper.rb +2 -0
- data/test/dummy-4.0.x/app/mailers/.keep +0 -0
- data/test/dummy-4.0.x/app/models/.keep +0 -0
- data/test/dummy-4.0.x/app/models/concerns/.keep +0 -0
- data/test/dummy-4.0.x/app/views/layouts/application.html.erb +14 -0
- data/test/dummy-4.0.x/bin/bundle +3 -0
- data/test/dummy-4.0.x/bin/rails +4 -0
- data/test/dummy-4.0.x/bin/rake +4 -0
- data/test/dummy-4.0.x/config.ru +4 -0
- data/test/dummy-4.0.x/config/application.rb +23 -0
- data/test/dummy-4.0.x/config/boot.rb +5 -0
- data/test/dummy-4.0.x/config/database.yml +25 -0
- data/test/dummy-4.0.x/config/environment.rb +5 -0
- data/test/dummy-4.0.x/config/environments/development.rb +29 -0
- data/test/dummy-4.0.x/config/environments/production.rb +80 -0
- data/test/dummy-4.0.x/config/environments/test.rb +36 -0
- data/test/dummy-4.0.x/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy-4.0.x/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy-4.0.x/config/initializers/inflections.rb +16 -0
- data/test/dummy-4.0.x/config/initializers/mime_types.rb +5 -0
- data/test/dummy-4.0.x/config/initializers/secret_token.rb +12 -0
- data/test/dummy-4.0.x/config/initializers/session_store.rb +3 -0
- data/test/dummy-4.0.x/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy-4.0.x/config/locales/en.yml +23 -0
- data/test/dummy-4.0.x/config/routes.rb +56 -0
- data/test/dummy-4.0.x/lib/assets/.keep +0 -0
- data/test/dummy-4.0.x/log/.keep +0 -0
- data/test/dummy-4.0.x/public/404.html +58 -0
- data/test/dummy-4.0.x/public/422.html +58 -0
- data/test/dummy-4.0.x/public/500.html +57 -0
- data/test/dummy-4.0.x/public/favicon.ico +0 -0
- data/test/dummy-4.1.x/README.rdoc +28 -0
- data/test/dummy-4.1.x/Rakefile +6 -0
- data/test/dummy-4.1.x/app/assets/images/.keep +0 -0
- data/test/dummy-4.1.x/app/assets/javascripts/application.js +13 -0
- data/test/dummy-4.1.x/app/assets/stylesheets/application.css +15 -0
- data/test/dummy-4.1.x/app/controllers/application_controller.rb +5 -0
- data/test/dummy-4.1.x/app/controllers/concerns/.keep +0 -0
- data/test/dummy-4.1.x/app/helpers/application_helper.rb +2 -0
- data/test/dummy-4.1.x/app/mailers/.keep +0 -0
- data/test/dummy-4.1.x/app/models/.keep +0 -0
- data/test/dummy-4.1.x/app/models/concerns/.keep +0 -0
- data/test/dummy-4.1.x/app/views/layouts/application.html.erb +14 -0
- data/test/dummy-4.1.x/bin/bundle +3 -0
- data/test/dummy-4.1.x/bin/rails +4 -0
- data/test/dummy-4.1.x/bin/rake +4 -0
- data/test/dummy-4.1.x/config.ru +4 -0
- data/test/dummy-4.1.x/config/application.rb +23 -0
- data/test/dummy-4.1.x/config/boot.rb +5 -0
- data/test/dummy-4.1.x/config/database.yml +25 -0
- data/test/dummy-4.1.x/config/environment.rb +5 -0
- data/test/dummy-4.1.x/config/environments/development.rb +37 -0
- data/test/dummy-4.1.x/config/environments/production.rb +82 -0
- data/test/dummy-4.1.x/config/environments/test.rb +39 -0
- data/test/dummy-4.1.x/config/initializers/assets.rb +8 -0
- data/test/dummy-4.1.x/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy-4.1.x/config/initializers/cookies_serializer.rb +3 -0
- data/test/dummy-4.1.x/config/initializers/filter_parameter_logging.rb +4 -0
- data/test/dummy-4.1.x/config/initializers/inflections.rb +16 -0
- data/test/dummy-4.1.x/config/initializers/mime_types.rb +4 -0
- data/test/dummy-4.1.x/config/initializers/session_store.rb +3 -0
- data/test/dummy-4.1.x/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy-4.1.x/config/locales/en.yml +23 -0
- data/test/dummy-4.1.x/config/routes.rb +56 -0
- data/test/dummy-4.1.x/config/secrets.yml +22 -0
- data/test/dummy-4.1.x/lib/assets/.keep +0 -0
- data/test/dummy-4.1.x/log/.keep +0 -0
- data/test/dummy-4.1.x/public/404.html +67 -0
- data/test/dummy-4.1.x/public/422.html +67 -0
- data/test/dummy-4.1.x/public/500.html +66 -0
- data/test/dummy-4.1.x/public/favicon.ico +0 -0
- data/test/integration/codemirror_rails_integration_test.rb +6 -4
- data/test/test_helper.rb +10 -7
- data/vendor/assets/javascripts/codemirror.js +131 -94
- data/vendor/assets/javascripts/codemirror/addons/dialog/dialog.js +8 -4
- data/vendor/assets/javascripts/codemirror/addons/display/rulers.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/edit/continuelist.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/fold/foldgutter.js +1 -1
- data/vendor/assets/javascripts/codemirror/addons/hint/xml-hint.js +7 -0
- data/vendor/assets/javascripts/codemirror/addons/selection/active-line.js +3 -1
- data/vendor/assets/javascripts/codemirror/addons/tern/tern.js +3 -2
- data/vendor/assets/javascripts/codemirror/keymaps/vim.js +301 -88
- data/vendor/assets/javascripts/codemirror/modes/clike.js +6 -6
- data/vendor/assets/javascripts/codemirror/modes/css.js +3 -3
- data/vendor/assets/javascripts/codemirror/modes/cypher.js +1 -1
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +29 -9
- data/vendor/assets/javascripts/codemirror/modes/python.js +3 -1
- data/vendor/assets/stylesheets/codemirror.css +29 -0
- data/vendor/assets/stylesheets/codemirror/addons/fold/foldgutter.css +0 -1
- data/vendor/assets/stylesheets/codemirror/themes/3024-day.css +4 -0
- data/vendor/assets/stylesheets/codemirror/themes/3024-night.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/ambiance.css +4 -1
- data/vendor/assets/stylesheets/codemirror/themes/base16-dark.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/base16-light.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/blackboard.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/cobalt.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/erlang-dark.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/lesser-dark.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/mbo.css +4 -2
- data/vendor/assets/stylesheets/codemirror/themes/midnight.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/monokai.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/neo.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/night.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-dark.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/paraiso-light.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/pastel-on-dark.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/rubyblue.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +3 -0
- data/vendor/assets/stylesheets/codemirror/themes/the-matrix.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/tomorrow-night-eighties.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/twilight.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/vibrant-ink.css +2 -0
- data/vendor/assets/stylesheets/codemirror/themes/xq-dark.css +2 -0
- metadata +135 -73
@@ -0,0 +1,22 @@
|
|
1
|
+
# Be sure to restart your server when you modify this file.
|
2
|
+
|
3
|
+
# Your secret key is used for verifying the integrity of signed cookies.
|
4
|
+
# If you change this key, all old signed cookies will become invalid!
|
5
|
+
|
6
|
+
# Make sure the secret is at least 30 characters and all random,
|
7
|
+
# no regular words or you'll be exposed to dictionary attacks.
|
8
|
+
# You can use `rake secret` to generate a secure secret key.
|
9
|
+
|
10
|
+
# Make sure the secrets in this file are kept private
|
11
|
+
# if you're sharing your code publicly.
|
12
|
+
|
13
|
+
development:
|
14
|
+
secret_key_base: f0e4e041743de2d6246bfe53493e444c3aa63a0b2bc348c660346f8a9fa36a38aae2b0d4afef263ca1cb597c2aa7d2cf660ef1bb813ac80f35602b99212aa59d
|
15
|
+
|
16
|
+
test:
|
17
|
+
secret_key_base: b7df7801dddcc9790549d4753167aea56483b33322e835eb629e88e6228229f55046a5261c2d22507cb84a5b7d05208115e721f3799cf1ff11b78ec98b654582
|
18
|
+
|
19
|
+
# Do not keep production secrets in the repository,
|
20
|
+
# instead read values from the environment.
|
21
|
+
production:
|
22
|
+
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
|
File without changes
|
File without changes
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/404.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
62
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
63
|
+
</div>
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
65
|
+
</div>
|
66
|
+
</body>
|
67
|
+
</html>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/422.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>The change you wanted was rejected.</h1>
|
62
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
63
|
+
</div>
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
65
|
+
</div>
|
66
|
+
</body>
|
67
|
+
</html>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/500.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>We're sorry, but something went wrong.</h1>
|
62
|
+
</div>
|
63
|
+
<p>If you are the application owner check the logs for more information.</p>
|
64
|
+
</div>
|
65
|
+
</body>
|
66
|
+
</html>
|
File without changes
|
@@ -2,12 +2,14 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
describe 'codemiror-rails integration' do
|
4
4
|
it 'provides codemirror.js on the asset pipeline' do
|
5
|
-
|
6
|
-
page.text.must_include 'window.CodeMirror'
|
5
|
+
asset_file('codemirror.js').must_include 'function CodeMirror'
|
7
6
|
end
|
8
7
|
|
9
8
|
it 'provides codemirror css on the asset pipeline' do
|
10
|
-
|
11
|
-
|
9
|
+
asset_file('codemirror.css').must_include '.CodeMirror'
|
10
|
+
end
|
11
|
+
|
12
|
+
def asset_file(name)
|
13
|
+
Dummy::Application.assets[name].to_s
|
12
14
|
end
|
13
15
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
ENV['RAILS_ENV'] = 'test'
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'rails/version'
|
4
|
+
case "#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}"
|
5
|
+
when '3.2'
|
6
|
+
require File.expand_path('../dummy-3.2.x/config/environment', __FILE__)
|
7
|
+
when '4.0'
|
8
|
+
require File.expand_path('../dummy-4.0.x/config/environment', __FILE__)
|
9
|
+
when '4.1'
|
10
|
+
require File.expand_path('../dummy-4.1.x/config/environment', __FILE__)
|
11
|
+
end
|
12
|
+
|
4
13
|
require 'rails/test_help'
|
5
14
|
require 'minitest/autorun'
|
6
|
-
require 'capybara/rails'
|
7
15
|
|
8
16
|
Rails.backtrace_cleaner.remove_silencers!
|
9
|
-
|
10
|
-
class IntegrationTest < MiniTest::Spec
|
11
|
-
include Capybara::DSL
|
12
|
-
register_spec_type(/integration$/, self)
|
13
|
-
end
|
@@ -25,11 +25,9 @@
|
|
25
25
|
var gecko = /gecko\/\d/i.test(navigator.userAgent);
|
26
26
|
// ie_uptoN means Internet Explorer version N or lower
|
27
27
|
var ie_upto10 = /MSIE \d/.test(navigator.userAgent);
|
28
|
-
var
|
29
|
-
var ie_upto8 = ie_upto10 && (document.documentMode == null || document.documentMode < 9);
|
30
|
-
var ie_upto9 = ie_upto10 && (document.documentMode == null || document.documentMode < 10);
|
31
|
-
var ie_11up = /Trident\/([7-9]|\d{2,})\./.test(navigator.userAgent);
|
28
|
+
var ie_11up = /Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);
|
32
29
|
var ie = ie_upto10 || ie_11up;
|
30
|
+
var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]);
|
33
31
|
var webkit = /WebKit\//.test(navigator.userAgent);
|
34
32
|
var qtwebkit = webkit && /Qt\/\d+\.\d+/.test(navigator.userAgent);
|
35
33
|
var chrome = /Chrome\//.test(navigator.userAgent);
|
@@ -50,7 +48,7 @@
|
|
50
48
|
if (presto_version && presto_version >= 15) { presto = false; webkit = true; }
|
51
49
|
// Some browsers use the wrong event properties to signal cmd/ctrl on OS X
|
52
50
|
var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));
|
53
|
-
var captureRightClick = gecko || (ie &&
|
51
|
+
var captureRightClick = gecko || (ie && ie_version >= 9);
|
54
52
|
|
55
53
|
// Optimize some code when these features are not used.
|
56
54
|
var sawReadOnlySpans = false, sawCollapsedSpans = false;
|
@@ -93,7 +91,7 @@
|
|
93
91
|
|
94
92
|
// Override magic textarea content restore that IE sometimes does
|
95
93
|
// on our hidden textarea on reload
|
96
|
-
if (
|
94
|
+
if (ie && ie_version < 11) setTimeout(bind(resetInput, this, true), 20);
|
97
95
|
|
98
96
|
registerEventHandlers(this);
|
99
97
|
ensureGlobalHandlers();
|
@@ -177,14 +175,14 @@
|
|
177
175
|
d.scrollbarFiller, d.gutterFiller, d.scroller], "CodeMirror");
|
178
176
|
|
179
177
|
// Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)
|
180
|
-
if (
|
178
|
+
if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }
|
181
179
|
// Needed to hide big blue blinking cursor on Mobile Safari
|
182
180
|
if (ios) input.style.width = "0px";
|
183
181
|
if (!webkit) d.scroller.draggable = true;
|
184
182
|
// Needed to handle Tab key in KHTML
|
185
183
|
if (khtml) { d.inputDiv.style.height = "1px"; d.inputDiv.style.position = "absolute"; }
|
186
184
|
// Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).
|
187
|
-
if (
|
185
|
+
if (ie && ie_version < 8) d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = "18px";
|
188
186
|
|
189
187
|
if (place.appendChild) place.appendChild(d.wrapper);
|
190
188
|
else place(d.wrapper);
|
@@ -394,6 +392,10 @@
|
|
394
392
|
|
395
393
|
// SCROLLBARS
|
396
394
|
|
395
|
+
function hScrollbarTakesSpace(cm) {
|
396
|
+
return cm.display.scroller.clientHeight - cm.display.wrapper.clientHeight < scrollerCutOff - 3;
|
397
|
+
}
|
398
|
+
|
397
399
|
// Prepare DOM reads needed to update the scrollbars. Done in one
|
398
400
|
// shot to minimize update/measure roundtrips.
|
399
401
|
function measureForScrollbars(cm) {
|
@@ -402,6 +404,7 @@
|
|
402
404
|
clientHeight: scroll.clientHeight,
|
403
405
|
barHeight: cm.display.scrollbarV.clientHeight,
|
404
406
|
scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth,
|
407
|
+
hScrollbarTakesSpace: hScrollbarTakesSpace(cm),
|
405
408
|
barWidth: cm.display.scrollbarH.clientWidth,
|
406
409
|
docHeight: Math.round(cm.doc.height + paddingVert(cm.display))
|
407
410
|
};
|
@@ -411,13 +414,17 @@
|
|
411
414
|
// content.
|
412
415
|
function updateScrollbars(cm, measure) {
|
413
416
|
if (!measure) measure = measureForScrollbars(cm);
|
414
|
-
var d = cm.display;
|
417
|
+
var d = cm.display, sWidth = scrollbarWidth(d.measure);
|
415
418
|
var scrollHeight = measure.docHeight + scrollerCutOff;
|
416
419
|
var needsH = measure.scrollWidth > measure.clientWidth;
|
420
|
+
if (needsH && measure.scrollWidth <= measure.clientWidth + 1 &&
|
421
|
+
sWidth > 0 && !measure.hScrollbarTakesSpace)
|
422
|
+
needsH = false; // (Issue #2562)
|
417
423
|
var needsV = scrollHeight > measure.clientHeight;
|
424
|
+
|
418
425
|
if (needsV) {
|
419
426
|
d.scrollbarV.style.display = "block";
|
420
|
-
d.scrollbarV.style.bottom = needsH ?
|
427
|
+
d.scrollbarV.style.bottom = needsH ? sWidth + "px" : "0";
|
421
428
|
// A bug in IE8 can cause this value to be negative, so guard it.
|
422
429
|
d.scrollbarV.firstChild.style.height =
|
423
430
|
Math.max(0, scrollHeight - measure.clientHeight + (measure.barHeight || d.scrollbarV.clientHeight)) + "px";
|
@@ -427,7 +434,7 @@
|
|
427
434
|
}
|
428
435
|
if (needsH) {
|
429
436
|
d.scrollbarH.style.display = "block";
|
430
|
-
d.scrollbarH.style.right = needsV ?
|
437
|
+
d.scrollbarH.style.right = needsV ? sWidth + "px" : "0";
|
431
438
|
d.scrollbarH.firstChild.style.width =
|
432
439
|
(measure.scrollWidth - measure.clientWidth + (measure.barWidth || d.scrollbarH.clientWidth)) + "px";
|
433
440
|
} else {
|
@@ -436,16 +443,16 @@
|
|
436
443
|
}
|
437
444
|
if (needsH && needsV) {
|
438
445
|
d.scrollbarFiller.style.display = "block";
|
439
|
-
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width =
|
446
|
+
d.scrollbarFiller.style.height = d.scrollbarFiller.style.width = sWidth + "px";
|
440
447
|
} else d.scrollbarFiller.style.display = "";
|
441
448
|
if (needsH && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {
|
442
449
|
d.gutterFiller.style.display = "block";
|
443
|
-
d.gutterFiller.style.height =
|
450
|
+
d.gutterFiller.style.height = sWidth + "px";
|
444
451
|
d.gutterFiller.style.width = d.gutters.offsetWidth + "px";
|
445
452
|
} else d.gutterFiller.style.display = "";
|
446
453
|
|
447
454
|
if (!cm.state.checkedOverlayScrollbar && measure.clientHeight > 0) {
|
448
|
-
if (
|
455
|
+
if (sWidth === 0) {
|
449
456
|
var w = mac && !mac_geMountainLion ? "12px" : "18px";
|
450
457
|
d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = w;
|
451
458
|
var barMouseDown = function(e) {
|
@@ -560,6 +567,10 @@
|
|
560
567
|
updateScrollbars(cm, barMeasure);
|
561
568
|
if (webkit && cm.options.lineWrapping)
|
562
569
|
checkForWebkitWidthBug(cm, barMeasure); // (Issue #2420)
|
570
|
+
if (webkit && barMeasure.scrollWidth > barMeasure.clientWidth &&
|
571
|
+
barMeasure.scrollWidth < barMeasure.clientWidth + 1 &&
|
572
|
+
!hScrollbarTakesSpace(cm))
|
573
|
+
updateScrollbars(cm); // (Issue #2562)
|
563
574
|
if (first && cm.options.lineWrapping && oldWidth != cm.display.scroller.clientWidth) {
|
564
575
|
forced = true;
|
565
576
|
continue;
|
@@ -597,6 +608,7 @@
|
|
597
608
|
|
598
609
|
// Bail out if the visible area is already rendered and nothing changed.
|
599
610
|
if (!forced && visible.from >= display.viewFrom && visible.to <= display.viewTo &&
|
611
|
+
(display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&
|
600
612
|
countDirtyView(cm) == 0)
|
601
613
|
return;
|
602
614
|
|
@@ -684,7 +696,7 @@
|
|
684
696
|
for (var i = 0; i < display.view.length; i++) {
|
685
697
|
var cur = display.view[i], height;
|
686
698
|
if (cur.hidden) continue;
|
687
|
-
if (
|
699
|
+
if (ie && ie_version < 8) {
|
688
700
|
var bot = cur.node.offsetTop + cur.node.offsetHeight;
|
689
701
|
height = bot - prevBottom;
|
690
702
|
prevBottom = bot;
|
@@ -793,7 +805,7 @@
|
|
793
805
|
if (lineView.text.parentNode)
|
794
806
|
lineView.text.parentNode.replaceChild(lineView.node, lineView.text);
|
795
807
|
lineView.node.appendChild(lineView.text);
|
796
|
-
if (
|
808
|
+
if (ie && ie_version < 8) lineView.node.style.zIndex = 2;
|
797
809
|
}
|
798
810
|
return lineView.node;
|
799
811
|
}
|
@@ -1277,7 +1289,7 @@
|
|
1277
1289
|
|
1278
1290
|
// Draws a cursor for the given range
|
1279
1291
|
function drawSelectionCursor(cm, range, output) {
|
1280
|
-
var pos = cursorCoords(cm, range.head, "div");
|
1292
|
+
var pos = cursorCoords(cm, range.head, "div", null, null, !cm.options.singleCursorHeightPerLine);
|
1281
1293
|
|
1282
1294
|
var cursor = output.appendChild(elt("div", "\u00a0", "CodeMirror-cursor"));
|
1283
1295
|
cursor.style.left = pos.left + "px";
|
@@ -1379,6 +1391,8 @@
|
|
1379
1391
|
display.blinker = setInterval(function() {
|
1380
1392
|
display.cursorDiv.style.visibility = (on = !on) ? "" : "hidden";
|
1381
1393
|
}, cm.options.cursorBlinkRate);
|
1394
|
+
else if (cm.options.cursorBlinkRate < 0)
|
1395
|
+
display.cursorDiv.style.visibility = "hidden";
|
1382
1396
|
}
|
1383
1397
|
|
1384
1398
|
// HIGHLIGHT WORKER
|
@@ -1401,9 +1415,11 @@
|
|
1401
1415
|
var oldStyles = line.styles;
|
1402
1416
|
var highlighted = highlightLine(cm, line, state, true);
|
1403
1417
|
line.styles = highlighted.styles;
|
1404
|
-
|
1405
|
-
|
1406
|
-
|
1418
|
+
var oldCls = line.styleClasses, newCls = highlighted.classes;
|
1419
|
+
if (newCls) line.styleClasses = newCls;
|
1420
|
+
else if (oldCls) line.styleClasses = null;
|
1421
|
+
var ischange = !oldStyles || oldStyles.length != line.styles.length ||
|
1422
|
+
oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);
|
1407
1423
|
for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];
|
1408
1424
|
if (ischange) regLineChange(cm, doc.frontier, "text");
|
1409
1425
|
line.stateAfter = copyState(doc.mode, state);
|
@@ -1559,7 +1575,7 @@
|
|
1559
1575
|
|
1560
1576
|
// Given a prepared measurement object, measures the position of an
|
1561
1577
|
// actual character (or fetches it from the cache).
|
1562
|
-
function measureCharPrepared(cm, prepared, ch, bias) {
|
1578
|
+
function measureCharPrepared(cm, prepared, ch, bias, varHeight) {
|
1563
1579
|
if (prepared.before) ch = -1;
|
1564
1580
|
var key = ch + (bias || ""), found;
|
1565
1581
|
if (prepared.cache.hasOwnProperty(key)) {
|
@@ -1574,7 +1590,9 @@
|
|
1574
1590
|
found = measureCharInner(cm, prepared, ch, bias);
|
1575
1591
|
if (!found.bogus) prepared.cache[key] = found;
|
1576
1592
|
}
|
1577
|
-
return {left: found.left, right: found.right,
|
1593
|
+
return {left: found.left, right: found.right,
|
1594
|
+
top: varHeight ? found.rtop : found.top,
|
1595
|
+
bottom: varHeight ? found.rbottom : found.bottom};
|
1578
1596
|
}
|
1579
1597
|
|
1580
1598
|
var nullRect = {left: 0, right: 0, top: 0, bottom: 0};
|
@@ -1620,7 +1638,7 @@
|
|
1620
1638
|
if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.
|
1621
1639
|
while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start;
|
1622
1640
|
while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end;
|
1623
|
-
if (
|
1641
|
+
if (ie && ie_version < 9 && start == 0 && end == mEnd - mStart) {
|
1624
1642
|
rect = node.parentNode.getBoundingClientRect();
|
1625
1643
|
} else if (ie && cm.options.lineWrapping) {
|
1626
1644
|
var rects = range(node, start, end).getClientRects();
|
@@ -1639,7 +1657,7 @@
|
|
1639
1657
|
else
|
1640
1658
|
rect = node.getBoundingClientRect();
|
1641
1659
|
}
|
1642
|
-
if (
|
1660
|
+
if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {
|
1643
1661
|
var rSpan = node.parentNode.getClientRects()[0];
|
1644
1662
|
if (rSpan)
|
1645
1663
|
rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};
|
@@ -1647,15 +1665,17 @@
|
|
1647
1665
|
rect = nullRect;
|
1648
1666
|
}
|
1649
1667
|
|
1650
|
-
var
|
1668
|
+
var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;
|
1669
|
+
var mid = (rtop + rbot) / 2;
|
1651
1670
|
var heights = prepared.view.measure.heights;
|
1652
1671
|
for (var i = 0; i < heights.length - 1; i++)
|
1653
|
-
if (
|
1654
|
-
top = i ? heights[i - 1] : 0
|
1672
|
+
if (mid < heights[i]) break;
|
1673
|
+
var top = i ? heights[i - 1] : 0, bot = heights[i];
|
1655
1674
|
var result = {left: (collapse == "right" ? rect.right : rect.left) - prepared.rect.left,
|
1656
1675
|
right: (collapse == "left" ? rect.left : rect.right) - prepared.rect.left,
|
1657
1676
|
top: top, bottom: bot};
|
1658
1677
|
if (!rect.left && !rect.right) result.bogus = true;
|
1678
|
+
if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }
|
1659
1679
|
return result;
|
1660
1680
|
}
|
1661
1681
|
|
@@ -1735,11 +1755,11 @@
|
|
1735
1755
|
// Returns a box for a given cursor position, which may have an
|
1736
1756
|
// 'other' property containing the position of the secondary cursor
|
1737
1757
|
// on a bidi boundary.
|
1738
|
-
function cursorCoords(cm, pos, context, lineObj, preparedMeasure) {
|
1758
|
+
function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {
|
1739
1759
|
lineObj = lineObj || getLine(cm.doc, pos.line);
|
1740
1760
|
if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);
|
1741
1761
|
function get(ch, right) {
|
1742
|
-
var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left");
|
1762
|
+
var m = measureCharPrepared(cm, preparedMeasure, ch, right ? "right" : "left", varHeight);
|
1743
1763
|
if (right) m.left = m.right; else m.right = m.left;
|
1744
1764
|
return intoCoordSystem(cm, lineObj, m, context);
|
1745
1765
|
}
|
@@ -2250,7 +2270,7 @@
|
|
2250
2270
|
// If nothing changed, bail.
|
2251
2271
|
if (text == prevInput && !cm.somethingSelected()) return false;
|
2252
2272
|
// Work around nonsensical selection resetting in IE9/10
|
2253
|
-
if (ie &&
|
2273
|
+
if (ie && ie_version >= 9 && cm.display.inputHasSelection === text) {
|
2254
2274
|
resetInput(cm);
|
2255
2275
|
return false;
|
2256
2276
|
}
|
@@ -2326,10 +2346,10 @@
|
|
2326
2346
|
var content = minimal ? "-" : selected || cm.getSelection();
|
2327
2347
|
cm.display.input.value = content;
|
2328
2348
|
if (cm.state.focused) selectInput(cm.display.input);
|
2329
|
-
if (ie &&
|
2349
|
+
if (ie && ie_version >= 9) cm.display.inputHasSelection = content;
|
2330
2350
|
} else if (!typing) {
|
2331
2351
|
cm.display.prevInput = cm.display.input.value = "";
|
2332
|
-
if (ie &&
|
2352
|
+
if (ie && ie_version >= 9) cm.display.inputHasSelection = null;
|
2333
2353
|
}
|
2334
2354
|
cm.display.inaccurateSelection = minimal;
|
2335
2355
|
}
|
@@ -2354,7 +2374,7 @@
|
|
2354
2374
|
var d = cm.display;
|
2355
2375
|
on(d.scroller, "mousedown", operation(cm, onMouseDown));
|
2356
2376
|
// Older IE's will not fire a second mousedown for a double click
|
2357
|
-
if (
|
2377
|
+
if (ie && ie_version < 11)
|
2358
2378
|
on(d.scroller, "dblclick", operation(cm, function(e) {
|
2359
2379
|
if (signalDOMEvent(cm, e)) return;
|
2360
2380
|
var pos = posFromMouse(cm, e);
|
@@ -2403,7 +2423,7 @@
|
|
2403
2423
|
|
2404
2424
|
on(d.input, "keyup", operation(cm, onKeyUp));
|
2405
2425
|
on(d.input, "input", function() {
|
2406
|
-
if (ie &&
|
2426
|
+
if (ie && ie_version >= 9 && cm.display.inputHasSelection) cm.display.inputHasSelection = null;
|
2407
2427
|
fastPoll(cm);
|
2408
2428
|
});
|
2409
2429
|
on(d.input, "keydown", operation(cm, onKeyDown));
|
@@ -2433,8 +2453,12 @@
|
|
2433
2453
|
if (webkit && !cm.state.fakedLastChar && !(new Date - cm.state.lastMiddleDown < 200)) {
|
2434
2454
|
var start = d.input.selectionStart, end = d.input.selectionEnd;
|
2435
2455
|
d.input.value += "$";
|
2436
|
-
|
2456
|
+
// The selection end needs to be set before the start, otherwise there
|
2457
|
+
// can be an intermediate non-empty selection between the two, which
|
2458
|
+
// can override the middle-click paste buffer on linux and cause the
|
2459
|
+
// wrong thing to get pasted.
|
2437
2460
|
d.input.selectionEnd = end;
|
2461
|
+
d.input.selectionStart = start;
|
2438
2462
|
cm.state.fakedLastChar = true;
|
2439
2463
|
}
|
2440
2464
|
cm.state.pasteIncoming = true;
|
@@ -2598,7 +2622,7 @@
|
|
2598
2622
|
extendSelection(cm.doc, start);
|
2599
2623
|
focusInput(cm);
|
2600
2624
|
// Work around unexplainable focus problem in IE9 (#2127)
|
2601
|
-
if (
|
2625
|
+
if (ie && ie_version == 9)
|
2602
2626
|
setTimeout(function() {document.body.focus(); focusInput(cm);}, 20);
|
2603
2627
|
}
|
2604
2628
|
});
|
@@ -2741,7 +2765,7 @@
|
|
2741
2765
|
}
|
2742
2766
|
|
2743
2767
|
var move = operation(cm, function(e) {
|
2744
|
-
if (
|
2768
|
+
if (!e_button(e)) done(e);
|
2745
2769
|
else extend(e);
|
2746
2770
|
});
|
2747
2771
|
var up = operation(cm, done);
|
@@ -3058,7 +3082,7 @@
|
|
3058
3082
|
ensureFocus(cm);
|
3059
3083
|
if (signalDOMEvent(cm, e)) return;
|
3060
3084
|
// IE does strange things with escape.
|
3061
|
-
if (
|
3085
|
+
if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false;
|
3062
3086
|
var code = e.keyCode;
|
3063
3087
|
cm.display.shift = code == 16 || e.shiftKey;
|
3064
3088
|
var handled = handleKeyBinding(cm, e);
|
@@ -3096,13 +3120,13 @@
|
|
3096
3120
|
|
3097
3121
|
function onKeyPress(e) {
|
3098
3122
|
var cm = this;
|
3099
|
-
if (signalDOMEvent(cm, e)) return;
|
3123
|
+
if (signalDOMEvent(cm, e) || e.ctrlKey || mac && e.metaKey) return;
|
3100
3124
|
var keyCode = e.keyCode, charCode = e.charCode;
|
3101
3125
|
if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}
|
3102
3126
|
if (((presto && (!e.which || e.which < 10)) || khtml) && handleKeyBinding(cm, e)) return;
|
3103
3127
|
var ch = String.fromCharCode(charCode == null ? keyCode : charCode);
|
3104
3128
|
if (handleCharBinding(cm, e, ch)) return;
|
3105
|
-
if (ie &&
|
3129
|
+
if (ie && ie_version >= 9) cm.display.inputHasSelection = null;
|
3106
3130
|
fastPoll(cm);
|
3107
3131
|
}
|
3108
3132
|
|
@@ -3184,12 +3208,12 @@
|
|
3184
3208
|
function rehide() {
|
3185
3209
|
display.inputDiv.style.position = "relative";
|
3186
3210
|
display.input.style.cssText = oldCSS;
|
3187
|
-
if (
|
3211
|
+
if (ie && ie_version < 9) display.scrollbarV.scrollTop = display.scroller.scrollTop = scrollPos;
|
3188
3212
|
slowPoll(cm);
|
3189
3213
|
|
3190
3214
|
// Try to detect the user choosing select-all
|
3191
3215
|
if (display.input.selectionStart != null) {
|
3192
|
-
if (!ie ||
|
3216
|
+
if (!ie || (ie && ie_version < 9)) prepareSelectAllHack();
|
3193
3217
|
var i = 0, poll = function() {
|
3194
3218
|
if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0)
|
3195
3219
|
operation(cm, commands.selectAll)(cm);
|
@@ -3200,7 +3224,7 @@
|
|
3200
3224
|
}
|
3201
3225
|
}
|
3202
3226
|
|
3203
|
-
if (ie &&
|
3227
|
+
if (ie && ie_version >= 9) prepareSelectAllHack();
|
3204
3228
|
if (captureRightClick) {
|
3205
3229
|
e_stop(e);
|
3206
3230
|
var mouseup = function() {
|
@@ -3711,12 +3735,12 @@
|
|
3711
3735
|
// Utility for applying a change to a line by handle or number,
|
3712
3736
|
// returning the number and optionally registering the line as
|
3713
3737
|
// changed.
|
3714
|
-
function changeLine(
|
3715
|
-
var no = handle, line = handle
|
3738
|
+
function changeLine(doc, handle, changeType, op) {
|
3739
|
+
var no = handle, line = handle;
|
3716
3740
|
if (typeof handle == "number") line = getLine(doc, clipLine(doc, handle));
|
3717
3741
|
else no = lineNo(handle);
|
3718
3742
|
if (no == null) return null;
|
3719
|
-
if (op(line, no)) regLineChange(cm, no, changeType);
|
3743
|
+
if (op(line, no) && doc.cm) regLineChange(doc.cm, no, changeType);
|
3720
3744
|
return line;
|
3721
3745
|
}
|
3722
3746
|
|
@@ -4031,7 +4055,7 @@
|
|
4031
4055
|
defaultCharWidth: function() { return charWidth(this.display); },
|
4032
4056
|
|
4033
4057
|
setGutterMarker: methodOp(function(line, gutterID, value) {
|
4034
|
-
return changeLine(this, line, "gutter", function(line) {
|
4058
|
+
return changeLine(this.doc, line, "gutter", function(line) {
|
4035
4059
|
var markers = line.gutterMarkers || (line.gutterMarkers = {});
|
4036
4060
|
markers[gutterID] = value;
|
4037
4061
|
if (!value && isEmpty(markers)) line.gutterMarkers = null;
|
@@ -4051,32 +4075,6 @@
|
|
4051
4075
|
});
|
4052
4076
|
}),
|
4053
4077
|
|
4054
|
-
addLineClass: methodOp(function(handle, where, cls) {
|
4055
|
-
return changeLine(this, handle, "class", function(line) {
|
4056
|
-
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
4057
|
-
if (!line[prop]) line[prop] = cls;
|
4058
|
-
else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false;
|
4059
|
-
else line[prop] += " " + cls;
|
4060
|
-
return true;
|
4061
|
-
});
|
4062
|
-
}),
|
4063
|
-
|
4064
|
-
removeLineClass: methodOp(function(handle, where, cls) {
|
4065
|
-
return changeLine(this, handle, "class", function(line) {
|
4066
|
-
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
4067
|
-
var cur = line[prop];
|
4068
|
-
if (!cur) return false;
|
4069
|
-
else if (cls == null) line[prop] = null;
|
4070
|
-
else {
|
4071
|
-
var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)"));
|
4072
|
-
if (!found) return false;
|
4073
|
-
var end = found.index + found[0].length;
|
4074
|
-
line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
|
4075
|
-
}
|
4076
|
-
return true;
|
4077
|
-
});
|
4078
|
-
}),
|
4079
|
-
|
4080
4078
|
addLineWidget: methodOp(function(handle, node, options) {
|
4081
4079
|
return addLineWidget(this, handle, node, options);
|
4082
4080
|
}),
|
@@ -4252,14 +4250,21 @@
|
|
4252
4250
|
}),
|
4253
4251
|
|
4254
4252
|
setSize: methodOp(function(width, height) {
|
4253
|
+
var cm = this;
|
4255
4254
|
function interpret(val) {
|
4256
4255
|
return typeof val == "number" || /^\d+$/.test(String(val)) ? val + "px" : val;
|
4257
4256
|
}
|
4258
|
-
if (width != null)
|
4259
|
-
if (height != null)
|
4260
|
-
if (
|
4261
|
-
|
4262
|
-
|
4257
|
+
if (width != null) cm.display.wrapper.style.width = interpret(width);
|
4258
|
+
if (height != null) cm.display.wrapper.style.height = interpret(height);
|
4259
|
+
if (cm.options.lineWrapping) clearLineMeasurementCache(this);
|
4260
|
+
var lineNo = cm.display.viewFrom;
|
4261
|
+
cm.doc.iter(lineNo, cm.display.viewTo, function(line) {
|
4262
|
+
if (line.widgets) for (var i = 0; i < line.widgets.length; i++)
|
4263
|
+
if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, "widget"); break; }
|
4264
|
+
++lineNo;
|
4265
|
+
});
|
4266
|
+
cm.curOp.forceUpdate = true;
|
4267
|
+
signal(cm, "refresh", this);
|
4263
4268
|
}),
|
4264
4269
|
|
4265
4270
|
operation: function(f){return runInOp(this, f);},
|
@@ -4379,7 +4384,8 @@
|
|
4379
4384
|
|
4380
4385
|
option("cursorBlinkRate", 530);
|
4381
4386
|
option("cursorScrollMargin", 0);
|
4382
|
-
option("cursorHeight", 1);
|
4387
|
+
option("cursorHeight", 1, updateSelection, true);
|
4388
|
+
option("singleCursorHeightPerLine", true, updateSelection, true);
|
4383
4389
|
option("workTime", 100);
|
4384
4390
|
option("workDelay", 100);
|
4385
4391
|
option("flattenSpans", true, resetModeState, true);
|
@@ -4569,7 +4575,8 @@
|
|
4569
4575
|
goDocStart: function(cm) {cm.extendSelection(Pos(cm.firstLine(), 0));},
|
4570
4576
|
goDocEnd: function(cm) {cm.extendSelection(Pos(cm.lastLine()));},
|
4571
4577
|
goLineStart: function(cm) {
|
4572
|
-
cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },
|
4578
|
+
cm.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },
|
4579
|
+
{origin: "+move", bias: 1});
|
4573
4580
|
},
|
4574
4581
|
goLineStartSmart: function(cm) {
|
4575
4582
|
cm.extendSelectionsBy(function(range) {
|
@@ -4582,10 +4589,11 @@
|
|
4582
4589
|
return Pos(start.line, inWS ? 0 : firstNonWS);
|
4583
4590
|
}
|
4584
4591
|
return start;
|
4585
|
-
},
|
4592
|
+
}, {origin: "+move", bias: 1});
|
4586
4593
|
},
|
4587
4594
|
goLineEnd: function(cm) {
|
4588
|
-
cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },
|
4595
|
+
cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },
|
4596
|
+
{origin: "+move", bias: -1});
|
4589
4597
|
},
|
4590
4598
|
goLineRight: function(cm) {
|
4591
4599
|
cm.extendSelectionsBy(function(range) {
|
@@ -5417,8 +5425,8 @@
|
|
5417
5425
|
var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);
|
5418
5426
|
var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);
|
5419
5427
|
if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) continue;
|
5420
|
-
if (fromCmp <= 0 && (cmp(found.to, from) ||
|
5421
|
-
fromCmp >= 0 && (cmp(found.from, to) ||
|
5428
|
+
if (fromCmp <= 0 && (cmp(found.to, from) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) ||
|
5429
|
+
fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight)))
|
5422
5430
|
return true;
|
5423
5431
|
}
|
5424
5432
|
}
|
@@ -5536,15 +5544,19 @@
|
|
5536
5544
|
|
5537
5545
|
function widgetHeight(widget) {
|
5538
5546
|
if (widget.height != null) return widget.height;
|
5539
|
-
if (!contains(document.body, widget.node))
|
5540
|
-
|
5547
|
+
if (!contains(document.body, widget.node)) {
|
5548
|
+
var parentStyle = "position: relative;";
|
5549
|
+
if (widget.coverGutter)
|
5550
|
+
parentStyle += "margin-left: -" + widget.cm.getGutterElement().offsetWidth + "px;";
|
5551
|
+
removeChildrenAndAdd(widget.cm.display.measure, elt("div", [widget.node], null, parentStyle));
|
5552
|
+
}
|
5541
5553
|
return widget.height = widget.node.offsetHeight;
|
5542
5554
|
}
|
5543
5555
|
|
5544
5556
|
function addLineWidget(cm, handle, node, options) {
|
5545
5557
|
var widget = new LineWidget(cm, node, options);
|
5546
5558
|
if (widget.noHScroll) cm.display.alignWidgets = true;
|
5547
|
-
changeLine(cm, handle, "widget", function(line) {
|
5559
|
+
changeLine(cm.doc, handle, "widget", function(line) {
|
5548
5560
|
var widgets = line.widgets || (line.widgets = []);
|
5549
5561
|
if (widget.insertAt == null) widgets.push(widget);
|
5550
5562
|
else widgets.splice(Math.min(widgets.length - 1, Math.max(0, widget.insertAt)), 0, widget);
|
@@ -5800,7 +5812,7 @@
|
|
5800
5812
|
builder.col += text.length;
|
5801
5813
|
var content = document.createTextNode(text);
|
5802
5814
|
builder.map.push(builder.pos, builder.pos + text.length, content);
|
5803
|
-
if (
|
5815
|
+
if (ie && ie_version < 9) mustWrap = true;
|
5804
5816
|
builder.pos += text.length;
|
5805
5817
|
} else {
|
5806
5818
|
var content = document.createDocumentFragment(), pos = 0;
|
@@ -5810,7 +5822,7 @@
|
|
5810
5822
|
var skipped = m ? m.index - pos : text.length - pos;
|
5811
5823
|
if (skipped) {
|
5812
5824
|
var txt = document.createTextNode(text.slice(pos, pos + skipped));
|
5813
|
-
if (
|
5825
|
+
if (ie && ie_version < 9) content.appendChild(elt("span", [txt]));
|
5814
5826
|
else content.appendChild(txt);
|
5815
5827
|
builder.map.push(builder.pos, builder.pos + skipped, txt);
|
5816
5828
|
builder.col += skipped;
|
@@ -5824,7 +5836,7 @@
|
|
5824
5836
|
builder.col += tabWidth;
|
5825
5837
|
} else {
|
5826
5838
|
var txt = builder.cm.options.specialCharPlaceholder(m[0]);
|
5827
|
-
if (
|
5839
|
+
if (ie && ie_version < 9) content.appendChild(elt("span", [txt]));
|
5828
5840
|
else content.appendChild(txt);
|
5829
5841
|
builder.col += 1;
|
5830
5842
|
}
|
@@ -6349,6 +6361,31 @@
|
|
6349
6361
|
hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);
|
6350
6362
|
},
|
6351
6363
|
|
6364
|
+
addLineClass: docMethodOp(function(handle, where, cls) {
|
6365
|
+
return changeLine(this, handle, "class", function(line) {
|
6366
|
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
6367
|
+
if (!line[prop]) line[prop] = cls;
|
6368
|
+
else if (new RegExp("(?:^|\\s)" + cls + "(?:$|\\s)").test(line[prop])) return false;
|
6369
|
+
else line[prop] += " " + cls;
|
6370
|
+
return true;
|
6371
|
+
});
|
6372
|
+
}),
|
6373
|
+
removeLineClass: docMethodOp(function(handle, where, cls) {
|
6374
|
+
return changeLine(this, handle, "class", function(line) {
|
6375
|
+
var prop = where == "text" ? "textClass" : where == "background" ? "bgClass" : "wrapClass";
|
6376
|
+
var cur = line[prop];
|
6377
|
+
if (!cur) return false;
|
6378
|
+
else if (cls == null) line[prop] = null;
|
6379
|
+
else {
|
6380
|
+
var found = cur.match(new RegExp("(?:^|\\s+)" + cls + "(?:$|\\s+)"));
|
6381
|
+
if (!found) return false;
|
6382
|
+
var end = found.index + found[0].length;
|
6383
|
+
line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? "" : " ") + cur.slice(end) || null;
|
6384
|
+
}
|
6385
|
+
return true;
|
6386
|
+
});
|
6387
|
+
}),
|
6388
|
+
|
6352
6389
|
markText: function(from, to, options) {
|
6353
6390
|
return markText(this, clipPos(this, from), clipPos(this, to), options, "range");
|
6354
6391
|
},
|
@@ -7156,7 +7193,7 @@
|
|
7156
7193
|
function activeElt() { return document.activeElement; }
|
7157
7194
|
// Older versions of IE throws unspecified error when touching
|
7158
7195
|
// document.activeElement in some cases (during loading, in iframe)
|
7159
|
-
if (
|
7196
|
+
if (ie && ie_version < 11) activeElt = function() {
|
7160
7197
|
try { return document.activeElement; }
|
7161
7198
|
catch(e) { return document.body; }
|
7162
7199
|
};
|
@@ -7219,7 +7256,7 @@
|
|
7219
7256
|
var dragAndDrop = function() {
|
7220
7257
|
// There is *some* kind of drag-and-drop support in IE6-8, but I
|
7221
7258
|
// couldn't get it to work yet.
|
7222
|
-
if (
|
7259
|
+
if (ie && ie_version < 9) return false;
|
7223
7260
|
var div = elt('div');
|
7224
7261
|
return "draggable" in div || "dragDrop" in div;
|
7225
7262
|
}();
|
@@ -7240,7 +7277,7 @@
|
|
7240
7277
|
var test = elt("span", "\u200b");
|
7241
7278
|
removeChildrenAndAdd(measure, elt("span", [test, document.createTextNode("x")]));
|
7242
7279
|
if (measure.firstChild.offsetHeight != 0)
|
7243
|
-
zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !
|
7280
|
+
zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8);
|
7244
7281
|
}
|
7245
7282
|
if (zwspSupported) return elt("span", "\u200b");
|
7246
7283
|
else return elt("span", "\u00a0", null, "display: inline-block; width: 1px; margin-right: -1px");
|
@@ -7595,7 +7632,7 @@
|
|
7595
7632
|
|
7596
7633
|
// THE END
|
7597
7634
|
|
7598
|
-
CodeMirror.version = "4.
|
7635
|
+
CodeMirror.version = "4.3.0";
|
7599
7636
|
|
7600
7637
|
return CodeMirror;
|
7601
7638
|
});
|