diff --git a/scratch/js/gollum-editor/gollum.editor.js b/scratch/js/gollum-editor/gollum.editor.js
index 9caab8b3..c1a78335 100644
--- a/scratch/js/gollum-editor/gollum.editor.js
+++ b/scratch/js/gollum-editor/gollum.editor.js
@@ -84,9 +84,7 @@
* Used in exec() to display dialogs with dynamic fields.
*
*/
- $.GollumEditor.Dialog = function( argObject ) {
- Dialog.init( argObject );
- };
+ $.GollumEditor.Dialog = Dialog;
@@ -329,7 +327,6 @@
reselect = false;
}
repText += definitionObject.append;
-
}
if (repText)
@@ -394,6 +391,11 @@
var selectNew = false;
}
+ var scrollTop = null;
+ if ( $field[0].scrollTop ) {
+ scrollTop = $field[0].scrollTop;
+ }
+
$field.val( fullStr.substring(0, selPos.start) + replaceText +
fullStr.substring(selPos.end));
$field[0].focus();
@@ -402,6 +404,11 @@
$field[0].setSelectionRange( selPos.start,
selPos.start + replaceText.length );
}
+
+ if ( scrollTop ) {
+ // this jumps sometimes in FF
+ $field[0].scrollTop = scrollTop;
+ }
}
};
@@ -417,7 +424,13 @@
markupCreated = false,
+ attachEvents: function( evtOK ) {
+ $('#gollum-editor-action-ok').click( Dialog.eventOK( evtOK ) );
+ $('#gollum-editor-action-cancel').click( Dialog.eventCancel );
+ },
+
createMarkup: function( title, body ) {
+ Dialog.markupCreated = true;
return '
' +
'
' + title + '
' +
'
' + body + '
'
@@ -428,32 +441,63 @@
'
';
},
+ eventCancel: function() {
+ Dialog.hide();
+ },
+
+ eventOK: function( evtOK ) {
+ var results = {};
+
+ // pass them to evtOK if it exists (which it should)
+ if ( evtOK &&
+ typeof evtOK == 'function' ) {
+ evtOK( results );
+ }
+ },
+
hide: function() {
- $('#gollum-editor-dialog')
+ $('#gollum-editor-dialog').animate({ opacity: 0 }, {
+ duration: 700
+ complete: function() {
+ $('#gollum-editor-dialog').removeClass('active');
+ }
+ });
},
init: function( argObject ) {
+ var title = '';
+ var body = '';
+ // bail out if necessary
+ if ( !argObject ||
+ typeof argObject != 'object' ) {
+ debug('Editor Dialog: Cannot init; invalid init object');
+ return;
+ }
+
+ if ( Dialog.markupCreated ) {
+ $('#gollum-editor-dialog').remove();
+ }
+ var $dialog = $( Dialog.createMarkup( title, body ) );
+ $('body').append( $dialog );
+ Dialog.attachEvents( evtOK );
},
- show: function( title, body ) {
- if ( Dialog.markupCreated ) {
- $('#gollum-editor-dialog').remove();
- }
- var $dialog = $( Dialog.createMarkup( title, body ) );
- $('body').append( $dialog );
- Dialog.position(); // position this thing
- Dialog.attachEvents();
- $('#gollum-editor-dialog').animate({ opacity: 0 }, {
- duration: 1,
- complete: function() {
- $('#gollum-editor-dialog').addClass('active');
- $('#gollum-editor-dialog').animate({ opacity: 100 }, {
- duration: 700
- });
- }
- });
-
+ show: function() {
+ if ( !Dialog.markupCreated ) {
+ debug('Dialog: No markup to show. Please use init first.')
+ } else {
+ Dialog.position(); // position this thing
+ $('#gollum-editor-dialog').animate({ opacity: 0 }, {
+ duration: 1,
+ complete: function() {
+ $('#gollum-editor-dialog').addClass('active');
+ $('#gollum-editor-dialog').animate({ opacity: 100 }, {
+ duration: 700
+ });
+ }
+ });
+ }
},
position: function() {
diff --git a/scratch/js/gollum-editor/langs/asciidoc.js b/scratch/js/gollum-editor/langs/asciidoc.js
new file mode 100644
index 00000000..03a9c729
--- /dev/null
+++ b/scratch/js/gollum-editor/langs/asciidoc.js
@@ -0,0 +1,108 @@
+/**
+ * ASCIIDoc Language Definition
+ *
+ */
+
+(function() {
+
+var ASCIIDoc = {
+
+ 'function-bold' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "*$1*$2"
+ },
+
+ 'function-italic' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "_$1_$2"
+ },
+
+ 'function-code' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "+$1+$2"
+ },
+
+ 'function-ul' : {
+ search: /(.+)([\n]?)/gi,
+ replace: "* $1$2"
+ },
+
+ /* This looks silly but is completely valid Markdown */
+ 'function-ol' : {
+ search: /(.+)([\n]?)/gi,
+ replace: ". $1$2"
+ },
+
+ 'function-blockquote' : {
+ search: /(.+)([\n]?)/gi,
+ replace: "----\n$1$2\n----\n"
+ },
+
+ 'function-link' : {
+ exec: function( txt, selText, $field ) {
+ var results = null;
+ $.GollumEditor.Dialog({
+ title: 'Insert Link',
+ fields: [
+ {
+ id: 'text',
+ name: 'Link Text',
+ type: 'text',
+ help: 'The text to display to the user.'
+ },
+ {
+ id: 'href',
+ name: 'URL',
+ type: 'text',
+ help: 'The URL to link to.'
+ }
+ ],
+ OK: function( res ) {
+ if ( res['text'] && res['href'] ) {
+ return res['href'] + '[' +
+ res['text'] + ']';
+ }
+ else
+ return '';
+ }
+ });
+
+
+ }
+ },
+
+ 'function-image' : {
+ exec: function( txt, selText, $field ) {
+ var results = null;
+ $.GollumEditor.Dialog.init({
+ title: 'Insert Image',
+ fields: [
+ {
+ id: 'url',
+ name: 'Image URL',
+ type: 'text'
+ },
+ {
+ id: 'alt',
+ name: 'Alt Text',
+ type: 'text'
+ }
+ ],
+ OK: function( res ) {
+ if ( res['url'] && res['alt'] ) {
+ return 'image::' + res['url'] +
+ '[' + res['alt'] + ']';
+ } else
+ return '';
+ }
+ });
+ }
+ }
+
+};
+
+
+// this is necessary for GollumEditor to pick this up
+jQuery.GollumEditor.defineLanguage('markdown', ASCIIDoc);
+
+})();
diff --git a/scratch/js/gollum-editor/langs/creole.js b/scratch/js/gollum-editor/langs/creole.js
new file mode 100644
index 00000000..3f0e7c57
--- /dev/null
+++ b/scratch/js/gollum-editor/langs/creole.js
@@ -0,0 +1,107 @@
+/**
+ * Creole Language Definition
+ *
+ */
+(function() {
+
+var Creole = {
+
+ 'function-bold' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "**$1**$2"
+ },
+
+ 'function-italic' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "//$1//$2"
+ },
+
+ 'function-code' : {
+ search: /([^\n]+)([\n]*)/gi,
+ replace: "{{{$1}}}$2"
+ },
+
+ 'function-hr' : {
+ append: "\n\n----\n\n";
+ },
+
+ 'function-ul' : {
+ search: /(.+)([\n]?)/gi,
+ replace: "* $1$2"
+ },
+
+ /* This looks silly but is completely valid Markdown */
+ 'function-ol' : {
+ search: /(.+)([\n]?)/gi,
+ replace: "# $1$2"
+ },
+
+ 'function-link' : {
+ exec: function( txt, selText, $field ) {
+ var results = null;
+ $.GollumEditor.Dialog({
+ title: 'Insert Link',
+ fields: [
+ {
+ id: 'text',
+ name: 'Link Text',
+ type: 'text',
+ help: 'The text to display to the user.'
+ },
+ {
+ id: 'href',
+ name: 'URL',
+ type: 'text',
+ help: 'The URL to link to.'
+ }
+ ],
+ OK: function( res ) {
+ if ( res['text'] && res['href'] ) {
+ return '[[' + res['href'] + '|' +
+ res['text'] + ']]';
+ }
+ else
+ return '';
+ }
+ });
+
+
+ }
+ },
+
+ 'function-image' : {
+ exec: function( txt, selText, $field ) {
+ var results = null;
+ $.GollumEditor.Dialog.init({
+ title: 'Insert Image',
+ fields: [
+ {
+ id: 'url',
+ name: 'Image URL',
+ type: 'text'
+ },
+ {
+ id: 'alt',
+ name: 'Alt Text',
+ type: 'text'
+ }
+ ],
+ OK: function( res ) {
+ if ( res['url'] && res['alt'] ) {
+ var h = '{{' + res['url'];
+ if ( res['alt'] != '' ) {
+ h += '|' + res['alt'] + '}}';
+ }
+ return h;
+ } else
+ return '';
+ }
+ });
+ }
+ }
+
+};
+
+jQuery.GollumEditor.defineLanguage('creole', Creole);
+
+})();
\ No newline at end of file
diff --git a/scratch/js/gollum-editor/langs/markdown.js b/scratch/js/gollum-editor/langs/markdown.js
index 9cc460f0..d2500db9 100644
--- a/scratch/js/gollum-editor/langs/markdown.js
+++ b/scratch/js/gollum-editor/langs/markdown.js
@@ -17,6 +17,7 @@
* }
*
**/
+(function() {
var MarkDown = {
@@ -59,7 +60,7 @@ var MarkDown = {
exec: function( txt, selText, $field ) {
var results = null;
$.GollumEditor.Dialog({
- title: '',
+ title: 'Insert Link',
fields: [
{
id: 'text',
@@ -89,11 +90,37 @@ var MarkDown = {
},
'function-image' : {
- /* Stub */
+ exec: function( txt, selText, $field ) {
+ var results = null;
+ $.GollumEditor.Dialog.init({
+ title: 'Insert Image',
+ fields: [
+ {
+ id: 'url',
+ name: 'Image URL',
+ type: 'text'
+ },
+ {
+ id: 'alt',
+ name: 'Alt Text',
+ type: 'text'
+ }
+ ],
+ OK: function( res ) {
+ if ( res['url'] && res['alt'] ) {
+ return '![' + res['alt'] + ']' +
+ '(' + res['url'] + ')';
+ } else
+ return '';
+ }
+ });
+ }
}
};
// this is necessary for GollumEditor to pick this up
-jQuery.GollumEditor.defineLanguage('markdown', MarkDown);
\ No newline at end of file
+jQuery.GollumEditor.defineLanguage('markdown', MarkDown);
+
+})();