mirror of
https://github.com/Hopiu/postal.js.git
synced 2026-03-16 22:20:23 +00:00
75 lines
2.1 KiB
JavaScript
Executable file
75 lines
2.1 KiB
JavaScript
Executable file
/*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);
|
|
}
|
|
|
|
if (message) {
|
|
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]);
|
|
}
|
|
}
|
|
};
|
|
|
|
})();
|