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); + +})();