crocon 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +283 -0
- data/lib/crocon.rb +4 -0
- data/lib/crocon/rails.rb +7 -0
- data/lib/crocon/rails/engine.rb +6 -0
- data/lib/crocon/rails/version.rb +5 -0
- data/vendor/assets/javascripts/crocon.js +13 -0
- data/vendor/assets/stylesheets/crocon.css +55 -0
- metadata +53 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b7a9f4c23fc72ce034224faa7f2dfe3b4f9fd947
|
4
|
+
data.tar.gz: abcbd12171cf812369df816988926a6e3ffb4a31
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 44ed9441c980993347cdf7a3d3ede8dbe6a172ecb54feb3c6d277a5682ae3dd7706968cb04c9beee619a2a1ed6de1f11e63ccd39ae534f1ecef7da10fee14011
|
7
|
+
data.tar.gz: 159925da2a917cfd1438603300aed24e8df1dd4534613ee84ce8821fa4042fb4e869875f4d16769e79271cdfebe57eb8d2d07a2118c8ff6e5bf90f58ab873f85
|
data/README.md
ADDED
@@ -0,0 +1,283 @@
|
|
1
|
+
# Crocon 🐊
|
2
|
+
|
3
|
+
**Crocon makes developer console great again.**
|
4
|
+
|
5
|
+
Crocon is a Javascript wrapper for browser's developer console. Its goal is to make debugging
|
6
|
+
painless, convenient and beautiful.
|
7
|
+
|
8
|
+
This is a Rails gem version of the library. For source files and an npm package, go [here](https://github.com/akxcv/crocon).
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this to your `Gemfile`:
|
13
|
+
```
|
14
|
+
gem 'crocon'
|
15
|
+
```
|
16
|
+
|
17
|
+
Add this to your `application.js`:
|
18
|
+
```
|
19
|
+
//= require crocon
|
20
|
+
```
|
21
|
+
|
22
|
+
Add this to your `application.css`:
|
23
|
+
```
|
24
|
+
*= require crocon
|
25
|
+
```
|
26
|
+
|
27
|
+
## Why?
|
28
|
+
|
29
|
+
The builtin developer console in modern browsers suffers from a number of problems. Here are some
|
30
|
+
of the big ones:
|
31
|
+
|
32
|
+
**There's no good way to turn logging on/off.**
|
33
|
+
|
34
|
+
Most of the time you don't want your clients to
|
35
|
+
see debugging output in their console on your production website. But, `console.log` does not
|
36
|
+
care if it runs in development or production, it's going to log anyway. This leads to developers
|
37
|
+
seldom using the console *or* writing `console.log` over and over again just to erase
|
38
|
+
it afterwards (...just to write it back again afterwards, and so on). Disabling the console
|
39
|
+
is still possible (e.x. `if (!debug) console.log = function () {}`), but it's not a good solution
|
40
|
+
if you use other console methods (which you should!). Also, imagine you want to be able to
|
41
|
+
see debugging output in production while normal website users don't see anything. What do you do?
|
42
|
+
|
43
|
+
Crocon solves this problem by introducing a flexible enable/disable mechanism. First of all, you
|
44
|
+
can enable or disable it during initialization: `crocon = new Crocon({ enabled: debug })`
|
45
|
+
(assuming that `debug` is `true` in development and `false` in production). But also, you can
|
46
|
+
enable or disable Crocon in your browser (`crocon.enable()` or `crocon.disable()`), which will
|
47
|
+
override the global `enabled` option. Thus, you can easily switch Crocon on/off in any environment,
|
48
|
+
and it will only affect *your* console.
|
49
|
+
|
50
|
+
See [initialization options](#initialization-options).
|
51
|
+
|
52
|
+
**`console.group` is a great idea, but it's not implemented well**
|
53
|
+
|
54
|
+
With [`console.group`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#group) you can split your output in foldable groups, which is a *very* good thing
|
55
|
+
to be able to do. However, a lot of JS these days is *asynchronous*, which is something you have
|
56
|
+
to constantly think about if you want to group your output.
|
57
|
+
|
58
|
+
Consider this simple scenario:
|
59
|
+
|
60
|
+
```js
|
61
|
+
async function f1() {
|
62
|
+
console.group('group 1');
|
63
|
+
console.log('function 1 start');
|
64
|
+
await sleep(1000);
|
65
|
+
console.log('function 1 end');
|
66
|
+
console.groupEnd();
|
67
|
+
}
|
68
|
+
|
69
|
+
async function f2() {
|
70
|
+
console.group('group 2');
|
71
|
+
console.log('function 2 start');
|
72
|
+
await sleep(500);
|
73
|
+
console.log('function 2 end');
|
74
|
+
console.groupEnd();
|
75
|
+
}
|
76
|
+
|
77
|
+
f1(); f2()
|
78
|
+
```
|
79
|
+
|
80
|
+
Result:
|
81
|
+
|
82
|
+
![Async and groups](/images/async_console_groups.png?raw=true)
|
83
|
+
|
84
|
+
Crocon solves this by creating a different implementation of groups. With Crocon, you can use
|
85
|
+
groups like this:
|
86
|
+
|
87
|
+
```js
|
88
|
+
crocon.group('my namespace').log('hello from my namespace')
|
89
|
+
/* or */
|
90
|
+
crocon.group('my namespace', function () {
|
91
|
+
crocon.log('hello from my namespace')
|
92
|
+
/* ... */
|
93
|
+
})
|
94
|
+
```
|
95
|
+
|
96
|
+
See [grouping](#grouping)
|
97
|
+
|
98
|
+
**`console.log` supports formatting with CSS, but it's not convenient**
|
99
|
+
|
100
|
+
`console` supports formatting with CSS rules:
|
101
|
+
|
102
|
+
```js
|
103
|
+
console.log('roses are %cred%c, violets are %cblue', 'color: red;', 'color: black;', 'color: blue;')
|
104
|
+
```
|
105
|
+
|
106
|
+
Result:
|
107
|
+
|
108
|
+
![Console formatting](/images/console_formatting.png?raw=true)
|
109
|
+
|
110
|
+
This is awesome, but really not convenient.
|
111
|
+
|
112
|
+
Crocon makes formatting much easier by introducing a markdown-like syntax. See [formatting](#formatting).
|
113
|
+
|
114
|
+
## Browser support
|
115
|
+
|
116
|
+
TBD
|
117
|
+
|
118
|
+
## Usage
|
119
|
+
|
120
|
+
Methods that work exactly like their console's counterparts:
|
121
|
+
|
122
|
+
- [`assert`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#assert)
|
123
|
+
- [`count`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#count)
|
124
|
+
- [`debug`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#consoledebugobject_object)
|
125
|
+
[also supports formatting](#formatting)
|
126
|
+
- [`dir`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#dir)
|
127
|
+
- [`dirxml`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#consoledirxmlobject)
|
128
|
+
- [`error`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#error)
|
129
|
+
[also supports formatting](#formatting), see [known issues](#known-issues)
|
130
|
+
- [`info`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#consoleinfoobject_object) [also supports formatting](#formatting)
|
131
|
+
- [`log`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#log)
|
132
|
+
[also supports formatting](#formatting)
|
133
|
+
- [`timeStamp`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#timestamp)
|
134
|
+
- [`trace`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#trace)
|
135
|
+
see [known issues](#known-issues)
|
136
|
+
- [`warn`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#warn)
|
137
|
+
[also supports formatting](#formatting)
|
138
|
+
|
139
|
+
Also:
|
140
|
+
|
141
|
+
- [`profile` and `profileEnd`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#profile)
|
142
|
+
as well as
|
143
|
+
[`time` and `timeEnd`](https://developers.google.com/web/tools/chrome-devtools/console/console-reference#time)
|
144
|
+
support lambda syntax:
|
145
|
+
|
146
|
+
```js
|
147
|
+
crocon.profile('profile1')
|
148
|
+
myVar = myFunction()
|
149
|
+
crocon.profileEnd()
|
150
|
+
|
151
|
+
/* is the same as */
|
152
|
+
|
153
|
+
myVar = crocon.profile('profile1', myFunction)
|
154
|
+
```
|
155
|
+
|
156
|
+
- `group` is described in [grouping](#grouping).
|
157
|
+
|
158
|
+
### Initialization options
|
159
|
+
|
160
|
+
```js
|
161
|
+
crocon = new Crocon({
|
162
|
+
enabled: true,
|
163
|
+
enableFormatting: true,
|
164
|
+
collapseGroups: false,
|
165
|
+
modifyConsole: true
|
166
|
+
})
|
167
|
+
```
|
168
|
+
- `enabledByDefault`: Defines whether to enable or disable Crocon.
|
169
|
+
When Crocon is disabled, it will not produce any output. However, lambda versions of `profile`, `time` and `group` will still execute given functions. Default: `true`.
|
170
|
+
- `enableFormatting`: Defines whether [formatting](#formatting) should be enabled. Default: `true`.
|
171
|
+
- `collapseGroups`: Defines whether [groups](#grouping) should be
|
172
|
+
collapsed or not. Default: `false` (expanded).
|
173
|
+
- `modifyConsole`: Defines whether Crocon needs to modify `console` upon initialization.
|
174
|
+
Generally, modifying global objects is a bad thing to do, but this is required if you want Crocon to
|
175
|
+
handle console output correctly. Crocon is modifying `console` functions *very carefully* (it just
|
176
|
+
needs to hook to those methods). You can safely disable this options, but regular console output
|
177
|
+
will occasionally get stuck inside groups it does not belong to. see [known issues](#known-issues). Default: `true`.
|
178
|
+
|
179
|
+
### Grouping
|
180
|
+
|
181
|
+
Groups in Crocon work a little different from console's groups. There are two ways to group the output.
|
182
|
+
|
183
|
+
```js
|
184
|
+
/* method 1 */
|
185
|
+
crocon.group('group one').log('inside group 1')
|
186
|
+
|
187
|
+
/* method 2 */
|
188
|
+
crocon.group('group one', function () {
|
189
|
+
crocon.log('inside group 1')
|
190
|
+
})
|
191
|
+
```
|
192
|
+
|
193
|
+
You can easily mix methods together and nest groups however you want:
|
194
|
+
|
195
|
+
```js
|
196
|
+
crocon.group('user login', function () {
|
197
|
+
crocon.info('user login started')
|
198
|
+
crocon.group('credentials').log('credentials are [correct].green')
|
199
|
+
/* code */
|
200
|
+
crocon.info('[success].badge.green')
|
201
|
+
})
|
202
|
+
|
203
|
+
crocon.group('group 1').log('some more output')
|
204
|
+
crocon.group('group 1', 'another group!').log('still nested correctly')
|
205
|
+
```
|
206
|
+
|
207
|
+
Output:
|
208
|
+
|
209
|
+
![Group output](/images/group_output.png?raw=true)
|
210
|
+
|
211
|
+
When `document` is not in focus (e.g. your console is in focus), the output becomes:
|
212
|
+
|
213
|
+
![Inline group output](/images/inline_group_output.png?raw=true)
|
214
|
+
|
215
|
+
This behaviour is explained in [known issues](#known-issues).
|
216
|
+
|
217
|
+
### Formatting
|
218
|
+
|
219
|
+
Crocon supports Markdown-like string formatting. Here's the options:
|
220
|
+
- `**bold**`
|
221
|
+
- `*italic*`
|
222
|
+
- `~strikethrough~`
|
223
|
+
- `_underline_`
|
224
|
+
- `[custom text].classOne.classTwo...`. This syntax allows you to apply CSS classes to text in
|
225
|
+
square brackets. Available classes are: `badge`, `bold`, `italic`, `strikethrough`, `underline` and [color classes](#color-classes).
|
226
|
+
|
227
|
+
At the moment, you cannot nest formatting options into each other.
|
228
|
+
Objects and functions are not formattable, but they likely will be in the future.
|
229
|
+
|
230
|
+
#### Color classes
|
231
|
+
|
232
|
+
Crocon supports following color classes (both for badges and normal text):
|
233
|
+
- `.blue`
|
234
|
+
- `.orange`
|
235
|
+
- `.red`
|
236
|
+
- `.green`
|
237
|
+
- `.cyan`
|
238
|
+
- `.purple`
|
239
|
+
|
240
|
+
#### Adding custom / overriding existing styles
|
241
|
+
|
242
|
+
All styles are declared in a stylesheet and thus are easily extensible.
|
243
|
+
See [`index.scss`](index.scss).
|
244
|
+
At the moment, only these attributes are supported: `margin`, `color`, `background-color`,
|
245
|
+
`border-radius`, `padding`, `font-weight`, `font-style`, `text-decoration`.
|
246
|
+
|
247
|
+
## Known issues
|
248
|
+
|
249
|
+
- **There's no way to detect when console output happens**. Development tools are separate from `window` and `document`,
|
250
|
+
and there is no way to know if the output is happening. We can detect things like `console.log`
|
251
|
+
by modifying those functions (hence the `modifyConsole` init parameter), but we cannot know when,
|
252
|
+
say, an error thrown with `throw` is going to appear in console. Groups are implemented in such a way that they don't get closed
|
253
|
+
until it's necessary, so that leads to console output being stuck inside groups it doesn't belong to.
|
254
|
+
Part of the problem is solved by modifying `console`, but another part is not solvable without a browser extension.
|
255
|
+
The best we can do is to detect whether or not `document` is in focus (with `document.hasFocus()`).
|
256
|
+
This enables us to change how groups work if `document` is not in focus (say, `console` is in focus).
|
257
|
+
However, some things (like `throw` or click on the "clear console" button) are simply not catchable.
|
258
|
+
So, **some output will inevitably get stuck in a group it doesn't belong**. Beware of this, especially when using `collapseGroups = true`.
|
259
|
+
|
260
|
+
- **Stack traces from `crocon.error` and `crocon.trace` contain unneeded information**.
|
261
|
+
Since `crocon.error` and `crocon.trace` call some functions under the hood, the stack trace produced
|
262
|
+
by those functions will contain several unneeded calls.
|
263
|
+
|
264
|
+
*All of this is according to the author's research. If you know a solution to this problem, you're
|
265
|
+
highly encouraged to open an issue and/or a pull request at [akxcv/crocon](https://github.com/akxcv/crocon).*
|
266
|
+
|
267
|
+
## Contributing
|
268
|
+
|
269
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/akxcv/crocon.
|
270
|
+
|
271
|
+
## License
|
272
|
+
|
273
|
+
The package is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
274
|
+
|
275
|
+
## TODO
|
276
|
+
|
277
|
+
- Support nested styles
|
278
|
+
- Log history
|
279
|
+
- Replace stylesheet with in-memory CSS?
|
280
|
+
- Focus mode (see only the logs you need **right now**)
|
281
|
+
- Custom styles in formatting (e.x. `[my text]{color: #434433;}`)
|
282
|
+
- Browser support
|
283
|
+
- Object and function formatting
|
data/lib/crocon.rb
ADDED
data/lib/crocon/rails.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
|
2
|
+
window.Crocon=require("./src/index");
|
3
|
+
},{"./src/index":5}],2:[function(require,module,exports){
|
4
|
+
var BrowserAdapter={log:console.log,debug:console.debug,info:console.info,warn:console.warn,error:console.error,group:console.group,groupCollapsed:console.groupCollapsed,groupEnd:console.groupEnd,assert:console.assert,count:console.count,dir:console.dir,dirxml:console.dirxml,profile:console.profile,profileEnd:console.profileEnd,time:console.time,timeEnd:console.timeEnd,timeStamp:console.timeStamp,trace:console.trace};module.exports=BrowserAdapter;
|
5
|
+
|
6
|
+
},{}],3:[function(require,module,exports){
|
7
|
+
var Formatter={format:function(t){var e,r=[],a=[],s=0;for(var o in t){var n=this.formatObject(t[o]);if("undefined"==typeof n||!n[1].length)break;r.push(n[0]),a.push.apply(a,n[1]),s+=1}return t.splice(0,s),e=[],r.length&&(e.push(r.join(" ")),e.push.apply(e,a)),e.push.apply(e,t),e},formatObject:function(t){if("string"==typeof t)return this.formatString(t)},formatString:function(t){for(var e,r=[];this.canFormat(t);){var a=this.getRelevantMatch(t);e="string"==typeof a.format.classes?a.format.classes:a.format.classes(a.match),t=t.replace(a.format.regex,function(t,e){return"%c"+e+"%c"}),r.push(this.computeStyle(e)),r.push(this.computeStyle("default"))}return[t,r]},canFormat:function(t){for(var e in this.formats)if(this.formats[e].regex.test(t))return!0;return!1},getRelevantMatch:function(t){var e=[];for(var r in this.formats){var a=this.formats[r];a.regex.test(t)&&e.push({match:t.match(a.regex),format:a})}return e.sort(function(t,e){return t.match.index-e.match.index})[0]},computeStyle:function(t){var e=document.createElement("div");e.id="crocon",e.className=t,e.style="display: none;",document.getElementsByTagName("body")[0].appendChild(e);var r=getComputedStyle(e),a=[];for(var s in this.supportedStyles){var o=this.supportedStyles[s];a.push(o+":"+r.getPropertyValue(o))}return a.join(";")},supportedStyles:["margin","color","background-color","border-radius","padding","font-weight","font-style","text-decoration"],formats:[{regex:/\*\*([^\*]+)\*\*/,classes:"bold"},{regex:/\*([^\*]+)\*/,classes:"italic"},{regex:/~([^~]+)~/,classes:"strikethrough"},{regex:/_([^_]+)_/,classes:"underline"},{regex:/\[([^\[\]]+)\](\.[\.\w]+)/,classes:function(t){return t[2].split(".").join(" ")}}]};module.exports=Formatter;
|
8
|
+
|
9
|
+
},{}],4:[function(require,module,exports){
|
10
|
+
var BrowserAdapter=require("./browserAdapter"),GroupManager={currentStack:[],previousStack:[],globalStack:[],bindEvents:function(){var r=this;window.addEventListener("blur",function(){r.clear()})},group:function(r,t,e){if(e?(this.ungroup(!1),this.globalStack.push(t)):this.currentStack=t,document.hasFocus()){var o;if(e)for(o in t)BrowserAdapter[r](t[o]);else{var a=0;for(o in this.currentStack)this.previousStack[o]===this.currentStack[o]&&(a+=1);var n=this.previousStack.length-a;for(o=0;o<n;o++)BrowserAdapter.groupEnd();var c=this.currentStack.slice(a);for(o in c)BrowserAdapter[r](c[o])}}},ungroup:function(r){if(this.previousStack.length&&!this.currentStack.length&&this.previousStack.forEach(function(){BrowserAdapter.groupEnd()}),r){var t=this.globalStack.pop();t.forEach(function(){BrowserAdapter.groupEnd()})}this.previousStack=this.currentStack,this.currentStack=[]},clear:function(){this.previousStack.forEach(function(){BrowserAdapter.groupEnd()}),this.currentStack.forEach(function(){BrowserAdapter.groupEnd()}),this.previousStack=[]}};module.exports=GroupManager;
|
11
|
+
},{"./browserAdapter":2}],5:[function(require,module,exports){
|
12
|
+
function Crocon(o){var r={enabled:!0,enableFormatting:!0,collapseGroups:!1,modifyConsole:!0};o||(o={});for(var n in r)o.hasOwnProperty(n)||(o[n]=r[n]);if(this.enabled=o.enabled,this.enableFormatting=o.enableFormatting,this.collapseGroups=o.collapseGroups,this.formattableMethods=["log","info","debug","warn","error","focus"],GroupManager.bindEvents(),o.modifyConsole){var e=function(o,r){return GroupManager.clear(),BrowserAdapter[o].apply(BrowserAdapter,r)};console.log=function(){e("log",arguments)},console.debug=function(){e("debug",arguments)},console.info=function(){e("info",arguments)},console.warn=function(){e("warn",arguments)},console.error=function(){e("error",arguments)},console.assert=function(){e("assert",arguments)},console.clear=function(){GroupManager.clear()},console.count=function(){e("count",arguments)},console.dir=function(){e("dir",arguments)},console.dirxml=function(){e("dirxml",arguments)},console.group=function(){e("group",arguments)},console.groupCollapsed=function(){e("groupCollapsed",arguments)},console.groupEnd=function(){e("groupEnd",arguments)},console.profile=function(){e("profile",arguments)},console.profileEnd=function(){e("profileEnd",arguments)},console.time=function(){e("time",arguments)},console.timeEnd=function(){e("timeEnd",arguments)},console.timeStamp=function(){e("timeStamp",arguments)},console.trace=function(){e("trace",arguments)}}}var GroupManager=require("./groupManager"),BrowserAdapter=require("./browserAdapter"),Formatter=require("./formatter");Crocon.prototype={log:function(){this.print("log",[].slice.call(arguments))},debug:function(){this.print("debug",[].slice.call(arguments))},info:function(){this.print("info",[].slice.call(arguments))},warn:function(){this.print("warn",[].slice.call(arguments))},error:function(){this.print("error",[].slice.call(arguments))},assert:function(){this.print("assert",[].slice.call(arguments))},count:function(o){this.print("count",[o])},dir:function(o){this.print("dir",[o])},dirxml:function(o){this.print("dirxml",[o])},profile:function(){var o=[].slice.call(arguments),r=o.pop();if("function"==typeof r){this._isEnabled()&&BrowserAdapter.profile(o[0]);var n=r.call();return this.profileEnd(),n}this._isEnabled()&&BrowserAdapter.profile(o[0])},profileEnd:function(){this._isEnabled()&&BrowserAdapter.profileEnd()},time:function(){var o=[].slice.call(arguments),r=o.pop();if("function"==typeof r){this._isEnabled()&&BrowserAdapter.time(o[0]);var n=r.call();return this.timeEnd(o[0]),n}this._isEnabled()&&BrowserAdapter.time(o[0])},timeEnd:function(o){this._isEnabled()&&BrowserAdapter.timeEnd(o)},timeStamp:function(o){this._isEnabled()&&BrowserAdapter.timeStamp(o)},trace:function(o){this.print("trace",[o])},group:function(){var o=[].slice.call(arguments),r=this.collapseGroups?"groupCollapsed":"group";if("function"==typeof o[o.length-1]){var n=o.pop();this._isEnabled()&&GroupManager.group(r,o,!0);var e=n.call();return this._isEnabled()&&GroupManager.ungroup(!0),e}return this._isEnabled()&&GroupManager.group(r,o),this},print:function(o,r){if(GroupManager.ungroup(),this._isEnabled()){var n=!document.hasFocus()&&GroupManager.previousStack.length+GroupManager.globalStack.length;if(n){var e=[],t=GroupManager.previousStack;t.unshift.apply(t,GroupManager.globalStack.reduce(function(o,r){return o.concat(r)},[])),GroupManager.previousStack=[];for(var i in t)e.push(t[i]);var a=e.join(" -> ")+" :: ";"string"==typeof r[0]?r[0]=a+r[0]:r.unshift(a)}this.formattableMethods.indexOf(o)>-1&&this.enableFormatting&&(r=Formatter.format(r)),n?(BrowserAdapter.groupCollapsed.apply(BrowserAdapter,r),BrowserAdapter.groupEnd()):BrowserAdapter[o].apply(BrowserAdapter,r)}},enable:function(){localStorage&&localStorage.setItem("croconEnabled","true")},disable:function(){localStorage&&localStorage.setItem("croconEnabled","false")},_isEnabled:function(){return localStorage&&localStorage.croconEnabled?"false"!==localStorage.croconEnabled:this.enabled}},module.exports=Crocon;
|
13
|
+
},{"./browserAdapter":2,"./formatter":3,"./groupManager":4}]},{},[1]);
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#crocon {
|
2
|
+
color: black;
|
3
|
+
background-color: transparent;
|
4
|
+
border-radius: 0;
|
5
|
+
padding: 0;
|
6
|
+
margin: 0;
|
7
|
+
font-weight: normal;
|
8
|
+
font-style: normal; }
|
9
|
+
#crocon.badge {
|
10
|
+
color: white;
|
11
|
+
background-color: black;
|
12
|
+
border-radius: 3px;
|
13
|
+
padding: 2px;
|
14
|
+
margin: 0 2px; }
|
15
|
+
#crocon.badge.blue {
|
16
|
+
color: white;
|
17
|
+
background-color: #61afef; }
|
18
|
+
#crocon.badge.orange {
|
19
|
+
color: white;
|
20
|
+
background-color: #d19a66; }
|
21
|
+
#crocon.badge.red {
|
22
|
+
color: white;
|
23
|
+
background-color: #e06c75; }
|
24
|
+
#crocon.badge.green {
|
25
|
+
color: white;
|
26
|
+
background-color: #98c379; }
|
27
|
+
#crocon.badge.cyan {
|
28
|
+
color: white;
|
29
|
+
background-color: #56b6c2; }
|
30
|
+
#crocon.badge.purple {
|
31
|
+
color: white;
|
32
|
+
background-color: #c678dd; }
|
33
|
+
#crocon.badge.focus {
|
34
|
+
color: #bada55;
|
35
|
+
background: #444; }
|
36
|
+
#crocon.blue {
|
37
|
+
color: #4078f2; }
|
38
|
+
#crocon.orange {
|
39
|
+
color: #986801; }
|
40
|
+
#crocon.red {
|
41
|
+
color: #e45649; }
|
42
|
+
#crocon.green {
|
43
|
+
color: #50a14f; }
|
44
|
+
#crocon.cyan {
|
45
|
+
color: #0184bc; }
|
46
|
+
#crocon.purple {
|
47
|
+
color: #a626a4; }
|
48
|
+
#crocon.bold {
|
49
|
+
font-weight: bold; }
|
50
|
+
#crocon.italic {
|
51
|
+
font-style: italic; }
|
52
|
+
#crocon.strikethrough {
|
53
|
+
text-decoration: line-through; }
|
54
|
+
#crocon.underline {
|
55
|
+
text-decoration: underline; }
|
metadata
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: crocon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alexander Komarov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-02-11 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: |-
|
14
|
+
Crocon is a Javascript wrapper for browser's developer console.
|
15
|
+
Its goal is to make debugging painless, convenient and beautiful.
|
16
|
+
email:
|
17
|
+
- ak@akxcv.com
|
18
|
+
executables: []
|
19
|
+
extensions: []
|
20
|
+
extra_rdoc_files: []
|
21
|
+
files:
|
22
|
+
- README.md
|
23
|
+
- lib/crocon.rb
|
24
|
+
- lib/crocon/rails.rb
|
25
|
+
- lib/crocon/rails/engine.rb
|
26
|
+
- lib/crocon/rails/version.rb
|
27
|
+
- vendor/assets/javascripts/crocon.js
|
28
|
+
- vendor/assets/stylesheets/crocon.css
|
29
|
+
homepage: https://github.com/akxcv/crocon
|
30
|
+
licenses:
|
31
|
+
- MIT
|
32
|
+
metadata: {}
|
33
|
+
post_install_message:
|
34
|
+
rdoc_options: []
|
35
|
+
require_paths:
|
36
|
+
- lib
|
37
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ">="
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
requirements: []
|
48
|
+
rubyforge_project:
|
49
|
+
rubygems_version: 2.6.8
|
50
|
+
signing_key:
|
51
|
+
specification_version: 4
|
52
|
+
summary: Make your console great again
|
53
|
+
test_files: []
|