rack-mini-profiler 0.1.27 → 0.9.0.pre
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rack-mini-profiler might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/{Ruby/CHANGELOG → CHANGELOG} +33 -0
- data/{Ruby/README.md → README.md} +51 -27
- data/{Ruby/lib → lib}/html/includes.css +0 -0
- data/{Ruby/lib → lib}/html/includes.js +90 -75
- data/{Ruby/lib → lib}/html/includes.less +0 -0
- data/{Ruby/lib → lib}/html/includes.tmpl +3 -1
- data/{Ruby/lib → lib}/html/jquery.1.7.1.js +0 -0
- data/{Ruby/lib → lib}/html/jquery.tmpl.js +0 -0
- data/{Ruby/lib → lib}/html/list.css +2 -2
- data/{Ruby/lib → lib}/html/list.js +1 -1
- data/{Ruby/lib → lib}/html/list.tmpl +2 -2
- data/lib/html/profile_handler.js +1 -0
- data/{Ruby/lib → lib}/html/share.html +2 -2
- data/{Ruby/lib → lib}/mini_profiler/client_settings.rb +11 -11
- data/{Ruby/lib → lib}/mini_profiler/client_timer_struct.rb +0 -0
- data/{Ruby/lib → lib}/mini_profiler/config.rb +18 -11
- data/{Ruby/lib → lib}/mini_profiler/context.rb +1 -1
- data/{Ruby/lib → lib}/mini_profiler/custom_timer_struct.rb +0 -0
- data/lib/mini_profiler/gc_profiler.rb +181 -0
- data/{Ruby/lib → lib}/mini_profiler/page_timer_struct.rb +4 -4
- data/{Ruby/lib → lib}/mini_profiler/profiler.rb +163 -141
- data/{Ruby/lib → lib}/mini_profiler/profiling_methods.rb +31 -11
- data/{Ruby/lib → lib}/mini_profiler/request_timer_struct.rb +5 -5
- data/{Ruby/lib → lib}/mini_profiler/sql_timer_struct.rb +0 -0
- data/{Ruby/lib → lib}/mini_profiler/storage/abstract_store.rb +4 -3
- data/{Ruby/lib → lib}/mini_profiler/storage/file_store.rb +0 -0
- data/{Ruby/lib → lib}/mini_profiler/storage/memcache_store.rb +0 -0
- data/{Ruby/lib → lib}/mini_profiler/storage/memory_store.rb +0 -0
- data/{Ruby/lib → lib}/mini_profiler/storage/redis_store.rb +3 -3
- data/{Ruby/lib → lib}/mini_profiler/timer_struct.rb +0 -0
- data/lib/mini_profiler/version.rb +5 -0
- data/{Ruby/lib → lib}/mini_profiler_rails/railtie.rb +6 -2
- data/{Ruby/lib → lib}/patches/net_patches.rb +0 -0
- data/{Ruby/lib → lib}/patches/sql_patches.rb +6 -1
- data/{Ruby/lib → lib}/rack-mini-profiler.rb +0 -0
- data/rack-mini-profiler.gemspec +6 -5
- metadata +45 -46
- data/Ruby/lib/html/flamegraph.html +0 -351
- data/Ruby/lib/html/profile_handler.js +0 -1
- data/Ruby/lib/mini_profiler/flame_graph.rb +0 -54
- data/Ruby/lib/mini_profiler/gc_profiler.rb +0 -107
- data/Ruby/lib/mini_profiler/version.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b9507bf24483a76c136680a0bbcc6e4a4363471
|
4
|
+
data.tar.gz: 9e99da2d17e0f35e76673adb60f3fcf72324340b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9eb3a4c161db91bff011f00bd5ed425ffe29d567dece26006ebc0aa08135b5177d495c4d222122254aa024cd66fa3b4edcb79a2383dda5eabac43b6a26a41d8f
|
7
|
+
data.tar.gz: 7115cedbc00272f16e3e3b2321a8c40b7c1ed4e21338d8ab0c1111470c1e87074decd7eae21aed95cde07eea2563f31241f4a8bc31e85c1bc43a925ae23d2311
|
@@ -137,5 +137,38 @@
|
|
137
137
|
* Add Rack::MiniProfiler.config.backtrace_threshold_ms
|
138
138
|
* jQuery 2.0 support
|
139
139
|
|
140
|
+
18-July-2013
|
141
|
+
* 1.28
|
142
|
+
* diagnostics in abstract storage was raising not implemented killing
|
143
|
+
?pp=env and others
|
144
|
+
* SOLR xml unescaped by mistake
|
145
|
+
|
146
|
+
20-August-2013
|
147
|
+
* 1.29
|
148
|
+
* Bugfix: SOLR patching had an incorrect monkey patch
|
149
|
+
* Implemented exception tracing using TracePoint see pp=trace-exceptions
|
150
|
+
|
151
|
+
30-August-2013
|
152
|
+
|
153
|
+
* 1.30
|
154
|
+
* Feature: Added Rack::MiniProfiler.counter_method(klass,name) for injecting counters
|
155
|
+
* Bug: Counters were not shifting the table correctly
|
156
|
+
|
157
|
+
3-September-2013
|
158
|
+
|
159
|
+
* Ripped out flamegraph so it can be isolated into a gem
|
160
|
+
* Flamegraph now has much increased fidelity
|
161
|
+
* Ripped out pp=sample it just was never really used
|
162
|
+
|
163
|
+
17-September-2013 - Ross Wilson
|
164
|
+
* Instead of supressing all "/assets/" requests we now check the configured
|
165
|
+
config.assets.prefix path since developers can rename the path to serve Asset Pipeline
|
166
|
+
files from
|
167
|
+
|
168
|
+
12-December-2013 - Sam Saffron
|
169
|
+
* Version 0.9.0.pre (bumped up to reflect the stability of the project)
|
170
|
+
* Improved reports for pp=profile-gc
|
171
|
+
* pp=flamegraph&flamegraph_sample_rate=1 , allow you to specify sampling rates
|
172
|
+
|
140
173
|
|
141
174
|
|
@@ -1,33 +1,39 @@
|
|
1
1
|
# rack-mini-profiler
|
2
2
|
|
3
|
+
[![Code Climate](https://codeclimate.com/github/MiniProfiler/rack-mini-profiler.png)](https://codeclimate.com/github/MiniProfiler/rack-mini-profiler) [![Build Status](https://travis-ci.org/MiniProfiler/rack-mini-profiler.png)](https://travis-ci.org/MiniProfiler/rack-mini-profiler)
|
4
|
+
|
3
5
|
Middleware that displays speed badge for every html page. Designed to work both in production and in development.
|
4
6
|
|
5
|
-
##
|
7
|
+
## rack-mini-profiler needs your help
|
8
|
+
|
9
|
+
We have decided to restructure our repository so there is a central UI repo and the various language implementation have their own.
|
10
|
+
|
11
|
+
The new home for rack-mini-profiler is https://github.com/MiniProfiler/rack-mini-profiler
|
12
|
+
|
13
|
+
**WE NEED HELP.**
|
14
|
+
|
15
|
+
- Setting up a build that reuses https://github.com/MiniProfiler/ui
|
16
|
+
- Migrating the internal data structures [per the spec](https://github.com/MiniProfiler/ui)
|
17
|
+
- Cleaning up the [horrendous class structure that is using strings as keys and crazy non-objects](https://github.com/MiniProfiler/rack-mini-profiler/blob/master/lib/mini_profiler/sql_timer_struct.rb#L36-L44)
|
18
|
+
- Add travis-ci testing at least MRI 1.9.3, JRuby and MRI 2.0
|
19
|
+
|
20
|
+
If you feel like taking on any of this start an issue and update us on your progress.
|
21
|
+
|
22
|
+
## Installation
|
6
23
|
|
7
24
|
Install/add to Gemfile
|
8
25
|
|
9
26
|
```ruby
|
10
27
|
gem 'rack-mini-profiler'
|
11
28
|
```
|
12
|
-
Using Rails:
|
13
29
|
|
14
|
-
|
30
|
+
NOTE: Be sure to require rack_mini_profiler below the `pg` and `mysql` gems in your Gemfile. rack_mini_profiler will identify these gems if they are loaded to insert instrumentation. If included too early no SQL will show up.
|
15
31
|
|
16
|
-
|
17
|
-
|
18
|
-
Using Rails:
|
19
|
-
|
20
|
-
```ruby
|
21
|
-
# A hook in your ApplicationController
|
22
|
-
def authorize
|
23
|
-
if current_user.is_admin?
|
24
|
-
Rack::MiniProfiler.authorize_request
|
25
|
-
end
|
26
|
-
end
|
27
|
-
````
|
32
|
+
#### Rails
|
28
33
|
|
34
|
+
All you have to do is include the Gem and you're good to go in development. See notes below for use in production.
|
29
35
|
|
30
|
-
|
36
|
+
#### Rack Builder
|
31
37
|
|
32
38
|
```ruby
|
33
39
|
require 'rack-mini-profiler'
|
@@ -38,7 +44,7 @@ builder = Rack::Builder.new do
|
|
38
44
|
end
|
39
45
|
```
|
40
46
|
|
41
|
-
|
47
|
+
#### Sinatra
|
42
48
|
|
43
49
|
```ruby
|
44
50
|
require 'rack-mini-profiler'
|
@@ -47,6 +53,19 @@ class MyApp < Sinatra::Base
|
|
47
53
|
end
|
48
54
|
```
|
49
55
|
|
56
|
+
## Using rack-mini-profiler in your app
|
57
|
+
|
58
|
+
rack-mini-profiler is designed with production profiling in mind. To enable that just run `Rack::MiniProfiler.authorize_request` once you know a request is allowed to profile.
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
# A hook in your ApplicationController
|
62
|
+
def authorize
|
63
|
+
if current_user.is_admin?
|
64
|
+
Rack::MiniProfiler.authorize_request
|
65
|
+
end
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
50
69
|
## Database profiling
|
51
70
|
|
52
71
|
Currently supports Mysql2, Postgres, and Mongoid3 (with fallback support to ActiveRecord)
|
@@ -61,7 +80,7 @@ There are 4 storage options: `MemoryStore`, `RedisStore`, `MemcacheStore`, and `
|
|
61
80
|
|
62
81
|
To change the default you can create a file in `config/initializers/mini_profiler.rb`
|
63
82
|
|
64
|
-
```ruby
|
83
|
+
```ruby
|
65
84
|
# set MemoryStore
|
66
85
|
Rack::MiniProfiler.config.storage = Rack::MiniProfiler::MemoryStore
|
67
86
|
|
@@ -73,24 +92,24 @@ if Rails.env.production?
|
|
73
92
|
end
|
74
93
|
```
|
75
94
|
|
76
|
-
MemoryStore stores results in a processes heap - something that does not work well in a multi process environment.
|
77
|
-
FileStore stores results in the file system - something that may not work well in a multi machine environment.
|
95
|
+
MemoryStore stores results in a processes heap - something that does not work well in a multi process environment.
|
96
|
+
FileStore stores results in the file system - something that may not work well in a multi machine environment.
|
78
97
|
RedisStore/MemcacheStore work in multi process and multi machine environments (RedisStore only saves results for up to 24 hours so it won't continue to fill up Redis).
|
79
98
|
|
80
|
-
Additionally you may implement an AbstractStore for your own provider.
|
99
|
+
Additionally you may implement an AbstractStore for your own provider.
|
81
100
|
|
82
101
|
## User result segregation
|
83
102
|
|
84
|
-
MiniProfiler will attempt to keep all user results isolated, out-of-the-box the user provider uses the ip address:
|
103
|
+
MiniProfiler will attempt to keep all user results isolated, out-of-the-box the user provider uses the ip address:
|
85
104
|
|
86
105
|
```ruby
|
87
|
-
Rack::MiniProfiler.config.user_provider = Proc.new{|env| Rack::Request.new(env).ip}
|
106
|
+
Rack::MiniProfiler.config.user_provider = Proc.new{|env| Rack::Request.new(env).ip}
|
88
107
|
```
|
89
108
|
|
90
|
-
You can override (something that is very important in a multi-machine production setup):
|
109
|
+
You can override (something that is very important in a multi-machine production setup):
|
91
110
|
|
92
111
|
```ruby
|
93
|
-
Rack::MiniProfiler.config.user_provider = Proc.new{ |env| CurrentUser.get(env) }
|
112
|
+
Rack::MiniProfiler.config.user_provider = Proc.new{ |env| CurrentUser.get(env) }
|
94
113
|
```
|
95
114
|
|
96
115
|
The string this function returns should be unique for each user on the system (for anonymous you may need to fall back to ip address)
|
@@ -113,9 +132,13 @@ You can set configuration options using the configuration accessor on Rack::Mini
|
|
113
132
|
Rack::MiniProfiler.config.position = 'right'
|
114
133
|
# Have Mini Profiler start in hidden mode - display with short cut (defaulted to 'Alt+P')
|
115
134
|
Rack::MiniProfiler.config.start_hidden = true
|
135
|
+
# Have Rack::MiniProfiler start disabled - you can use query string option to re-enable later
|
136
|
+
Rack::MiniProfiler.config.enabled = false
|
116
137
|
# Don't collect backtraces on SQL queries that take less than 5 ms to execute
|
117
138
|
# (necessary on Rubies earlier than 2.0)
|
118
139
|
Rack::MiniProfiler.config.backtrace_threshold_ms = 5
|
140
|
+
# Set the sampling rate for flamegraph, in ms - defaults to 0.5ms
|
141
|
+
Rack::MiniProfiler.config.flamegraph_sample_rate = 1
|
119
142
|
```
|
120
143
|
|
121
144
|
|
@@ -161,8 +184,9 @@ end
|
|
161
184
|
* toggle_shortcut (default Alt+P) - a jquery.hotkeys.js-style keyboard shortcut, used to toggle the mini_profiler's visibility. See http://code.google.com/p/js-hotkeys/ for more info.
|
162
185
|
* start_hidden (default false) - Whether or not you want the mini_profiler to be visible when loading a page
|
163
186
|
* backtrace_threshold_ms (default zero) - Minimum SQL query elapsed time before a backtrace is recorded. Backtrace recording can take a couple of milliseconds on rubies earlier than 2.0, impacting performance for very small queries.
|
187
|
+
* flamegraph_sample_rate (default 0.5ms) - How often fast_stack should get stack trace info to generate flamegraphs
|
164
188
|
|
165
|
-
## Special query strings
|
189
|
+
## Special query strings
|
166
190
|
|
167
|
-
If you include the query string `pp=help` at the end of your request you will see the various options available. You can use these options to extend or contract the amount of diagnostics rack-mini-profiler gathers.
|
191
|
+
If you include the query string `pp=help` at the end of your request you will see the various options available. You can use these options to extend or contract the amount of diagnostics rack-mini-profiler gathers.
|
168
192
|
|
File without changes
|
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
"use strict";
|
2
2
|
var MiniProfiler = (function () {
|
3
3
|
var $;
|
4
4
|
|
@@ -20,7 +20,7 @@ var MiniProfiler = (function () {
|
|
20
20
|
|
21
21
|
var getVersionedKey = function (keyPrefix) {
|
22
22
|
return keyPrefix + '-' + options.version;
|
23
|
-
}
|
23
|
+
};
|
24
24
|
|
25
25
|
var save = function (keyPrefix, value) {
|
26
26
|
if (!hasLocalStorage()) { return; }
|
@@ -81,7 +81,7 @@ var MiniProfiler = (function () {
|
|
81
81
|
}
|
82
82
|
mPt.flush();
|
83
83
|
}
|
84
|
-
|
84
|
+
|
85
85
|
if (id == options.currentId) {
|
86
86
|
|
87
87
|
clientPerformance = getClientPerformance();
|
@@ -91,7 +91,7 @@ var MiniProfiler = (function () {
|
|
91
91
|
var copy = { navigation: {}, timing: {} };
|
92
92
|
|
93
93
|
var timing = $.extend({}, clientPerformance.timing);
|
94
|
-
|
94
|
+
|
95
95
|
for (p in timing) {
|
96
96
|
if (timing.hasOwnProperty(p) && !$.isFunction(timing[p])) {
|
97
97
|
copy.timing[p] = timing[p];
|
@@ -102,9 +102,9 @@ var MiniProfiler = (function () {
|
|
102
102
|
}
|
103
103
|
clientPerformance = copy;
|
104
104
|
|
105
|
-
// hack to add chrome timings
|
105
|
+
// hack to add chrome timings
|
106
106
|
if (window.chrome && window.chrome.loadTimes) {
|
107
|
-
var chromeTimes = window.chrome.loadTimes();
|
107
|
+
var chromeTimes = window.chrome.loadTimes();
|
108
108
|
if (chromeTimes.firstPaintTime) {
|
109
109
|
clientPerformance.timing["First Paint Time"] = Math.round(chromeTimes.firstPaintTime * 1000);
|
110
110
|
}
|
@@ -245,7 +245,7 @@ var MiniProfiler = (function () {
|
|
245
245
|
popup.children().each(function () { childrenHeight += $(this).height(); });
|
246
246
|
|
247
247
|
popup.css({ 'padding-right': childrenHeight > popup.height() ? 40 : 10 });
|
248
|
-
}
|
248
|
+
};
|
249
249
|
|
250
250
|
var popupHide = function (button, popup) {
|
251
251
|
button.removeClass('profiler-button-active');
|
@@ -291,13 +291,13 @@ var MiniProfiler = (function () {
|
|
291
291
|
originalRgb = getRGB(cell.css('background-color')),
|
292
292
|
getColorDiff = function (fx, i) {
|
293
293
|
// adapted from John Resig's color plugin: http://plugins.jquery.com/project/color
|
294
|
-
return Math.max(Math.min(parseInt((fx.pos * (originalRgb[i] - highlightRgb[i])) + highlightRgb[i]), 255), 0);
|
294
|
+
return Math.max(Math.min(parseInt((fx.pos * (originalRgb[i] - highlightRgb[i])) + highlightRgb[i], 10), 255), 0);
|
295
295
|
};
|
296
296
|
|
297
297
|
// we need to animate some other property to piggy-back on the step function, so I choose you, opacity!
|
298
298
|
cell.css({ 'opacity': 1, 'background-color': highlightHex })
|
299
299
|
.animate({ 'opacity': 1 }, { duration: 2000, step: function (now, fx) {
|
300
|
-
fx.elem.style
|
300
|
+
fx.elem.style.backgroundColor = "rgb(" + [getColorDiff(fx, 0), getColorDiff(fx, 1), getColorDiff(fx, 2)].join(",") + ")";
|
301
301
|
}
|
302
302
|
});
|
303
303
|
});
|
@@ -461,7 +461,7 @@ var MiniProfiler = (function () {
|
|
461
461
|
|
462
462
|
if (jQuery && jQuery(document).ajaxStart)
|
463
463
|
jQuery(document).ajaxStart(function () { ajaxStartTime = new Date(); });
|
464
|
-
|
464
|
+
|
465
465
|
// fetch results after ASP Ajax calls
|
466
466
|
if (typeof (Sys) != 'undefined' && typeof (Sys.WebForms) != 'undefined' && typeof (Sys.WebForms.PageRequestManager) != 'undefined') {
|
467
467
|
// Get the instance of PageRequestManager.
|
@@ -481,7 +481,7 @@ var MiniProfiler = (function () {
|
|
481
481
|
});
|
482
482
|
}
|
483
483
|
|
484
|
-
// more Asp.Net callbacks
|
484
|
+
// more Asp.Net callbacks
|
485
485
|
if (typeof (WebForm_ExecuteCallback) == "function") {
|
486
486
|
WebForm_ExecuteCallback = (function (callbackObject) {
|
487
487
|
// Store original function
|
@@ -495,7 +495,7 @@ var MiniProfiler = (function () {
|
|
495
495
|
var ids = typeof JSON != 'undefined' ? JSON.parse(stringIds) : eval(stringIds);
|
496
496
|
fetchResults(ids);
|
497
497
|
}
|
498
|
-
}
|
498
|
+
};
|
499
499
|
|
500
500
|
})();
|
501
501
|
}
|
@@ -503,7 +503,12 @@ var MiniProfiler = (function () {
|
|
503
503
|
// also fetch results after ExtJS requests, in case it is being used
|
504
504
|
if (typeof (Ext) != 'undefined' && typeof (Ext.Ajax) != 'undefined' && typeof (Ext.Ajax.on) != 'undefined') {
|
505
505
|
// Ext.Ajax is a singleton, so we just have to attach to its 'requestcomplete' event
|
506
|
-
Ext.Ajax.on('requestcomplete', function(e, xhr, settings) {
|
506
|
+
Ext.Ajax.on('requestcomplete', function (e, xhr, settings) {
|
507
|
+
//iframed file uploads don't have headers
|
508
|
+
if (!xhr || !xhr.getResponseHeader) {
|
509
|
+
return;
|
510
|
+
}
|
511
|
+
|
507
512
|
var stringIds = xhr.getResponseHeader('X-MiniProfiler-Ids');
|
508
513
|
if (stringIds) {
|
509
514
|
var ids = typeof JSON != 'undefined' ? JSON.parse(stringIds) : eval(stringIds);
|
@@ -541,10 +546,10 @@ var MiniProfiler = (function () {
|
|
541
546
|
}
|
542
547
|
|
543
548
|
return this._onreadystatechange.apply(this, arguments);
|
544
|
-
}
|
549
|
+
};
|
545
550
|
|
546
551
|
return _send.apply(this, arguments);
|
547
|
-
}
|
552
|
+
};
|
548
553
|
}
|
549
554
|
|
550
555
|
// some elements want to be hidden on certain doc events
|
@@ -570,8 +575,9 @@ var MiniProfiler = (function () {
|
|
570
575
|
|
571
576
|
var toggleShortcut = script.getAttribute('data-toggle-shortcut');
|
572
577
|
|
573
|
-
if (script.getAttribute('data-max-traces'))
|
574
|
-
var maxTraces = parseInt(script.getAttribute('data-max-traces'));
|
578
|
+
if (script.getAttribute('data-max-traces')) {
|
579
|
+
var maxTraces = parseInt(script.getAttribute('data-max-traces'), 10);
|
580
|
+
}
|
575
581
|
|
576
582
|
if (script.getAttribute('data-trivial') === 'true') var trivial = true;
|
577
583
|
if (script.getAttribute('data-children') == 'true') var children = true;
|
@@ -592,7 +598,7 @@ var MiniProfiler = (function () {
|
|
592
598
|
authorized: authorized,
|
593
599
|
toggleShortcut: toggleShortcut,
|
594
600
|
startHidden: startHidden
|
595
|
-
}
|
601
|
+
};
|
596
602
|
})();
|
597
603
|
|
598
604
|
var doInit = function () {
|
@@ -600,7 +606,7 @@ var MiniProfiler = (function () {
|
|
600
606
|
container = $('.profiler-result-full');
|
601
607
|
if (container.length) {
|
602
608
|
if (window.location.href.indexOf("&trivial=1") > 0) {
|
603
|
-
options.showTrivial = true
|
609
|
+
options.showTrivial = true;
|
604
610
|
}
|
605
611
|
initFullView();
|
606
612
|
}
|
@@ -628,7 +634,7 @@ var MiniProfiler = (function () {
|
|
628
634
|
var finish = false;
|
629
635
|
var deferInit = function() {
|
630
636
|
if (finish) return;
|
631
|
-
if (window.performance && window.performance.timing && window.performance.timing.loadEventEnd
|
637
|
+
if (window.performance && window.performance.timing && window.performance.timing.loadEventEnd === 0 && wait < 10000) {
|
632
638
|
setTimeout(deferInit, 100);
|
633
639
|
wait += 100;
|
634
640
|
} else {
|
@@ -653,12 +659,25 @@ var MiniProfiler = (function () {
|
|
653
659
|
} else {
|
654
660
|
doInit();
|
655
661
|
}
|
662
|
+
|
663
|
+
// jquery.hotkeys.js
|
664
|
+
// https://github.com/jeresig/jquery.hotkeys/blob/master/jquery.hotkeys.js
|
665
|
+
|
666
|
+
(function(d){function h(g){if("string"===typeof g.data){var h=g.handler,j=g.data.toLowerCase().split(" ");g.handler=function(b){if(!(this!==b.target&&(/textarea|select/i.test(b.target.nodeName)||"text"===b.target.type))){var c="keypress"!==b.type&&d.hotkeys.specialKeys[b.which],e=String.fromCharCode(b.which).toLowerCase(),a="",f={};b.altKey&&"alt"!==c&&(a+="alt+");b.ctrlKey&&"ctrl"!==c&&(a+="ctrl+");b.metaKey&&(!b.ctrlKey&&"meta"!==c)&&(a+="meta+");b.shiftKey&&"shift"!==c&&(a+="shift+");c?f[a+c]=
|
667
|
+
!0:(f[a+e]=!0,f[a+d.hotkeys.shiftNums[e]]=!0,"shift+"===a&&(f[d.hotkeys.shiftNums[e]]=!0));c=0;for(e=j.length;c<e;c++)if(f[j[c]])return h.apply(this,arguments)}}}}d.hotkeys={version:"0.8",specialKeys:{8:"backspace",9:"tab",13:"return",16:"shift",17:"ctrl",18:"alt",19:"pause",20:"capslock",27:"esc",32:"space",33:"pageup",34:"pagedown",35:"end",36:"home",37:"left",38:"up",39:"right",40:"down",45:"insert",46:"del",96:"0",97:"1",98:"2",99:"3",100:"4",101:"5",102:"6",103:"7",104:"8",105:"9",106:"*",107:"+",
|
668
|
+
109:"-",110:".",111:"/",112:"f1",113:"f2",114:"f3",115:"f4",116:"f5",117:"f6",118:"f7",119:"f8",120:"f9",121:"f10",122:"f11",123:"f12",144:"numlock",145:"scroll",191:"/",224:"meta"},shiftNums:{"`":"~",1:"!",2:"@",3:"#",4:"$",5:"%",6:"^",7:"&",8:"*",9:"(","0":")","-":"_","=":"+",";":": ","'":'"',",":"<",".":">","/":"?","\\":"|"}};d.each(["keydown","keyup","keypress"],function(){d.event.special[this]={add:h}})})(MiniProfiler.jQuery);
|
669
|
+
|
656
670
|
};
|
657
671
|
|
672
|
+
var major, minor;
|
658
673
|
if (typeof(jQuery) == 'function') {
|
659
674
|
var jQueryVersion = jQuery.fn.jquery.split('.');
|
675
|
+
major = parseInt(jQueryVersion[0], 10);
|
676
|
+
minor = parseInt(jQueryVersion[1], 10);
|
660
677
|
}
|
661
|
-
|
678
|
+
|
679
|
+
|
680
|
+
if (major === 2 || (major === 1 && minor >= 7)) {
|
662
681
|
MiniProfiler.jQuery = $ = jQuery;
|
663
682
|
$(deferInit);
|
664
683
|
} else {
|
@@ -710,7 +729,7 @@ var MiniProfiler = (function () {
|
|
710
729
|
getClientTimings: function (clientTimings) {
|
711
730
|
var list = [];
|
712
731
|
var t;
|
713
|
-
|
732
|
+
|
714
733
|
if (!clientTimings.Timings) return [];
|
715
734
|
|
716
735
|
for (var i = 0; i < clientTimings.Timings.length; i++) {
|
@@ -890,56 +909,52 @@ var MiniProfiler = (function () {
|
|
890
909
|
|
891
910
|
MiniProfiler.init();
|
892
911
|
|
893
|
-
|
894
|
-
|
895
|
-
|
896
|
-
|
897
|
-
|
898
|
-
|
899
|
-
|
900
|
-
|
901
|
-
|
902
|
-
|
903
|
-
|
904
|
-
(
|
905
|
-
for(
|
906
|
-
|
907
|
-
|
908
|
-
|
909
|
-
|
910
|
-
|
911
|
-
|
912
|
-
if(
|
913
|
-
|
914
|
-
|
915
|
-
|
916
|
-
|
917
|
-
|
918
|
-
|
919
|
-
|
920
|
-
"
|
921
|
-
|
922
|
-
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
932
|
-
|
933
|
-
|
934
|
-
|
935
|
-
|
936
|
-
|
937
|
-
|
938
|
-
|
939
|
-
|
940
|
-
|
941
|
-
|
942
|
-
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],["kwd",/^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i,
|
943
|
-
null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^[a-z_][\w-]*/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/]]),["sql"])
|
944
|
-
|
945
|
-
;
|
912
|
+
if (typeof prettyPrint === "undefined") {
|
913
|
+
|
914
|
+
// prettify.js
|
915
|
+
// http://code.google.com/p/google-code-prettify/
|
916
|
+
|
917
|
+
window.PR_SHOULD_USE_CONTINUATION=true;window.PR_TAB_WIDTH=8;window.PR_normalizedHtml=window.PR=window.prettyPrintOne=window.prettyPrint=void 0;window._pr_isIE6=function(){var y=navigator&&navigator.userAgent&&navigator.userAgent.match(/\bMSIE ([678])\./);y=y?+y[1]:false;window._pr_isIE6=function(){return y};return y};
|
918
|
+
(function(){function y(b){return b.replace(L,"&").replace(M,"<").replace(N,">")}function H(b,f,i){switch(b.nodeType){case 1:var o=b.tagName.toLowerCase();f.push("<",o);var l=b.attributes,n=l.length;if(n){if(i){for(var r=[],j=n;--j>=0;)r[j]=l[j];r.sort(function(q,m){return q.name<m.name?-1:q.name===m.name?0:1});l=r}for(j=0;j<n;++j){r=l[j];r.specified&&f.push(" ",r.name.toLowerCase(),'="',r.value.replace(L,"&").replace(M,"<").replace(N,">").replace(X,"""),'"')}}f.push(">");
|
919
|
+
for(l=b.firstChild;l;l=l.nextSibling)H(l,f,i);if(b.firstChild||!/^(?:br|link|img)$/.test(o))f.push("</",o,">");break;case 3:case 4:f.push(y(b.nodeValue));break}}function O(b){function f(c){if(c.charAt(0)!=="\\")return c.charCodeAt(0);switch(c.charAt(1)){case "b":return 8;case "t":return 9;case "n":return 10;case "v":return 11;case "f":return 12;case "r":return 13;case "u":case "x":return parseInt(c.substring(2),16)||c.charCodeAt(1);case "0":case "1":case "2":case "3":case "4":case "5":case "6":case "7":return parseInt(c.substring(1),
|
920
|
+
8);default:return c.charCodeAt(1)}}function i(c){if(c<32)return(c<16?"\\x0":"\\x")+c.toString(16);c=String.fromCharCode(c);if(c==="\\"||c==="-"||c==="["||c==="]")c="\\"+c;return c}function o(c){var d=c.substring(1,c.length-1).match(RegExp("\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]","g"));c=[];for(var a=[],k=d[0]==="^",e=k?1:0,h=d.length;e<h;++e){var g=d[e];switch(g){case "\\B":case "\\b":case "\\D":case "\\d":case "\\S":case "\\s":case "\\W":case "\\w":c.push(g);
|
921
|
+
continue}g=f(g);var s;if(e+2<h&&"-"===d[e+1]){s=f(d[e+2]);e+=2}else s=g;a.push([g,s]);if(!(s<65||g>122)){s<65||g>90||a.push([Math.max(65,g)|32,Math.min(s,90)|32]);s<97||g>122||a.push([Math.max(97,g)&-33,Math.min(s,122)&-33])}}a.sort(function(v,w){return v[0]-w[0]||w[1]-v[1]});d=[];g=[NaN,NaN];for(e=0;e<a.length;++e){h=a[e];if(h[0]<=g[1]+1)g[1]=Math.max(g[1],h[1]);else d.push(g=h)}a=["["];k&&a.push("^");a.push.apply(a,c);for(e=0;e<d.length;++e){h=d[e];a.push(i(h[0]));if(h[1]>h[0]){h[1]+1>h[0]&&a.push("-");
|
922
|
+
a.push(i(h[1]))}}a.push("]");return a.join("")}function l(c){for(var d=c.source.match(RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g")),a=d.length,k=[],e=0,h=0;e<a;++e){var g=d[e];if(g==="(")++h;else if("\\"===g.charAt(0))if((g=+g.substring(1))&&g<=h)k[g]=-1}for(e=1;e<k.length;++e)if(-1===k[e])k[e]=++n;for(h=e=0;e<a;++e){g=d[e];if(g==="("){++h;if(k[h]===undefined)d[e]="(?:"}else if("\\"===
|
923
|
+
g.charAt(0))if((g=+g.substring(1))&&g<=h)d[e]="\\"+k[h]}for(h=e=0;e<a;++e)if("^"===d[e]&&"^"!==d[e+1])d[e]="";if(c.ignoreCase&&r)for(e=0;e<a;++e){g=d[e];c=g.charAt(0);if(g.length>=2&&c==="[")d[e]=o(g);else if(c!=="\\")d[e]=g.replace(/[a-zA-Z]/g,function(s){s=s.charCodeAt(0);return"["+String.fromCharCode(s&-33,s|32)+"]"})}return d.join("")}for(var n=0,r=false,j=false,q=0,m=b.length;q<m;++q){var t=b[q];if(t.ignoreCase)j=true;else if(/[a-z]/i.test(t.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi,
|
924
|
+
""))){r=true;j=false;break}}var p=[];q=0;for(m=b.length;q<m;++q){t=b[q];if(t.global||t.multiline)throw Error(""+t);p.push("(?:"+l(t)+")")}return RegExp(p.join("|"),j?"gi":"g")}function Y(b){var f=0;return function(i){for(var o=null,l=0,n=0,r=i.length;n<r;++n)switch(i.charAt(n)){case "\t":o||(o=[]);o.push(i.substring(l,n));l=b-f%b;for(f+=l;l>=0;l-=16)o.push(" ".substring(0,l));l=n+1;break;case "\n":f=0;break;default:++f}if(!o)return i;o.push(i.substring(l));return o.join("")}}function I(b,
|
925
|
+
f,i,o){if(f){b={source:f,c:b};i(b);o.push.apply(o,b.d)}}function B(b,f){var i={},o;(function(){for(var r=b.concat(f),j=[],q={},m=0,t=r.length;m<t;++m){var p=r[m],c=p[3];if(c)for(var d=c.length;--d>=0;)i[c.charAt(d)]=p;p=p[1];c=""+p;if(!q.hasOwnProperty(c)){j.push(p);q[c]=null}}j.push(/[\0-\uffff]/);o=O(j)})();var l=f.length;function n(r){for(var j=r.c,q=[j,z],m=0,t=r.source.match(o)||[],p={},c=0,d=t.length;c<d;++c){var a=t[c],k=p[a],e=void 0,h;if(typeof k==="string")h=false;else{var g=i[a.charAt(0)];
|
926
|
+
if(g){e=a.match(g[1]);k=g[0]}else{for(h=0;h<l;++h){g=f[h];if(e=a.match(g[1])){k=g[0];break}}e||(k=z)}if((h=k.length>=5&&"lang-"===k.substring(0,5))&&!(e&&typeof e[1]==="string")){h=false;k=P}h||(p[a]=k)}g=m;m+=a.length;if(h){h=e[1];var s=a.indexOf(h),v=s+h.length;if(e[2]){v=a.length-e[2].length;s=v-h.length}k=k.substring(5);I(j+g,a.substring(0,s),n,q);I(j+g+s,h,Q(k,h),q);I(j+g+v,a.substring(v),n,q)}else q.push(j+g,k)}r.d=q}return n}function x(b){var f=[],i=[];if(b.tripleQuotedStrings)f.push([A,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
|
927
|
+
null,"'\""]);else b.multiLineStrings?f.push([A,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"]):f.push([A,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"]);b.verbatimStrings&&i.push([A,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null]);if(b.hashComments)if(b.cStyleComments){f.push([C,/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"]);i.push([A,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
|
928
|
+
null])}else f.push([C,/^#[^\r\n]*/,null,"#"]);if(b.cStyleComments){i.push([C,/^\/\/[^\r\n]*/,null]);i.push([C,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}b.regexLiterals&&i.push(["lang-regex",RegExp("^"+Z+"(/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/)")]);b=b.keywords.replace(/^\s+|\s+$/g,"");b.length&&i.push([R,RegExp("^(?:"+b.replace(/\s+/g,"|")+")\\b"),null]);f.push([z,/^\s+/,null," \r\n\t\u00a0"]);i.push([J,/^@[a-z_$][a-z_$@0-9]*/i,null],[S,/^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/,
|
929
|
+
null],[z,/^[a-z_$][a-z_$@0-9]*/i,null],[J,/^(?:0x[a-f0-9]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+\-]?\d+)?)[a-z]*/i,null,"0123456789"],[E,/^.[^\s\w\.$@\'\"\`\/\#]*/,null]);return B(f,i)}function $(b){function f(D){if(D>r){if(j&&j!==q){n.push("</span>");j=null}if(!j&&q){j=q;n.push('<span class="',j,'">')}var T=y(p(i.substring(r,D))).replace(e?d:c,"$1 ");e=k.test(T);n.push(T.replace(a,s));r=D}}var i=b.source,o=b.g,l=b.d,n=[],r=0,j=null,q=null,m=0,t=0,p=Y(window.PR_TAB_WIDTH),c=/([\r\n ]) /g,
|
930
|
+
d=/(^| ) /gm,a=/\r\n?|\n/g,k=/[ \r\n]$/,e=true,h=window._pr_isIE6();h=h?b.b.tagName==="PRE"?h===6?" \r\n":h===7?" <br>\r":" \r":" <br />":"<br />";var g=b.b.className.match(/\blinenums\b(?::(\d+))?/),s;if(g){for(var v=[],w=0;w<10;++w)v[w]=h+'</li><li class="L'+w+'">';var F=g[1]&&g[1].length?g[1]-1:0;n.push('<ol class="linenums"><li class="L',F%10,'"');F&&n.push(' value="',F+1,'"');n.push(">");s=function(){var D=v[++F%10];return j?"</span>"+D+'<span class="'+j+'">':D}}else s=h;
|
931
|
+
for(;;)if(m<o.length?t<l.length?o[m]<=l[t]:true:false){f(o[m]);if(j){n.push("</span>");j=null}n.push(o[m+1]);m+=2}else if(t<l.length){f(l[t]);q=l[t+1];t+=2}else break;f(i.length);j&&n.push("</span>");g&&n.push("</li></ol>");b.a=n.join("")}function u(b,f){for(var i=f.length;--i>=0;){var o=f[i];if(G.hasOwnProperty(o))"console"in window&&console.warn("cannot override language handler %s",o);else G[o]=b}}function Q(b,f){b&&G.hasOwnProperty(b)||(b=/^\s*</.test(f)?"default-markup":"default-code");return G[b]}
|
932
|
+
function U(b){var f=b.f,i=b.e;b.a=f;try{var o,l=f.match(aa);f=[];var n=0,r=[];if(l)for(var j=0,q=l.length;j<q;++j){var m=l[j];if(m.length>1&&m.charAt(0)==="<"){if(!ba.test(m))if(ca.test(m)){f.push(m.substring(9,m.length-3));n+=m.length-12}else if(da.test(m)){f.push("\n");++n}else if(m.indexOf(V)>=0&&m.replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,' $1="$2$3$4"').match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/)){var t=m.match(W)[2],p=1,c;c=j+1;a:for(;c<q;++c){var d=l[c].match(W);if(d&&
|
933
|
+
d[2]===t)if(d[1]==="/"){if(--p===0)break a}else++p}if(c<q){r.push(n,l.slice(j,c+1).join(""));j=c}else r.push(n,m)}else r.push(n,m)}else{var a;p=m;var k=p.indexOf("&");if(k<0)a=p;else{for(--k;(k=p.indexOf("&#",k+1))>=0;){var e=p.indexOf(";",k);if(e>=0){var h=p.substring(k+3,e),g=10;if(h&&h.charAt(0)==="x"){h=h.substring(1);g=16}var s=parseInt(h,g);isNaN(s)||(p=p.substring(0,k)+String.fromCharCode(s)+p.substring(e+1))}}a=p.replace(ea,"<").replace(fa,">").replace(ga,"'").replace(ha,'"').replace(ia," ").replace(ja,
|
934
|
+
"&")}f.push(a);n+=a.length}}o={source:f.join(""),h:r};var v=o.source;b.source=v;b.c=0;b.g=o.h;Q(i,v)(b);$(b)}catch(w){if("console"in window)console.log(w&&w.stack?w.stack:w)}}var A="str",R="kwd",C="com",S="typ",J="lit",E="pun",z="pln",P="src",V="nocode",Z=function(){for(var b=["!","!=","!==","#","%","%=","&","&&","&&=","&=","(","*","*=","+=",",","-=","->","/","/=",":","::",";","<","<<","<<=","<=","=","==","===",">",">=",">>",">>=",">>>",">>>=","?","@","[","^","^=","^^","^^=","{","|","|=","||","||=",
|
935
|
+
"~","break","case","continue","delete","do","else","finally","instanceof","return","throw","try","typeof"],f="(?:^^|[+-]",i=0;i<b.length;++i)f+="|"+b[i].replace(/([^=<>:&a-z])/g,"\\$1");f+=")\\s*";return f}(),L=/&/g,M=/</g,N=/>/g,X=/\"/g,ea=/</g,fa=/>/g,ga=/'/g,ha=/"/g,ja=/&/g,ia=/ /g,ka=/[\r\n]/g,K=null,aa=RegExp("[^<]+|<!--[\\s\\S]*?--\>|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>|</?[a-zA-Z](?:[^>\"']|'[^']*'|\"[^\"]*\")*>|<","g"),ba=/^<\!--/,ca=/^<!\[CDATA\[/,da=/^<br\b/i,W=/^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/,
|
936
|
+
la=x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename using virtual wchar_t where break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params partial readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof debugger eval export function get null set undefined var with Infinity NaN caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END break continue do else for if return while case done elif esac eval fi function in local set then until ",
|
937
|
+
hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true}),G={};u(la,["default-code"]);u(B([],[[z,/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],[C,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[E,/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup",
|
938
|
+
"htm","html","mxml","xhtml","xml","xsl"]);u(B([[z,/^[\s]+/,null," \t\r\n"],["atv",/^(?:\"[^\"]*\"?|\'[^\']*\'?)/,null,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],[E,/^[=<>\/]+/],["lang-js",/^on\w+\s*=\s*\"([^\"]+)\"/i],["lang-js",/^on\w+\s*=\s*\'([^\']+)\'/i],["lang-js",/^on\w+\s*=\s*([^\"\'>\s]+)/i],["lang-css",/^style\s*=\s*\"([^\"]+)\"/i],["lang-css",/^style\s*=\s*\'([^\']+)\'/i],
|
939
|
+
["lang-css",/^style\s*=\s*([^\"\'>\s]+)/i]]),["in.tag"]);u(B([],[["atv",/^[\s\S]+/]]),["uq.val"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename using virtual wchar_t where ",
|
940
|
+
hashComments:true,cStyleComments:true}),["c","cc","cpp","cxx","cyc","m"]);u(x({keywords:"null true false"}),["json"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params partial readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var ",
|
941
|
+
hashComments:true,cStyleComments:true,verbatimStrings:true}),["cs"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof abstract boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient ",
|
942
|
+
cStyleComments:true}),["java"]);u(x({keywords:"break continue do else for if return while case done elif esac eval fi function in local set then until ",hashComments:true,multiLineStrings:true}),["bsh","csh","sh"]);u(x({keywords:"break continue do else for if return while and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None ",hashComments:true,multiLineStrings:true,tripleQuotedStrings:true}),["cv","py"]);
|
943
|
+
u(x({keywords:"caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END ",hashComments:true,multiLineStrings:true,regexLiterals:true}),["perl","pl","pm"]);u(x({keywords:"break continue do else for if return while alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END ",hashComments:true,
|
944
|
+
multiLineStrings:true,regexLiterals:true}),["rb"]);u(x({keywords:"break continue do else for if return while auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile catch class delete false import new operator private protected public this throw true try typeof debugger eval export function get null set undefined var with Infinity NaN ",cStyleComments:true,regexLiterals:true}),["js"]);u(B([],[[A,/^[\s\S]+/]]),
|
945
|
+
["regex"]);window.PR_normalizedHtml=H;window.prettyPrintOne=function(b,f){var i={f:b,e:f};U(i);return i.a};window.prettyPrint=function(b){function f(){for(var t=window.PR_SHOULD_USE_CONTINUATION?j.now()+250:Infinity;q<o.length&&j.now()<t;q++){var p=o[q];if(p.className&&p.className.indexOf("prettyprint")>=0){var c=p.className.match(/\blang-(\w+)\b/);if(c)c=c[1];for(var d=false,a=p.parentNode;a;a=a.parentNode)if((a.tagName==="pre"||a.tagName==="code"||a.tagName==="xmp")&&a.className&&a.className.indexOf("prettyprint")>=
|
946
|
+
0){d=true;break}if(!d){a=p;if(null===K){d=document.createElement("PRE");d.appendChild(document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));K=!/</.test(d.innerHTML)}if(K){d=a.innerHTML;if("XMP"===a.tagName)d=y(d);else{a=a;if("PRE"===a.tagName)a=true;else if(ka.test(d)){var k="";if(a.currentStyle)k=a.currentStyle.whiteSpace;else if(window.getComputedStyle)k=window.getComputedStyle(a,null).whiteSpace;a=!k||k==="pre"}else a=true;a||(d=d.replace(/(<br\s*\/?>)[\r\n]+/g,"$1").replace(/(?:[\r\n]+[ \t]*)+/g,
|
947
|
+
" "))}d=d}else{d=[];for(a=a.firstChild;a;a=a.nextSibling)H(a,d);d=d.join("")}d=d.replace(/(?:\r\n?|\n)$/,"");m={f:d,e:c,b:p};U(m);if(p=m.a){c=m.b;if("XMP"===c.tagName){d=document.createElement("PRE");for(a=0;a<c.attributes.length;++a){k=c.attributes[a];if(k.specified)if(k.name.toLowerCase()==="class")d.className=k.value;else d.setAttribute(k.name,k.value)}d.innerHTML=p;c.parentNode.replaceChild(d,c)}else c.innerHTML=p}}}}if(q<o.length)setTimeout(f,250);else b&&b()}for(var i=[document.getElementsByTagName("pre"),
|
948
|
+
document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],o=[],l=0;l<i.length;++l)for(var n=0,r=i[l].length;n<r;++n)o.push(i[l][n]);i=null;var j=Date;j.now||(j={now:function(){return(new Date).getTime()}});var q=0,m;f()};window.PR={combinePrefixPatterns:O,createSimpleLexer:B,registerLangHandler:u,sourceDecorator:x,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:C,PR_DECLARATION:"dec",PR_KEYWORD:R,PR_LITERAL:J,PR_NOCODE:V,PR_PLAIN:z,PR_PUNCTUATION:E,PR_SOURCE:P,PR_STRING:A,
|
949
|
+
PR_TAG:"tag",PR_TYPE:S}})()
|
950
|
+
|
951
|
+
;
|
952
|
+
|
953
|
+
// lang-sql.js
|
954
|
+
// http://code.google.com/p/google-code-prettify/
|
955
|
+
|
956
|
+
PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xA0]+/,null,"\t\n\r \u00a0"],["str",/^(?:"(?:[^\"\\]|\\.)*"|'(?:[^\'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\r\n]*|\/\*[\s\S]*?(?:\*\/|$))/],["kwd",/^(?:ADD|ALL|ALTER|AND|ANY|AS|ASC|AUTHORIZATION|BACKUP|BEGIN|BETWEEN|BREAK|BROWSE|BULK|BY|CASCADE|CASE|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COMMIT|COMPUTE|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT|CURRENT_DATE|CURRENT_TIME|CURRENT_TIMESTAMP|CURRENT_USER|CURSOR|DATABASE|DBCC|DEALLOCATE|DECLARE|DEFAULT|DELETE|DENY|DESC|DISK|DISTINCT|DISTRIBUTED|DOUBLE|DROP|DUMMY|DUMP|ELSE|END|ERRLVL|ESCAPE|EXCEPT|EXEC|EXECUTE|EXISTS|EXIT|FETCH|FILE|FILLFACTOR|FOR|FOREIGN|FREETEXT|FREETEXTTABLE|FROM|FULL|FUNCTION|GOTO|GRANT|GROUP|HAVING|HOLDLOCK|IDENTITY|IDENTITYCOL|IDENTITY_INSERT|IF|IN|INDEX|INNER|INSERT|INTERSECT|INTO|IS|JOIN|KEY|KILL|LEFT|LIKE|LINENO|LOAD|NATIONAL|NOCHECK|NONCLUSTERED|NOT|NULL|NULLIF|OF|OFF|OFFSETS|ON|OPEN|OPENDATASOURCE|OPENQUERY|OPENROWSET|OPENXML|OPTION|OR|ORDER|OUTER|OVER|PERCENT|PLAN|PRECISION|PRIMARY|PRINT|PROC|PROCEDURE|PUBLIC|RAISERROR|READ|READTEXT|RECONFIGURE|REFERENCES|REPLICATION|RESTORE|RESTRICT|RETURN|REVOKE|RIGHT|ROLLBACK|ROWCOUNT|ROWGUIDCOL|RULE|SAVE|SCHEMA|SELECT|SESSION_USER|SET|SETUSER|SHUTDOWN|SOME|STATISTICS|SYSTEM_USER|TABLE|TEXTSIZE|THEN|TO|TOP|TRAN|TRANSACTION|TRIGGER|TRUNCATE|TSEQUAL|UNION|UNIQUE|UPDATE|UPDATETEXT|USE|USER|VALUES|VARYING|VIEW|WAITFOR|WHEN|WHERE|WHILE|WITH|WRITETEXT)(?=[^\w-]|$)/i,
|
957
|
+
null],["lit",/^[+-]?(?:0x[\da-f]+|(?:(?:\.\d+|\d+(?:\.\d*)?)(?:e[+\-]?\d+)?))/i],["pln",/^[a-z_][\w-]*/i],["pun",/^[^\w\t\n\r \xA0\"\'][^\w\t\n\r \xA0+\-\"\']*/]]),["sql"])
|
958
|
+
|
959
|
+
;
|
960
|
+
}
|