jsonminify
Version:
JSON.minify() minifies blocks of JSON-like content into valid JSON by removing all whitespace *and* comments.
78 lines (65 loc) • 2.29 kB
JavaScript
/*global CodeMirror:false, $:false*/
(function(){
"use strict";
function makeid(num){
num = num || 5;
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
for( var i=0; i < num; i++ )
text += possible.charAt(Math.floor(Math.random() * possible.length));
return text;
}
CodeMirror.prototype.markPopoverText = function(lineObj, regex, className, gutter, message){
var re = new RegExp('(' + regex + ')', 'g');
var cursor = this.getSearchCursor(re, lineObj);
var match, internalClass = 'plato-mark-' + makeid(10);
while (match = cursor.findNext()) {
if (cursor.to().line !== lineObj.line) break;
this.markText(
{ line : lineObj.line, ch : cursor.from().ch },
{ line : lineObj.line, ch : cursor.to().ch },
{
className : 'plato-mark ' + internalClass + ' ' + (className || ''),
startStyle : 'plato-mark-start',
endStyle : 'plato-mark-end'
}
);
}
if (gutter) {
this.setGutterMarker(lineObj.line, gutter.gutterId, gutter.el);
}
// return a function to bind hover events, to be run after
// the codemirror operations are executed
return function(){
var markStart = $('.plato-mark-start.' + internalClass);
var markSpans = $('.' + internalClass);
if (message.type === 'popover') {
var triggered = false;
markSpans.add(gutter.el)
.on('mouseenter touchstart',function(e){
e.preventDefault();
triggered = true;
markSpans.addClass('active');
markStart.popover('show');
})
.on('mouseleave touchend',function(e){
e.preventDefault();
markSpans.removeClass('active');
triggered = false;
setTimeout(function(){
if (!triggered) markStart.popover('hide');
},200);
});
markStart.popover({
trigger : 'manual',
content : message.content,
html : true,
title : message.title,
placement : 'top'
});
} else if (message.type === 'block') {
this.addLineWidget(lineObj.line, $(message.content)[0]);
}
};
};
})();