diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index f663725..71d4d97 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -14,7 +14,7 @@ //= require jquery_ujs //= require turbolinks //= require modernizr-lite/modernizr -//= require jquery-linedtextareaV0.1/jquery-linedtextarea +//= require jquery-linedtextarea-moser //= require button-group //= require form-animation //= require summary-edit diff --git a/app/assets/javascripts/jquery-linedtextarea-moser.js b/app/assets/javascripts/jquery-linedtextarea-moser.js new file mode 100644 index 0000000..27dced7 --- /dev/null +++ b/app/assets/javascripts/jquery-linedtextarea-moser.js @@ -0,0 +1,127 @@ +/** + * NOTE: MARK MOSER EDITED COPY. DO NOT USE BOWER. + * jQuery Lined Textarea Plugin + * http://alan.blog-city.com/jquerylinedtextarea.htm + * + * Copyright (c) 2010 Alan Williamson + * + * Version: + * $Id: jquery-linedtextarea.js 464 2010-01-08 10:36:33Z alan $ + * + * Released under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + * Usage: + * Displays a line number count column to the left of the textarea + * + * Class up your textarea with a given class, or target it directly + * with JQuery Selectors + * + * $(".lined").linedtextarea({ + * selectedLine: 10, + * selectedClass: 'lineselect' + * }); + * + * History: + * - 2010.01.08: Fixed a Google Chrome layout problem + * - 2010.01.07: Refactored code for speed/readability; Fixed horizontal sizing + * - 2010.01.06: Initial Release + * + */ +(function($) { + + $.fn.linedtextarea = function(options) { + + // Get the Options + var opts = $.extend({}, $.fn.linedtextarea.defaults, options); + + + /* + * Helper function to make sure the line numbers are always + * kept up to the current system + */ + var fillOutLines = function(codeLines, h, lineNo){ + while ( (codeLines.height() - h ) <= 0 ){ + if ( lineNo == opts.selectedLine ) + codeLines.append("
" + lineNo + "
"); + else + codeLines.append("
" + lineNo + "
"); + + lineNo++; + } + return lineNo; + }; + + + /* + * Iterate through each of the elements are to be applied to + */ + return this.each(function() { + var lineNo = 1; + var textarea = $(this); + + /* Turn off the wrapping of as we don't want to screw up the line numbers */ + textarea.attr("wrap", "off"); + textarea.css({resize:'none'}); + var originalTextAreaWidth = textarea.outerWidth(); + + /* Wrap the text area in the elements we need */ + textarea.wrap("
"); + var linedTextAreaDiv = textarea.parent().wrap("
"); + var linedWrapDiv = linedTextAreaDiv.parent(); + + linedWrapDiv.prepend("
"); + + var linesDiv = linedWrapDiv.find(".lines"); + linesDiv.height( textarea.height() + 4 ); + + + /* Draw the number bar; filling it out where necessary */ + linesDiv.append( "
" ); + var codeLinesDiv = linesDiv.find(".codelines"); + lineNo = fillOutLines( codeLinesDiv, linesDiv.height(), 1 ); + + /* Move the textarea to the selected line */ + if ( opts.selectedLine != -1 && !isNaN(opts.selectedLine) ){ + var fontSize = parseInt( textarea.height() / (lineNo-2) ); + var position = parseInt( fontSize * opts.selectedLine ) - (textarea.height()/2); + textarea[0].scrollTop = position; + } + + + /* Set the width */ + // var sidebarWidth = linesDiv.outerWidth(); + // var paddingHorizontal = parseInt( linedWrapDiv.css("border-left-width") ) + parseInt( linedWrapDiv.css("border-right-width") ) + parseInt( linedWrapDiv.css("padding-left") ) + parseInt( linedWrapDiv.css("padding-right") ); + // var linedWrapDivNewWidth = originalTextAreaWidth - paddingHorizontal; + // var textareaNewWidth = originalTextAreaWidth - sidebarWidth - paddingHorizontal - 20; + // + // textarea.width( textareaNewWidth ); + // linedWrapDiv.width( linedWrapDivNewWidth ); + + + + /* React to the scroll event */ + textarea.scroll( function(tn){ + var domTextArea = $(this)[0]; + var scrollTop = domTextArea.scrollTop; + var clientHeight = domTextArea.clientHeight; + codeLinesDiv.css( {'margin-top': (-1*scrollTop) + "px"} ); + lineNo = fillOutLines( codeLinesDiv, scrollTop + clientHeight, lineNo ); + }); + + + /* Should the textarea get resized outside of our control */ + textarea.resize( function(tn){ + var domTextArea = $(this)[0]; + linesDiv.height( domTextArea.clientHeight + 4 ); + }); + + }); + }; + + // default options + $.fn.linedtextarea.defaults = { + selectedLine: -1, + selectedClass: 'lineselect' + }; +})(jQuery); diff --git a/bower.json b/bower.json index 5539cbc..f607884 100644 --- a/bower.json +++ b/bower.json @@ -13,8 +13,7 @@ "jquery-validate": "", "tota11y": "", "jquery-mockjax": "^2.1.1", - "modernizr-lite": "*", - "jquery-linedtextareaV0.1": "*" + "modernizr-lite": "*" }, "ignore": [ "**/.*",