| /** | |
| * Adapted from jQuery Lined Textarea Plugin | |
| * http://alan.blog-city.com/jquerylinedtextarea.htm | |
| * | |
| * Released under the MIT License: | |
| * http://www.opensource.org/licenses/mit-license.php | |
| */ | |
| (function($) { | |
| $.fn.linedtextarea = function() { | |
| /* | |
| * Helper function to make sure the line numbers are always kept up to | |
| * the current system | |
| */ | |
| var fillOutLines = function(linesDiv, h, lineNo) { | |
| while (linesDiv.height() < h) { | |
| linesDiv.append("<div>" + lineNo + "</div>"); | |
| lineNo++; | |
| } | |
| return lineNo; | |
| }; | |
| return this.each(function() { | |
| var lineNo = 1; | |
| var textarea = $(this); | |
| /* Wrap the text area in the elements we need */ | |
| textarea.wrap("<div class='linedtextarea' style='height:100%; overflow:hidden'></div>"); | |
| textarea.width("97%"); | |
| textarea.parent().prepend("<div class='lines' style='width:3%'></div>"); | |
| var linesDiv = textarea.parent().find(".lines"); | |
| var scroll = function(tn) { | |
| var domTextArea = $(this)[0]; | |
| var scrollTop = domTextArea.scrollTop; | |
| var clientHeight = domTextArea.clientHeight; | |
| linesDiv.css({ | |
| 'margin-top' : (-scrollTop) + "px" | |
| }); | |
| lineNo = fillOutLines(linesDiv, scrollTop + clientHeight, | |
| lineNo); | |
| }; | |
| /* React to the scroll event */ | |
| textarea.scroll(scroll); | |
| $(window).resize(function() { textarea.scroll(); }); | |
| /* We call scroll once to add the line numbers */ | |
| textarea.scroll(); | |
| }); | |
| }; | |
| })(jQuery); |