class AsciiIo.Renderer.Pre extends AsciiIo.Renderer.Base tagName: 'pre' className: 'terminal' initialize: (options) -> super(options) @cachedSpans = {} @createChildElements() createChildElements: -> i = 0 while i < @lines row = $("") @$el.append row @$el.append "\n" i++ fixTerminalElementSize: -> @$el.css(width: @width() + 'px', height: @height() + 'px') render: -> if @state.dirty @$el.find('.cursor').removeClass('cursor') super renderLine: (n, fragments, cursorX) -> html = [] rendered = 0 for fragment in fragments [text, brush] = fragment if cursorX isnt undefined and rendered <= cursorX < rendered + text.length left = text.slice(0, cursorX - rendered) cursor = '' + text[cursorX - rendered] + '' right = text.slice(cursorX - rendered + 1) t = @escape(left) + cursor + @escape(right) else t = @escape(text) html.push @spanFromBrush(brush) html.push t html.push '' rendered += text.length @$el.find(".line:eq(" + n + ")")[0].innerHTML = '' + html.join('') + '' escape: (text) -> text.replace(/&/g, '&').replace(//g, '>') spanFromBrush: (brush) -> brush = AsciiIo.Brush.create brush key = brush.hash() span = @cachedSpans[key] if not span span = "" if brush != AsciiIo.Brush.default() span = "" @cachedSpans[key] = span span showCursor: (show) -> if show @$el.addClass "cursor-on" else @$el.removeClass "cursor-on" blinkCursor: -> cursor = @$el.find(".cursor") if cursor.hasClass("visible") cursor.removeClass "visible" else cursor.addClass "visible" resetCursorState: -> cursor = @$el.find(".cursor") cursor.addClass "visible" # TODO: check if it's used clearScreen: -> # this.lineData.length = 0; # @cursorY = @cursorX = 0 @$el.find(".line").empty()