| /*********************************************** |
| * Horizontal panning for editable fields that |
| * overflow their width |
| **********************************************/ |
| |
| Controller.open(function(_) { |
| _.scrollHoriz = function() { |
| var cursor = this.cursor, seln = cursor.selection; |
| var rootRect = this.root.jQ[0].getBoundingClientRect(); |
| if (!seln) { |
| var x = cursor.jQ[0].getBoundingClientRect().left; |
| if (x > rootRect.right - 20) var scrollBy = x - (rootRect.right - 20); |
| else if (x < rootRect.left + 20) var scrollBy = x - (rootRect.left + 20); |
| else return; |
| } |
| else { |
| var rect = seln.jQ[0].getBoundingClientRect(); |
| var overLeft = rect.left - (rootRect.left + 20); |
| var overRight = rect.right - (rootRect.right - 20); |
| if (seln.ends[L] === cursor[R]) { |
| if (overLeft < 0) var scrollBy = overLeft; |
| else if (overRight > 0) { |
| if (rect.left - overRight < rootRect.left + 20) var scrollBy = overLeft; |
| else var scrollBy = overRight; |
| } |
| else return; |
| } |
| else { |
| if (overRight > 0) var scrollBy = overRight; |
| else if (overLeft < 0) { |
| if (rect.right - overLeft > rootRect.right - 20) var scrollBy = overRight; |
| else var scrollBy = overLeft; |
| } |
| else return; |
| } |
| } |
| this.root.jQ.stop().animate({ scrollLeft: '+=' + scrollBy}, 100); |
| }; |
| }); |