From e8f05c0df28a498a053e3f1dd374923411186ffe Mon Sep 17 00:00:00 2001 From: Ramprasad Rajendran Date: Sun, 18 Nov 2012 14:06:04 +0530 Subject: [PATCH] Fix line numbers on wordwrap and handle resize --- static/application.js | 40 +++++++++++++++++++++++++++++++++------- static/index.html | 1 + 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/static/application.js b/static/application.js index 7afb014..dab2a5e 100644 --- a/static/application.js +++ b/static/application.js @@ -39,10 +39,10 @@ haste_document.prototype.load = function(key, callback, lang) { high = hljs.highlightAuto(res.data); } callback({ + data: res.data, value: high.value, key: key, - language: high.language || lang, - lineCount: res.data.split("\n").length + language: high.language || lang }); }, error: function(err) { @@ -70,8 +70,7 @@ haste_document.prototype.save = function(data, callback) { callback(null, { value: high.value, key: res.key, - language: high.language, - lineCount: data.split("\n").length + language: high.language }); }, error: function(res) { @@ -188,19 +187,46 @@ haste.prototype.lookupTypeByExtension = function(ext) { // Add line numbers to the document // For the specified number of lines -haste.prototype.addLineNumbers = function(lineCount) { +haste.prototype.addLineNumbers = function(data) { var h = ''; + var nlines = 0; + var lines = data.split("\n"); + var lineCount = lines.length; + var cwidth = this.getCharacterWidth(); + var code_width = $("code").width(); + for (var i = 0; i < lineCount; i++) { + if(i>0) { + nlines = Math.ceil((cwidth*lines[i-1].length)/code_width); + for(j=0;j'; } $('#linenos').html(h); }; +haste.prototype.getCharacterWidth = function() { + var $div = $("
"); + $("body").append($div); + $div.html('a'); + $div.css('width','auto') + .css('font', $("code").css('font')) + .css('display', 'none') + .css('position','absolute'); + return $div.width(); +}; + // Remove the line numbers haste.prototype.removeLineNumbers = function() { $('#linenos').html('>'); }; +haste.prototype.resize = function() { + this.addLineNumbers(this.doc.data); +}; + // Load a document and show it haste.prototype.loadDocument = function(key) { // Split the key up @@ -215,7 +241,7 @@ haste.prototype.loadDocument = function(key) { _this.fullKey(); _this.$textarea.val('').hide(); _this.$box.show().focus(); - _this.addLineNumbers(ret.lineCount); + _this.addLineNumbers(ret.data); } else { _this.newDocument(); @@ -250,7 +276,7 @@ haste.prototype.lockDocument = function() { _this.fullKey(); _this.$textarea.val('').hide(); _this.$box.show().focus(); - _this.addLineNumbers(ret.lineCount); + _this.addLineNumbers(ret.data); } }); }; diff --git a/static/index.html b/static/index.html index 487b3e9..f4f22f7 100644 --- a/static/index.html +++ b/static/index.html @@ -33,6 +33,7 @@ $(function() { app = new haste('hastebin', { twitter: true }); handlePop({ target: window }); + $(window).bind("resize", function() {app.resize();}); });