diff --git a/app/assets/javascripts/player/colors.js b/app/assets/javascripts/player/colors.js
new file mode 100644
index 0000000..dafec87
--- /dev/null
+++ b/app/assets/javascripts/player/colors.js
@@ -0,0 +1 @@
+AsciiIo.colors = {"0":"#000000","1":"#CC0000","2":"#4E9A06","3":"#C4A000","4":"#3465A4","5":"#75507B","6":"#06989A","7":"#D3D7CF","8":"#555753","9":"#EF2929","10":"#8AE234","11":"#FCE94F","12":"#729FCF","13":"#AD7FA8","14":"#34E2E2","15":"#EEEEEC","16":"#000000","17":"#00005f","18":"#000087","19":"#0000af","20":"#0000d7","21":"#0000ff","22":"#005f00","23":"#005f5f","24":"#005f87","25":"#005faf","26":"#005fd7","27":"#005fff","28":"#008700","29":"#00875f","30":"#008787","31":"#0087af","32":"#0087d7","33":"#0087ff","34":"#00af00","35":"#00af5f","36":"#00af87","37":"#00afaf","38":"#00afd7","39":"#00afff","40":"#00d700","41":"#00d75f","42":"#00d787","43":"#00d7af","44":"#00d7d7","45":"#00d7ff","46":"#00ff00","47":"#00ff5f","48":"#00ff87","49":"#00ffaf","50":"#00ffd7","51":"#00ffff","52":"#5f0000","53":"#5f005f","54":"#5f0087","55":"#5f00af","56":"#5f00d7","57":"#5f00ff","58":"#5f5f00","59":"#5f5f5f","60":"#5f5f87","61":"#5f5faf","62":"#5f5fd7","63":"#5f5fff","64":"#5f8700","65":"#5f875f","66":"#5f8787","67":"#5f87af","68":"#5f87d7","69":"#5f87ff","70":"#5faf00","71":"#5faf5f","72":"#5faf87","73":"#5fafaf","74":"#5fafd7","75":"#5fafff","76":"#5fd700","77":"#5fd75f","78":"#5fd787","79":"#5fd7af","80":"#5fd7d7","81":"#5fd7ff","82":"#5fff00","83":"#5fff5f","84":"#5fff87","85":"#5fffaf","86":"#5fffd7","87":"#5fffff","88":"#870000","89":"#87005f","90":"#870087","91":"#8700af","92":"#8700d7","93":"#8700ff","94":"#875f00","95":"#875f5f","96":"#875f87","97":"#875faf","98":"#875fd7","99":"#875fff","100":"#878700","101":"#87875f","102":"#878787","103":"#8787af","104":"#8787d7","105":"#8787ff","106":"#87af00","107":"#87af5f","108":"#87af87","109":"#87afaf","110":"#87afd7","111":"#87afff","112":"#87d700","113":"#87d75f","114":"#87d787","115":"#87d7af","116":"#87d7d7","117":"#87d7ff","118":"#87ff00","119":"#87ff5f","120":"#87ff87","121":"#87ffaf","122":"#87ffd7","123":"#87ffff","124":"#af0000","125":"#af005f","126":"#af0087","127":"#af00af","128":"#af00d7","129":"#af00ff","130":"#af5f00","131":"#af5f5f","132":"#af5f87","133":"#af5faf","134":"#af5fd7","135":"#af5fff","136":"#af8700","137":"#af875f","138":"#af8787","139":"#af87af","140":"#af87d7","141":"#af87ff","142":"#afaf00","143":"#afaf5f","144":"#afaf87","145":"#afafaf","146":"#afafd7","147":"#afafff","148":"#afd700","149":"#afd75f","150":"#afd787","151":"#afd7af","152":"#afd7d7","153":"#afd7ff","154":"#afff00","155":"#afff5f","156":"#afff87","157":"#afffaf","158":"#afffd7","159":"#afffff","160":"#d70000","161":"#d7005f","162":"#d70087","163":"#d700af","164":"#d700d7","165":"#d700ff","166":"#d75f00","167":"#d75f5f","168":"#d75f87","169":"#d75faf","170":"#d75fd7","171":"#d75fff","172":"#d78700","173":"#d7875f","174":"#d78787","175":"#d787af","176":"#d787d7","177":"#d787ff","178":"#d7af00","179":"#d7af5f","180":"#d7af87","181":"#d7afaf","182":"#d7afd7","183":"#d7afff","184":"#d7d700","185":"#d7d75f","186":"#d7d787","187":"#d7d7af","188":"#d7d7d7","189":"#d7d7ff","190":"#d7ff00","191":"#d7ff5f","192":"#d7ff87","193":"#d7ffaf","194":"#d7ffd7","195":"#d7ffff","196":"#ff0000","197":"#ff005f","198":"#ff0087","199":"#ff00af","200":"#ff00d7","201":"#ff00ff","202":"#ff5f00","203":"#ff5f5f","204":"#ff5f87","205":"#ff5faf","206":"#ff5fd7","207":"#ff5fff","208":"#ff8700","209":"#ff875f","210":"#ff8787","211":"#ff87af","212":"#ff87d7","213":"#ff87ff","214":"#ffaf00","215":"#ffaf5f","216":"#ffaf87","217":"#ffafaf","218":"#ffafd7","219":"#ffafff","220":"#ffd700","221":"#ffd75f","222":"#ffd787","223":"#ffd7af","224":"#ffd7d7","225":"#ffd7ff","226":"#ffff00","227":"#ffff5f","228":"#ffff87","229":"#ffffaf","230":"#ffffd7","231":"#ffffff","232":"#080808","233":"#121212","234":"#1c1c1c","235":"#262626","236":"#303030","237":"#3a3a3a","238":"#444444","239":"#4e4e4e","240":"#585858","241":"#626262","242":"#6c6c6c","243":"#767676","244":"#808080","245":"#8a8a8a","246":"#949494","247":"#9e9e9e","248":"#a8a8a8","249":"#b2b2b2","250":"#bcbcbc","251":"#c6c6c6","252":"#d0d0d0","253":"#dadada","254":"#e4e4e4","255":"#eeeeee"};
\ No newline at end of file
diff --git a/app/assets/javascripts/player/namespace.js b/app/assets/javascripts/player/namespace.js
index 160df36..5567cd1 100644
--- a/app/assets/javascripts/player/namespace.js
+++ b/app/assets/javascripts/player/namespace.js
@@ -1,3 +1,5 @@
if (!window.AsciiIo){
window.AsciiIo = {};
}
+
+AsciiIo.Renderer = {};
diff --git a/app/assets/javascripts/player/player.js b/app/assets/javascripts/player/player.js
index e55de29..6fd7e1e 100644
--- a/app/assets/javascripts/player/player.js
+++ b/app/assets/javascripts/player/player.js
@@ -1,6 +1,7 @@
//= require ./namespace
//= require ./utf8
-//= require ./terminal_view
+//= require ./renderers/base
+//= require_tree ./renderers
//= require ./screen_buffer
//= require ./vt
//= require ./hud_view
diff --git a/app/assets/javascripts/player/player_view.js.coffee b/app/assets/javascripts/player/player_view.js.coffee
index 769da9a..bcb70fa 100644
--- a/app/assets/javascripts/player/player_view.js.coffee
+++ b/app/assets/javascripts/player/player_view.js.coffee
@@ -5,25 +5,25 @@ class AsciiIo.PlayerView extends Backbone.View
@movie.on 'movie-loaded', @onMovieLoaded, this
@movie.load()
- @terminalView = new AsciiIo.TerminalView(
+ @rendererView = new options.rendererClass(
cols: this.options.cols
lines: this.options.lines
)
- @vt = new AsciiIo.VT(options.cols, options.lines, @terminalView)
+ @vt = new AsciiIo.VT(options.cols, options.lines, @rendererView)
@createChildViews()
createChildViews: ->
- @$el.append(@terminalView.$el)
- @terminalView.afterInsertedToDom()
- @terminalView.showLoadingIndicator()
+ @$el.append(@rendererView.$el)
+ @rendererView.afterInsertedToDom()
+ @rendererView.showLoadingIndicator()
@hudView = new AsciiIo.HudView()
@$el.append(@hudView.$el)
onMovieLoaded: (asciicast) ->
- @terminalView.hideLoadingIndicator()
+ @rendererView.hideLoadingIndicator()
@hudView.setDuration(asciicast.get('duration'))
@bindEvents()
@@ -31,10 +31,10 @@ class AsciiIo.PlayerView extends Backbone.View
if @options.autoPlay
@movie.play()
else
- @terminalView.showToggleOverlay()
+ @rendererView.showToggleOverlay()
bindEvents: ->
- @terminalView.on 'terminal-click', =>
+ @rendererView.on 'terminal-click', =>
@movie.togglePlay()
@hudView.on 'hud-play-click', =>
@@ -56,8 +56,8 @@ class AsciiIo.PlayerView extends Backbone.View
@vt.feed(frame)
@movie.on 'movie-awake', (frame) =>
- @terminalView.restartCursorBlink()
+ @rendererView.restartCursorBlink()
@movie.on 'movie-finished', =>
- @terminalView.stopCursorBlink()
+ @rendererView.stopCursorBlink()
@hudView.setProgress(100)
diff --git a/app/assets/javascripts/player/renderers/base.js.coffee b/app/assets/javascripts/player/renderers/base.js.coffee
new file mode 100644
index 0000000..8badf60
--- /dev/null
+++ b/app/assets/javascripts/player/renderers/base.js.coffee
@@ -0,0 +1,58 @@
+class AsciiIo.Renderer.Base extends Backbone.View
+ events:
+ 'click': 'onClick'
+
+ initialize: (options) ->
+ @cols = options.cols
+ @lines = options.lines
+ @showCursor true
+ @startCursorBlink()
+
+ onClick: ->
+ @trigger('terminal-click')
+ @hideToggleOverlay()
+
+ render: (changes, cursorX, cursorY) ->
+ for n, data of changes
+ c = if parseInt(n) is cursorY then cursorX else undefined
+ @renderLine n, data || [], c
+
+ renderLine: (n, data, cursorX) ->
+ throw '#renderLine not implemented'
+
+ afterInsertedToDom: ->
+
+ showLoadingIndicator: ->
+ @$el.append('
')
+
+ hideLoadingIndicator: ->
+ @$('.loading').remove()
+
+ showToggleOverlay: ->
+ @$el.append('
')
+
+ hideToggleOverlay: ->
+ @$('.start-prompt').remove()
+
+ showCursor: (show) ->
+ throw '#showCursor not implemented'
+
+ blinkCursor: ->
+ throw '#blinkCursor not implemented'
+
+ resetCursorState: ->
+
+ startCursorBlink: ->
+ @cursorTimerId = setInterval(@blinkCursor.bind(this), 500)
+
+ stopCursorBlink: ->
+ if @cursorTimerId
+ clearInterval @cursorTimerId
+ @cursorTimerId = null
+
+ restartCursorBlink: ->
+ @stopCursorBlink()
+ @resetCursorState()
+ @startCursorBlink()
+
+ visualBell: ->
diff --git a/app/assets/javascripts/player/renderers/canvas.js.coffee b/app/assets/javascripts/player/renderers/canvas.js.coffee
new file mode 100644
index 0000000..9f5016b
--- /dev/null
+++ b/app/assets/javascripts/player/renderers/canvas.js.coffee
@@ -0,0 +1,104 @@
+class AsciiIo.Renderer.Canvas extends AsciiIo.Renderer.Base
+ tagName: 'canvas'
+ className: 'terminal'
+
+ events:
+ 'click': 'onClick'
+
+ initialize: (options) ->
+ super(options)
+ @ctx = @el.getContext('2d')
+ @cellWidth = 7
+ @cellHeight = 14
+
+ afterInsertedToDom: ->
+ width = @cols * @cellWidth
+ height = @lines * @cellHeight
+ @$el.attr('width', width)
+ @$el.attr('height', height)
+ @setFont()
+ # @$el.css(width: width + 'px', height: height + 'px')
+ # @ctx.scale(1, 1)
+
+ setFont: ->
+ size = @$el.css('font-size')
+ console.log size
+ family = @$el.css('font-family')
+ console.log family
+ @font = "#{size} #{family}"
+ @ctx.font = @font
+ @prevFont = @font
+
+ renderLine: (n, data, cursorX) ->
+ left = 0
+ width = @cols * @cellWidth
+ top = n * @cellHeight
+ # bottom = (n + 1) * @cellHeight
+
+ # @ctx.clearRect(left, top + 1, width, @cellHeight)
+
+ # ctx.fillStyle = "#FFA500";
+ # @ctx.font = "12px monospace"
+
+ for i in [0...@cols]
+ d = data[i]
+
+ if d
+ [char, brush] = d
+
+ char = char.replace('&', '&').replace('<', '<')
+
+ @setBackgroundAttributes(brush)
+ @ctx.fillRect left + i * @cellWidth, top + 1, @cellWidth, @cellHeight
+
+ if char != ' '
+ @setTextAttributes(brush)
+ @ctx.fillText char, i * @cellWidth, top + @cellHeight - 2
+
+ setBackgroundAttributes: (brush) ->
+ if brush.bg isnt undefined
+ bg = brush.bg
+ bg += 8 if bg < 8 and brush.blink
+ else
+ bg = 0
+
+ @ctx.fillStyle = AsciiIo.colors[bg]
+
+ setTextAttributes: (brush) ->
+ if brush.fg isnt undefined
+ fg = brush.fg
+ fg += 8 if fg < 8 and brush.bright
+ else
+ fg = 7
+
+ @ctx.fillStyle = AsciiIo.colors[fg]
+
+ font = @font
+
+ if brush.bright or brush.italic
+ if brush.bright
+ font = "bold #{font}"
+
+ if brush.italic
+ font = "italic #{font}"
+
+ if font != @prevFont
+ @ctx.font = font
+ @prevFont = font
+
+ 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"
diff --git a/app/assets/javascripts/player/terminal_view.js.coffee b/app/assets/javascripts/player/renderers/pre.js.coffee
similarity index 70%
rename from app/assets/javascripts/player/terminal_view.js.coffee
rename to app/assets/javascripts/player/renderers/pre.js.coffee
index 07d208a..e4d28a3 100644
--- a/app/assets/javascripts/player/terminal_view.js.coffee
+++ b/app/assets/javascripts/player/renderers/pre.js.coffee
@@ -1,20 +1,12 @@
-class AsciiIo.TerminalView extends Backbone.View
+class AsciiIo.Renderer.Pre extends AsciiIo.Renderer.Base
tagName: 'pre'
className: 'terminal'
- events:
- 'click': 'onClick'
-
initialize: (options) ->
- @cols = options.cols
- @lines = options.lines
- @cachedSpans = {}
+ super(options)
+ @cachedSpans = {}
@createChildElements()
- @showCursor true
- @startCursorBlink()
- # this.updateScreen();
- # this.render();
createChildElements: ->
i = 0
@@ -25,38 +17,29 @@ class AsciiIo.TerminalView extends Backbone.View
@$el.append "\n"
i++
- onClick: ->
- @trigger('terminal-click')
- @hideToggleOverlay()
+ afterInsertedToDom: ->
+ super()
+ @initialRender()
+ @fixSize()
- clearScreen: ->
- # this.lineData.length = 0;
- # @cursorY = @cursorX = 0
- @$el.find(".line").empty()
+ initialRender: ->
+ changes = {}
- render: (changes, cursorX, cursorY) ->
- @$el.find('.cursor').removeClass('cursor')
+ i = 0
+ while i < @lines
+ changes[i] = undefined
+ i += 1
- for n, data of changes
- c = if parseInt(n) is cursorY then cursorX else undefined
- @renderLine n, data || [], c
+ @render(changes, 0, 0)
- afterInsertedToDom: ->
+ fixSize: ->
width = @$el.width()
height = @$el.height()
@$el.css(width: width + 'px', height: height + 'px')
- showLoadingIndicator: ->
- @$el.append('
')
-
- hideLoadingIndicator: ->
- @$('.loading').remove()
-
- showToggleOverlay: ->
- @$el.append('
')
-
- hideToggleOverlay: ->
- @$('.start-prompt').remove()
+ render: (changes, cursorX, cursorY) ->
+ @$el.find('.cursor').removeClass('cursor')
+ super(changes, cursorX, cursorY)
renderLine: (n, data, cursorX) ->
html = []
@@ -139,17 +122,8 @@ class AsciiIo.TerminalView extends Backbone.View
cursor = @$el.find(".cursor")
cursor.addClass "visible"
- startCursorBlink: ->
- @cursorTimerId = setInterval(@blinkCursor.bind(this), 500)
-
- stopCursorBlink: ->
- if @cursorTimerId
- clearInterval @cursorTimerId
- @cursorTimerId = null
-
- restartCursorBlink: ->
- @stopCursorBlink()
- @resetCursorState()
- @startCursorBlink()
-
- visualBell: ->
+ # TODO: check if it's used
+ clearScreen: ->
+ # this.lineData.length = 0;
+ # @cursorY = @cursorX = 0
+ @$el.find(".line").empty()
diff --git a/app/assets/javascripts/player/vt.js.coffee b/app/assets/javascripts/player/vt.js.coffee
index 483a951..e2b02c2 100644
--- a/app/assets/javascripts/player/vt.js.coffee
+++ b/app/assets/javascripts/player/vt.js.coffee
@@ -4,7 +4,6 @@ class AsciiIo.VT
@sgrInterpreter = new AsciiIo.SgrInterpreter()
@data = ''
@resetTerminal()
- @render()
handleData: (data) ->
if data.match(/^\x1b[\x00-\x1f]/)
diff --git a/app/assets/stylesheets/colors.css b/app/assets/stylesheets/colors.css
new file mode 100644
index 0000000..4f5ee2f
--- /dev/null
+++ b/app/assets/stylesheets/colors.css
@@ -0,0 +1,512 @@
+.fg0 { color: #000000 }
+.bg0 { background-color: #000000 }
+.fg1 { color: #CC0000 }
+.bg1 { background-color: #CC0000 }
+.fg2 { color: #4E9A06 }
+.bg2 { background-color: #4E9A06 }
+.fg3 { color: #C4A000 }
+.bg3 { background-color: #C4A000 }
+.fg4 { color: #3465A4 }
+.bg4 { background-color: #3465A4 }
+.fg5 { color: #75507B }
+.bg5 { background-color: #75507B }
+.fg6 { color: #06989A }
+.bg6 { background-color: #06989A }
+.fg7 { color: #D3D7CF }
+.bg7 { background-color: #D3D7CF }
+.fg8 { color: #555753 }
+.bg8 { background-color: #555753 }
+.fg9 { color: #EF2929 }
+.bg9 { background-color: #EF2929 }
+.fg10 { color: #8AE234 }
+.bg10 { background-color: #8AE234 }
+.fg11 { color: #FCE94F }
+.bg11 { background-color: #FCE94F }
+.fg12 { color: #729FCF }
+.bg12 { background-color: #729FCF }
+.fg13 { color: #AD7FA8 }
+.bg13 { background-color: #AD7FA8 }
+.fg14 { color: #34E2E2 }
+.bg14 { background-color: #34E2E2 }
+.fg15 { color: #EEEEEC }
+.bg15 { background-color: #EEEEEC }
+.fg16 { color: #000000 }
+.bg16 { background-color: #000000 }
+.fg17 { color: #00005f }
+.bg17 { background-color: #00005f }
+.fg18 { color: #000087 }
+.bg18 { background-color: #000087 }
+.fg19 { color: #0000af }
+.bg19 { background-color: #0000af }
+.fg20 { color: #0000d7 }
+.bg20 { background-color: #0000d7 }
+.fg21 { color: #0000ff }
+.bg21 { background-color: #0000ff }
+.fg22 { color: #005f00 }
+.bg22 { background-color: #005f00 }
+.fg23 { color: #005f5f }
+.bg23 { background-color: #005f5f }
+.fg24 { color: #005f87 }
+.bg24 { background-color: #005f87 }
+.fg25 { color: #005faf }
+.bg25 { background-color: #005faf }
+.fg26 { color: #005fd7 }
+.bg26 { background-color: #005fd7 }
+.fg27 { color: #005fff }
+.bg27 { background-color: #005fff }
+.fg28 { color: #008700 }
+.bg28 { background-color: #008700 }
+.fg29 { color: #00875f }
+.bg29 { background-color: #00875f }
+.fg30 { color: #008787 }
+.bg30 { background-color: #008787 }
+.fg31 { color: #0087af }
+.bg31 { background-color: #0087af }
+.fg32 { color: #0087d7 }
+.bg32 { background-color: #0087d7 }
+.fg33 { color: #0087ff }
+.bg33 { background-color: #0087ff }
+.fg34 { color: #00af00 }
+.bg34 { background-color: #00af00 }
+.fg35 { color: #00af5f }
+.bg35 { background-color: #00af5f }
+.fg36 { color: #00af87 }
+.bg36 { background-color: #00af87 }
+.fg37 { color: #00afaf }
+.bg37 { background-color: #00afaf }
+.fg38 { color: #00afd7 }
+.bg38 { background-color: #00afd7 }
+.fg39 { color: #00afff }
+.bg39 { background-color: #00afff }
+.fg40 { color: #00d700 }
+.bg40 { background-color: #00d700 }
+.fg41 { color: #00d75f }
+.bg41 { background-color: #00d75f }
+.fg42 { color: #00d787 }
+.bg42 { background-color: #00d787 }
+.fg43 { color: #00d7af }
+.bg43 { background-color: #00d7af }
+.fg44 { color: #00d7d7 }
+.bg44 { background-color: #00d7d7 }
+.fg45 { color: #00d7ff }
+.bg45 { background-color: #00d7ff }
+.fg46 { color: #00ff00 }
+.bg46 { background-color: #00ff00 }
+.fg47 { color: #00ff5f }
+.bg47 { background-color: #00ff5f }
+.fg48 { color: #00ff87 }
+.bg48 { background-color: #00ff87 }
+.fg49 { color: #00ffaf }
+.bg49 { background-color: #00ffaf }
+.fg50 { color: #00ffd7 }
+.bg50 { background-color: #00ffd7 }
+.fg51 { color: #00ffff }
+.bg51 { background-color: #00ffff }
+.fg52 { color: #5f0000 }
+.bg52 { background-color: #5f0000 }
+.fg53 { color: #5f005f }
+.bg53 { background-color: #5f005f }
+.fg54 { color: #5f0087 }
+.bg54 { background-color: #5f0087 }
+.fg55 { color: #5f00af }
+.bg55 { background-color: #5f00af }
+.fg56 { color: #5f00d7 }
+.bg56 { background-color: #5f00d7 }
+.fg57 { color: #5f00ff }
+.bg57 { background-color: #5f00ff }
+.fg58 { color: #5f5f00 }
+.bg58 { background-color: #5f5f00 }
+.fg59 { color: #5f5f5f }
+.bg59 { background-color: #5f5f5f }
+.fg60 { color: #5f5f87 }
+.bg60 { background-color: #5f5f87 }
+.fg61 { color: #5f5faf }
+.bg61 { background-color: #5f5faf }
+.fg62 { color: #5f5fd7 }
+.bg62 { background-color: #5f5fd7 }
+.fg63 { color: #5f5fff }
+.bg63 { background-color: #5f5fff }
+.fg64 { color: #5f8700 }
+.bg64 { background-color: #5f8700 }
+.fg65 { color: #5f875f }
+.bg65 { background-color: #5f875f }
+.fg66 { color: #5f8787 }
+.bg66 { background-color: #5f8787 }
+.fg67 { color: #5f87af }
+.bg67 { background-color: #5f87af }
+.fg68 { color: #5f87d7 }
+.bg68 { background-color: #5f87d7 }
+.fg69 { color: #5f87ff }
+.bg69 { background-color: #5f87ff }
+.fg70 { color: #5faf00 }
+.bg70 { background-color: #5faf00 }
+.fg71 { color: #5faf5f }
+.bg71 { background-color: #5faf5f }
+.fg72 { color: #5faf87 }
+.bg72 { background-color: #5faf87 }
+.fg73 { color: #5fafaf }
+.bg73 { background-color: #5fafaf }
+.fg74 { color: #5fafd7 }
+.bg74 { background-color: #5fafd7 }
+.fg75 { color: #5fafff }
+.bg75 { background-color: #5fafff }
+.fg76 { color: #5fd700 }
+.bg76 { background-color: #5fd700 }
+.fg77 { color: #5fd75f }
+.bg77 { background-color: #5fd75f }
+.fg78 { color: #5fd787 }
+.bg78 { background-color: #5fd787 }
+.fg79 { color: #5fd7af }
+.bg79 { background-color: #5fd7af }
+.fg80 { color: #5fd7d7 }
+.bg80 { background-color: #5fd7d7 }
+.fg81 { color: #5fd7ff }
+.bg81 { background-color: #5fd7ff }
+.fg82 { color: #5fff00 }
+.bg82 { background-color: #5fff00 }
+.fg83 { color: #5fff5f }
+.bg83 { background-color: #5fff5f }
+.fg84 { color: #5fff87 }
+.bg84 { background-color: #5fff87 }
+.fg85 { color: #5fffaf }
+.bg85 { background-color: #5fffaf }
+.fg86 { color: #5fffd7 }
+.bg86 { background-color: #5fffd7 }
+.fg87 { color: #5fffff }
+.bg87 { background-color: #5fffff }
+.fg88 { color: #870000 }
+.bg88 { background-color: #870000 }
+.fg89 { color: #87005f }
+.bg89 { background-color: #87005f }
+.fg90 { color: #870087 }
+.bg90 { background-color: #870087 }
+.fg91 { color: #8700af }
+.bg91 { background-color: #8700af }
+.fg92 { color: #8700d7 }
+.bg92 { background-color: #8700d7 }
+.fg93 { color: #8700ff }
+.bg93 { background-color: #8700ff }
+.fg94 { color: #875f00 }
+.bg94 { background-color: #875f00 }
+.fg95 { color: #875f5f }
+.bg95 { background-color: #875f5f }
+.fg96 { color: #875f87 }
+.bg96 { background-color: #875f87 }
+.fg97 { color: #875faf }
+.bg97 { background-color: #875faf }
+.fg98 { color: #875fd7 }
+.bg98 { background-color: #875fd7 }
+.fg99 { color: #875fff }
+.bg99 { background-color: #875fff }
+.fg100 { color: #878700 }
+.bg100 { background-color: #878700 }
+.fg101 { color: #87875f }
+.bg101 { background-color: #87875f }
+.fg102 { color: #878787 }
+.bg102 { background-color: #878787 }
+.fg103 { color: #8787af }
+.bg103 { background-color: #8787af }
+.fg104 { color: #8787d7 }
+.bg104 { background-color: #8787d7 }
+.fg105 { color: #8787ff }
+.bg105 { background-color: #8787ff }
+.fg106 { color: #87af00 }
+.bg106 { background-color: #87af00 }
+.fg107 { color: #87af5f }
+.bg107 { background-color: #87af5f }
+.fg108 { color: #87af87 }
+.bg108 { background-color: #87af87 }
+.fg109 { color: #87afaf }
+.bg109 { background-color: #87afaf }
+.fg110 { color: #87afd7 }
+.bg110 { background-color: #87afd7 }
+.fg111 { color: #87afff }
+.bg111 { background-color: #87afff }
+.fg112 { color: #87d700 }
+.bg112 { background-color: #87d700 }
+.fg113 { color: #87d75f }
+.bg113 { background-color: #87d75f }
+.fg114 { color: #87d787 }
+.bg114 { background-color: #87d787 }
+.fg115 { color: #87d7af }
+.bg115 { background-color: #87d7af }
+.fg116 { color: #87d7d7 }
+.bg116 { background-color: #87d7d7 }
+.fg117 { color: #87d7ff }
+.bg117 { background-color: #87d7ff }
+.fg118 { color: #87ff00 }
+.bg118 { background-color: #87ff00 }
+.fg119 { color: #87ff5f }
+.bg119 { background-color: #87ff5f }
+.fg120 { color: #87ff87 }
+.bg120 { background-color: #87ff87 }
+.fg121 { color: #87ffaf }
+.bg121 { background-color: #87ffaf }
+.fg122 { color: #87ffd7 }
+.bg122 { background-color: #87ffd7 }
+.fg123 { color: #87ffff }
+.bg123 { background-color: #87ffff }
+.fg124 { color: #af0000 }
+.bg124 { background-color: #af0000 }
+.fg125 { color: #af005f }
+.bg125 { background-color: #af005f }
+.fg126 { color: #af0087 }
+.bg126 { background-color: #af0087 }
+.fg127 { color: #af00af }
+.bg127 { background-color: #af00af }
+.fg128 { color: #af00d7 }
+.bg128 { background-color: #af00d7 }
+.fg129 { color: #af00ff }
+.bg129 { background-color: #af00ff }
+.fg130 { color: #af5f00 }
+.bg130 { background-color: #af5f00 }
+.fg131 { color: #af5f5f }
+.bg131 { background-color: #af5f5f }
+.fg132 { color: #af5f87 }
+.bg132 { background-color: #af5f87 }
+.fg133 { color: #af5faf }
+.bg133 { background-color: #af5faf }
+.fg134 { color: #af5fd7 }
+.bg134 { background-color: #af5fd7 }
+.fg135 { color: #af5fff }
+.bg135 { background-color: #af5fff }
+.fg136 { color: #af8700 }
+.bg136 { background-color: #af8700 }
+.fg137 { color: #af875f }
+.bg137 { background-color: #af875f }
+.fg138 { color: #af8787 }
+.bg138 { background-color: #af8787 }
+.fg139 { color: #af87af }
+.bg139 { background-color: #af87af }
+.fg140 { color: #af87d7 }
+.bg140 { background-color: #af87d7 }
+.fg141 { color: #af87ff }
+.bg141 { background-color: #af87ff }
+.fg142 { color: #afaf00 }
+.bg142 { background-color: #afaf00 }
+.fg143 { color: #afaf5f }
+.bg143 { background-color: #afaf5f }
+.fg144 { color: #afaf87 }
+.bg144 { background-color: #afaf87 }
+.fg145 { color: #afafaf }
+.bg145 { background-color: #afafaf }
+.fg146 { color: #afafd7 }
+.bg146 { background-color: #afafd7 }
+.fg147 { color: #afafff }
+.bg147 { background-color: #afafff }
+.fg148 { color: #afd700 }
+.bg148 { background-color: #afd700 }
+.fg149 { color: #afd75f }
+.bg149 { background-color: #afd75f }
+.fg150 { color: #afd787 }
+.bg150 { background-color: #afd787 }
+.fg151 { color: #afd7af }
+.bg151 { background-color: #afd7af }
+.fg152 { color: #afd7d7 }
+.bg152 { background-color: #afd7d7 }
+.fg153 { color: #afd7ff }
+.bg153 { background-color: #afd7ff }
+.fg154 { color: #afff00 }
+.bg154 { background-color: #afff00 }
+.fg155 { color: #afff5f }
+.bg155 { background-color: #afff5f }
+.fg156 { color: #afff87 }
+.bg156 { background-color: #afff87 }
+.fg157 { color: #afffaf }
+.bg157 { background-color: #afffaf }
+.fg158 { color: #afffd7 }
+.bg158 { background-color: #afffd7 }
+.fg159 { color: #afffff }
+.bg159 { background-color: #afffff }
+.fg160 { color: #d70000 }
+.bg160 { background-color: #d70000 }
+.fg161 { color: #d7005f }
+.bg161 { background-color: #d7005f }
+.fg162 { color: #d70087 }
+.bg162 { background-color: #d70087 }
+.fg163 { color: #d700af }
+.bg163 { background-color: #d700af }
+.fg164 { color: #d700d7 }
+.bg164 { background-color: #d700d7 }
+.fg165 { color: #d700ff }
+.bg165 { background-color: #d700ff }
+.fg166 { color: #d75f00 }
+.bg166 { background-color: #d75f00 }
+.fg167 { color: #d75f5f }
+.bg167 { background-color: #d75f5f }
+.fg168 { color: #d75f87 }
+.bg168 { background-color: #d75f87 }
+.fg169 { color: #d75faf }
+.bg169 { background-color: #d75faf }
+.fg170 { color: #d75fd7 }
+.bg170 { background-color: #d75fd7 }
+.fg171 { color: #d75fff }
+.bg171 { background-color: #d75fff }
+.fg172 { color: #d78700 }
+.bg172 { background-color: #d78700 }
+.fg173 { color: #d7875f }
+.bg173 { background-color: #d7875f }
+.fg174 { color: #d78787 }
+.bg174 { background-color: #d78787 }
+.fg175 { color: #d787af }
+.bg175 { background-color: #d787af }
+.fg176 { color: #d787d7 }
+.bg176 { background-color: #d787d7 }
+.fg177 { color: #d787ff }
+.bg177 { background-color: #d787ff }
+.fg178 { color: #d7af00 }
+.bg178 { background-color: #d7af00 }
+.fg179 { color: #d7af5f }
+.bg179 { background-color: #d7af5f }
+.fg180 { color: #d7af87 }
+.bg180 { background-color: #d7af87 }
+.fg181 { color: #d7afaf }
+.bg181 { background-color: #d7afaf }
+.fg182 { color: #d7afd7 }
+.bg182 { background-color: #d7afd7 }
+.fg183 { color: #d7afff }
+.bg183 { background-color: #d7afff }
+.fg184 { color: #d7d700 }
+.bg184 { background-color: #d7d700 }
+.fg185 { color: #d7d75f }
+.bg185 { background-color: #d7d75f }
+.fg186 { color: #d7d787 }
+.bg186 { background-color: #d7d787 }
+.fg187 { color: #d7d7af }
+.bg187 { background-color: #d7d7af }
+.fg188 { color: #d7d7d7 }
+.bg188 { background-color: #d7d7d7 }
+.fg189 { color: #d7d7ff }
+.bg189 { background-color: #d7d7ff }
+.fg190 { color: #d7ff00 }
+.bg190 { background-color: #d7ff00 }
+.fg191 { color: #d7ff5f }
+.bg191 { background-color: #d7ff5f }
+.fg192 { color: #d7ff87 }
+.bg192 { background-color: #d7ff87 }
+.fg193 { color: #d7ffaf }
+.bg193 { background-color: #d7ffaf }
+.fg194 { color: #d7ffd7 }
+.bg194 { background-color: #d7ffd7 }
+.fg195 { color: #d7ffff }
+.bg195 { background-color: #d7ffff }
+.fg196 { color: #ff0000 }
+.bg196 { background-color: #ff0000 }
+.fg197 { color: #ff005f }
+.bg197 { background-color: #ff005f }
+.fg198 { color: #ff0087 }
+.bg198 { background-color: #ff0087 }
+.fg199 { color: #ff00af }
+.bg199 { background-color: #ff00af }
+.fg200 { color: #ff00d7 }
+.bg200 { background-color: #ff00d7 }
+.fg201 { color: #ff00ff }
+.bg201 { background-color: #ff00ff }
+.fg202 { color: #ff5f00 }
+.bg202 { background-color: #ff5f00 }
+.fg203 { color: #ff5f5f }
+.bg203 { background-color: #ff5f5f }
+.fg204 { color: #ff5f87 }
+.bg204 { background-color: #ff5f87 }
+.fg205 { color: #ff5faf }
+.bg205 { background-color: #ff5faf }
+.fg206 { color: #ff5fd7 }
+.bg206 { background-color: #ff5fd7 }
+.fg207 { color: #ff5fff }
+.bg207 { background-color: #ff5fff }
+.fg208 { color: #ff8700 }
+.bg208 { background-color: #ff8700 }
+.fg209 { color: #ff875f }
+.bg209 { background-color: #ff875f }
+.fg210 { color: #ff8787 }
+.bg210 { background-color: #ff8787 }
+.fg211 { color: #ff87af }
+.bg211 { background-color: #ff87af }
+.fg212 { color: #ff87d7 }
+.bg212 { background-color: #ff87d7 }
+.fg213 { color: #ff87ff }
+.bg213 { background-color: #ff87ff }
+.fg214 { color: #ffaf00 }
+.bg214 { background-color: #ffaf00 }
+.fg215 { color: #ffaf5f }
+.bg215 { background-color: #ffaf5f }
+.fg216 { color: #ffaf87 }
+.bg216 { background-color: #ffaf87 }
+.fg217 { color: #ffafaf }
+.bg217 { background-color: #ffafaf }
+.fg218 { color: #ffafd7 }
+.bg218 { background-color: #ffafd7 }
+.fg219 { color: #ffafff }
+.bg219 { background-color: #ffafff }
+.fg220 { color: #ffd700 }
+.bg220 { background-color: #ffd700 }
+.fg221 { color: #ffd75f }
+.bg221 { background-color: #ffd75f }
+.fg222 { color: #ffd787 }
+.bg222 { background-color: #ffd787 }
+.fg223 { color: #ffd7af }
+.bg223 { background-color: #ffd7af }
+.fg224 { color: #ffd7d7 }
+.bg224 { background-color: #ffd7d7 }
+.fg225 { color: #ffd7ff }
+.bg225 { background-color: #ffd7ff }
+.fg226 { color: #ffff00 }
+.bg226 { background-color: #ffff00 }
+.fg227 { color: #ffff5f }
+.bg227 { background-color: #ffff5f }
+.fg228 { color: #ffff87 }
+.bg228 { background-color: #ffff87 }
+.fg229 { color: #ffffaf }
+.bg229 { background-color: #ffffaf }
+.fg230 { color: #ffffd7 }
+.bg230 { background-color: #ffffd7 }
+.fg231 { color: #ffffff }
+.bg231 { background-color: #ffffff }
+.fg232 { color: #080808 }
+.bg232 { background-color: #080808 }
+.fg233 { color: #121212 }
+.bg233 { background-color: #121212 }
+.fg234 { color: #1c1c1c }
+.bg234 { background-color: #1c1c1c }
+.fg235 { color: #262626 }
+.bg235 { background-color: #262626 }
+.fg236 { color: #303030 }
+.bg236 { background-color: #303030 }
+.fg237 { color: #3a3a3a }
+.bg237 { background-color: #3a3a3a }
+.fg238 { color: #444444 }
+.bg238 { background-color: #444444 }
+.fg239 { color: #4e4e4e }
+.bg239 { background-color: #4e4e4e }
+.fg240 { color: #585858 }
+.bg240 { background-color: #585858 }
+.fg241 { color: #626262 }
+.bg241 { background-color: #626262 }
+.fg242 { color: #6c6c6c }
+.bg242 { background-color: #6c6c6c }
+.fg243 { color: #767676 }
+.bg243 { background-color: #767676 }
+.fg244 { color: #808080 }
+.bg244 { background-color: #808080 }
+.fg245 { color: #8a8a8a }
+.bg245 { background-color: #8a8a8a }
+.fg246 { color: #949494 }
+.bg246 { background-color: #949494 }
+.fg247 { color: #9e9e9e }
+.bg247 { background-color: #9e9e9e }
+.fg248 { color: #a8a8a8 }
+.bg248 { background-color: #a8a8a8 }
+.fg249 { color: #b2b2b2 }
+.bg249 { background-color: #b2b2b2 }
+.fg250 { color: #bcbcbc }
+.bg250 { background-color: #bcbcbc }
+.fg251 { color: #c6c6c6 }
+.bg251 { background-color: #c6c6c6 }
+.fg252 { color: #d0d0d0 }
+.bg252 { background-color: #d0d0d0 }
+.fg253 { color: #dadada }
+.bg253 { background-color: #dadada }
+.fg254 { color: #e4e4e4 }
+.bg254 { background-color: #e4e4e4 }
+.fg255 { color: #eeeeee }
+.bg255 { background-color: #eeeeee }
diff --git a/app/assets/stylesheets/player.css.scss b/app/assets/stylesheets/player.css.scss
index 2385c55..1022f7f 100644
--- a/app/assets/stylesheets/player.css.scss
+++ b/app/assets/stylesheets/player.css.scss
@@ -38,7 +38,10 @@ $color5: #EDC951;
padding: 2px;
margin: 0px;
display: block;
- font-family: 'Droid Sans Mono', Monospace;
+ font-size: 12px;
+ // font-family: Monaco,"Courier New","DejaVu Sans Mono","Bitstream Vera Sans Mono",monospace;
+ font-family: monospace;
+ // font-family: 'Droid Sans Mono', Monospace;
white-space: pre;
background-color: black;
// line-height: 1.2em;
@@ -143,537 +146,13 @@ $color5: #EDC951;
.underline { text-decoration: underline }
.italic { font-style: italic }
- /* Foregrounds: */
-
- /* ansi colors */
-
- .fg0 { color: #000000 }
- .fg1 { color: #CC0000 }
- .fg2 { color: #4E9A06 }
- .fg3 { color: #C4A000 }
- .fg4 { color: #3465A4 }
- .fg5 { color: #75507B }
- .fg6 { color: #06989A }
- .fg7 { color: #D3D7CF }
- .fg8 { color: #555753; font-weight: bold }
- .fg9 { color: #EF2929; font-weight: bold }
- .fg10 { color: #8AE234; font-weight: bold }
- .fg11 { color: #FCE94F; font-weight: bold }
- .fg12 { color: #729FCF; font-weight: bold }
- .fg13 { color: #AD7FA8; font-weight: bold }
- .fg14 { color: #34E2E2; font-weight: bold }
- .fg15 { color: #EEEEEC; font-weight: bold }
-
- /* 216 rgb colors */
-
- .fg16 { color: #000000 }
- .fg17 { color: #00005f }
- .fg18 { color: #000087 }
- .fg19 { color: #0000af }
- .fg20 { color: #0000d7 }
- .fg21 { color: #0000ff }
- .fg22 { color: #005f00 }
- .fg23 { color: #005f5f }
- .fg24 { color: #005f87 }
- .fg25 { color: #005faf }
- .fg26 { color: #005fd7 }
- .fg27 { color: #005fff }
- .fg28 { color: #008700 }
- .fg29 { color: #00875f }
- .fg30 { color: #008787 }
- .fg31 { color: #0087af }
- .fg32 { color: #0087d7 }
- .fg33 { color: #0087ff }
- .fg34 { color: #00af00 }
- .fg35 { color: #00af5f }
- .fg36 { color: #00af87 }
- .fg37 { color: #00afaf }
- .fg38 { color: #00afd7 }
- .fg39 { color: #00afff }
- .fg40 { color: #00d700 }
- .fg41 { color: #00d75f }
- .fg42 { color: #00d787 }
- .fg43 { color: #00d7af }
- .fg44 { color: #00d7d7 }
- .fg45 { color: #00d7ff }
- .fg46 { color: #00ff00 }
- .fg47 { color: #00ff5f }
- .fg48 { color: #00ff87 }
- .fg49 { color: #00ffaf }
- .fg50 { color: #00ffd7 }
- .fg51 { color: #00ffff }
- .fg52 { color: #5f0000 }
- .fg53 { color: #5f005f }
- .fg54 { color: #5f0087 }
- .fg55 { color: #5f00af }
- .fg56 { color: #5f00d7 }
- .fg57 { color: #5f00ff }
- .fg58 { color: #5f5f00 }
- .fg59 { color: #5f5f5f }
- .fg60 { color: #5f5f87 }
- .fg61 { color: #5f5faf }
- .fg62 { color: #5f5fd7 }
- .fg63 { color: #5f5fff }
- .fg64 { color: #5f8700 }
- .fg65 { color: #5f875f }
- .fg66 { color: #5f8787 }
- .fg67 { color: #5f87af }
- .fg68 { color: #5f87d7 }
- .fg69 { color: #5f87ff }
- .fg70 { color: #5faf00 }
- .fg71 { color: #5faf5f }
- .fg72 { color: #5faf87 }
- .fg73 { color: #5fafaf }
- .fg74 { color: #5fafd7 }
- .fg75 { color: #5fafff }
- .fg76 { color: #5fd700 }
- .fg77 { color: #5fd75f }
- .fg78 { color: #5fd787 }
- .fg79 { color: #5fd7af }
- .fg80 { color: #5fd7d7 }
- .fg81 { color: #5fd7ff }
- .fg82 { color: #5fff00 }
- .fg83 { color: #5fff5f }
- .fg84 { color: #5fff87 }
- .fg85 { color: #5fffaf }
- .fg86 { color: #5fffd7 }
- .fg87 { color: #5fffff }
- .fg88 { color: #870000 }
- .fg89 { color: #87005f }
- .fg90 { color: #870087 }
- .fg91 { color: #8700af }
- .fg92 { color: #8700d7 }
- .fg93 { color: #8700ff }
- .fg94 { color: #875f00 }
- .fg95 { color: #875f5f }
- .fg96 { color: #875f87 }
- .fg97 { color: #875faf }
- .fg98 { color: #875fd7 }
- .fg99 { color: #875fff }
- .fg100 { color: #878700 }
- .fg101 { color: #87875f }
- .fg102 { color: #878787 }
- .fg103 { color: #8787af }
- .fg104 { color: #8787d7 }
- .fg105 { color: #8787ff }
- .fg106 { color: #87af00 }
- .fg107 { color: #87af5f }
- .fg108 { color: #87af87 }
- .fg109 { color: #87afaf }
- .fg110 { color: #87afd7 }
- .fg111 { color: #87afff }
- .fg112 { color: #87d700 }
- .fg113 { color: #87d75f }
- .fg114 { color: #87d787 }
- .fg115 { color: #87d7af }
- .fg116 { color: #87d7d7 }
- .fg117 { color: #87d7ff }
- .fg118 { color: #87ff00 }
- .fg119 { color: #87ff5f }
- .fg120 { color: #87ff87 }
- .fg121 { color: #87ffaf }
- .fg122 { color: #87ffd7 }
- .fg123 { color: #87ffff }
- .fg124 { color: #af0000 }
- .fg125 { color: #af005f }
- .fg126 { color: #af0087 }
- .fg127 { color: #af00af }
- .fg128 { color: #af00d7 }
- .fg129 { color: #af00ff }
- .fg130 { color: #af5f00 }
- .fg131 { color: #af5f5f }
- .fg132 { color: #af5f87 }
- .fg133 { color: #af5faf }
- .fg134 { color: #af5fd7 }
- .fg135 { color: #af5fff }
- .fg136 { color: #af8700 }
- .fg137 { color: #af875f }
- .fg138 { color: #af8787 }
- .fg139 { color: #af87af }
- .fg140 { color: #af87d7 }
- .fg141 { color: #af87ff }
- .fg142 { color: #afaf00 }
- .fg143 { color: #afaf5f }
- .fg144 { color: #afaf87 }
- .fg145 { color: #afafaf }
- .fg146 { color: #afafd7 }
- .fg147 { color: #afafff }
- .fg148 { color: #afd700 }
- .fg149 { color: #afd75f }
- .fg150 { color: #afd787 }
- .fg151 { color: #afd7af }
- .fg152 { color: #afd7d7 }
- .fg153 { color: #afd7ff }
- .fg154 { color: #afff00 }
- .fg155 { color: #afff5f }
- .fg156 { color: #afff87 }
- .fg157 { color: #afffaf }
- .fg158 { color: #afffd7 }
- .fg159 { color: #afffff }
- .fg160 { color: #d70000 }
- .fg161 { color: #d7005f }
- .fg162 { color: #d70087 }
- .fg163 { color: #d700af }
- .fg164 { color: #d700d7 }
- .fg165 { color: #d700ff }
- .fg166 { color: #d75f00 }
- .fg167 { color: #d75f5f }
- .fg168 { color: #d75f87 }
- .fg169 { color: #d75faf }
- .fg170 { color: #d75fd7 }
- .fg171 { color: #d75fff }
- .fg172 { color: #d78700 }
- .fg173 { color: #d7875f }
- .fg174 { color: #d78787 }
- .fg175 { color: #d787af }
- .fg176 { color: #d787d7 }
- .fg177 { color: #d787ff }
- .fg178 { color: #d7af00 }
- .fg179 { color: #d7af5f }
- .fg180 { color: #d7af87 }
- .fg181 { color: #d7afaf }
- .fg182 { color: #d7afd7 }
- .fg183 { color: #d7afff }
- .fg184 { color: #d7d700 }
- .fg185 { color: #d7d75f }
- .fg186 { color: #d7d787 }
- .fg187 { color: #d7d7af }
- .fg188 { color: #d7d7d7 }
- .fg189 { color: #d7d7ff }
- .fg190 { color: #d7ff00 }
- .fg191 { color: #d7ff5f }
- .fg192 { color: #d7ff87 }
- .fg193 { color: #d7ffaf }
- .fg194 { color: #d7ffd7 }
- .fg195 { color: #d7ffff }
- .fg196 { color: #ff0000 }
- .fg197 { color: #ff005f }
- .fg198 { color: #ff0087 }
- .fg199 { color: #ff00af }
- .fg200 { color: #ff00d7 }
- .fg201 { color: #ff00ff }
- .fg202 { color: #ff5f00 }
- .fg203 { color: #ff5f5f }
- .fg204 { color: #ff5f87 }
- .fg205 { color: #ff5faf }
- .fg206 { color: #ff5fd7 }
- .fg207 { color: #ff5fff }
- .fg208 { color: #ff8700 }
- .fg209 { color: #ff875f }
- .fg210 { color: #ff8787 }
- .fg211 { color: #ff87af }
- .fg212 { color: #ff87d7 }
- .fg213 { color: #ff87ff }
- .fg214 { color: #ffaf00 }
- .fg215 { color: #ffaf5f }
- .fg216 { color: #ffaf87 }
- .fg217 { color: #ffafaf }
- .fg218 { color: #ffafd7 }
- .fg219 { color: #ffafff }
- .fg220 { color: #ffd700 }
- .fg221 { color: #ffd75f }
- .fg222 { color: #ffd787 }
- .fg223 { color: #ffd7af }
- .fg224 { color: #ffd7d7 }
- .fg225 { color: #ffd7ff }
- .fg226 { color: #ffff00 }
- .fg227 { color: #ffff5f }
- .fg228 { color: #ffff87 }
- .fg229 { color: #ffffaf }
- .fg230 { color: #ffffd7 }
- .fg231 { color: #ffffff }
-
- /* 24 shades of grey */
-
- .fg232 { color: #080808 }
- .fg233 { color: #121212 }
- .fg234 { color: #1c1c1c }
- .fg235 { color: #262626 }
- .fg236 { color: #303030 }
- .fg237 { color: #3a3a3a }
- .fg238 { color: #444444 }
- .fg239 { color: #4e4e4e }
- .fg240 { color: #585858 }
- .fg241 { color: #626262 }
- .fg242 { color: #6c6c6c }
- .fg243 { color: #767676 }
- .fg244 { color: #808080 }
- .fg245 { color: #8a8a8a }
- .fg246 { color: #949494 }
- .fg247 { color: #9e9e9e }
- .fg248 { color: #a8a8a8 }
- .fg249 { color: #b2b2b2 }
- .fg250 { color: #bcbcbc }
- .fg251 { color: #c6c6c6 }
- .fg252 { color: #d0d0d0 }
- .fg253 { color: #dadada }
- .fg254 { color: #e4e4e4 }
- .fg255 { color: #eeeeee }
-
- /* Backgrounds: */
-
- /* ansi colors */
-
- .bg0 { background-color: #000000 }
- .bg1 { background-color: #CC0000 }
- .bg2 { background-color: #4E9A06 }
- .bg3 { background-color: #C4A000 }
- .bg4 { background-color: #3465A4 }
- .bg5 { background-color: #75507B }
- .bg6 { background-color: #06989A }
- .bg7 { background-color: #D3D7CF }
- .bg8 { background-color: #555753 }
- .bg9 { background-color: #EF2929 }
- .bg10 { background-color: #8AE234 }
- .bg11 { background-color: #FCE94F }
- .bg12 { background-color: #729FCF }
- .bg13 { background-color: #AD7FA8 }
- .bg14 { background-color: #34E2E2 }
- .bg15 { background-color: #EEEEEC }
-
- /* 216 rgb colors */
-
- .bg16 { background-color: #000000 }
- .bg17 { background-color: #00005f }
- .bg18 { background-color: #000087 }
- .bg19 { background-color: #0000af }
- .bg20 { background-color: #0000d7 }
- .bg21 { background-color: #0000ff }
- .bg22 { background-color: #005f00 }
- .bg23 { background-color: #005f5f }
- .bg24 { background-color: #005f87 }
- .bg25 { background-color: #005faf }
- .bg26 { background-color: #005fd7 }
- .bg27 { background-color: #005fff }
- .bg28 { background-color: #008700 }
- .bg29 { background-color: #00875f }
- .bg30 { background-color: #008787 }
- .bg31 { background-color: #0087af }
- .bg32 { background-color: #0087d7 }
- .bg33 { background-color: #0087ff }
- .bg34 { background-color: #00af00 }
- .bg35 { background-color: #00af5f }
- .bg36 { background-color: #00af87 }
- .bg37 { background-color: #00afaf }
- .bg38 { background-color: #00afd7 }
- .bg39 { background-color: #00afff }
- .bg40 { background-color: #00d700 }
- .bg41 { background-color: #00d75f }
- .bg42 { background-color: #00d787 }
- .bg43 { background-color: #00d7af }
- .bg44 { background-color: #00d7d7 }
- .bg45 { background-color: #00d7ff }
- .bg46 { background-color: #00ff00 }
- .bg47 { background-color: #00ff5f }
- .bg48 { background-color: #00ff87 }
- .bg49 { background-color: #00ffaf }
- .bg50 { background-color: #00ffd7 }
- .bg51 { background-color: #00ffff }
- .bg52 { background-color: #5f0000 }
- .bg53 { background-color: #5f005f }
- .bg54 { background-color: #5f0087 }
- .bg55 { background-color: #5f00af }
- .bg56 { background-color: #5f00d7 }
- .bg57 { background-color: #5f00ff }
- .bg58 { background-color: #5f5f00 }
- .bg59 { background-color: #5f5f5f }
- .bg60 { background-color: #5f5f87 }
- .bg61 { background-color: #5f5faf }
- .bg62 { background-color: #5f5fd7 }
- .bg63 { background-color: #5f5fff }
- .bg64 { background-color: #5f8700 }
- .bg65 { background-color: #5f875f }
- .bg66 { background-color: #5f8787 }
- .bg67 { background-color: #5f87af }
- .bg68 { background-color: #5f87d7 }
- .bg69 { background-color: #5f87ff }
- .bg70 { background-color: #5faf00 }
- .bg71 { background-color: #5faf5f }
- .bg72 { background-color: #5faf87 }
- .bg73 { background-color: #5fafaf }
- .bg74 { background-color: #5fafd7 }
- .bg75 { background-color: #5fafff }
- .bg76 { background-color: #5fd700 }
- .bg77 { background-color: #5fd75f }
- .bg78 { background-color: #5fd787 }
- .bg79 { background-color: #5fd7af }
- .bg80 { background-color: #5fd7d7 }
- .bg81 { background-color: #5fd7ff }
- .bg82 { background-color: #5fff00 }
- .bg83 { background-color: #5fff5f }
- .bg84 { background-color: #5fff87 }
- .bg85 { background-color: #5fffaf }
- .bg86 { background-color: #5fffd7 }
- .bg87 { background-color: #5fffff }
- .bg88 { background-color: #870000 }
- .bg89 { background-color: #87005f }
- .bg90 { background-color: #870087 }
- .bg91 { background-color: #8700af }
- .bg92 { background-color: #8700d7 }
- .bg93 { background-color: #8700ff }
- .bg94 { background-color: #875f00 }
- .bg95 { background-color: #875f5f }
- .bg96 { background-color: #875f87 }
- .bg97 { background-color: #875faf }
- .bg98 { background-color: #875fd7 }
- .bg99 { background-color: #875fff }
- .bg100 { background-color: #878700 }
- .bg101 { background-color: #87875f }
- .bg102 { background-color: #878787 }
- .bg103 { background-color: #8787af }
- .bg104 { background-color: #8787d7 }
- .bg105 { background-color: #8787ff }
- .bg106 { background-color: #87af00 }
- .bg107 { background-color: #87af5f }
- .bg108 { background-color: #87af87 }
- .bg109 { background-color: #87afaf }
- .bg110 { background-color: #87afd7 }
- .bg111 { background-color: #87afff }
- .bg112 { background-color: #87d700 }
- .bg113 { background-color: #87d75f }
- .bg114 { background-color: #87d787 }
- .bg115 { background-color: #87d7af }
- .bg116 { background-color: #87d7d7 }
- .bg117 { background-color: #87d7ff }
- .bg118 { background-color: #87ff00 }
- .bg119 { background-color: #87ff5f }
- .bg120 { background-color: #87ff87 }
- .bg121 { background-color: #87ffaf }
- .bg122 { background-color: #87ffd7 }
- .bg123 { background-color: #87ffff }
- .bg124 { background-color: #af0000 }
- .bg125 { background-color: #af005f }
- .bg126 { background-color: #af0087 }
- .bg127 { background-color: #af00af }
- .bg128 { background-color: #af00d7 }
- .bg129 { background-color: #af00ff }
- .bg130 { background-color: #af5f00 }
- .bg131 { background-color: #af5f5f }
- .bg132 { background-color: #af5f87 }
- .bg133 { background-color: #af5faf }
- .bg134 { background-color: #af5fd7 }
- .bg135 { background-color: #af5fff }
- .bg136 { background-color: #af8700 }
- .bg137 { background-color: #af875f }
- .bg138 { background-color: #af8787 }
- .bg139 { background-color: #af87af }
- .bg140 { background-color: #af87d7 }
- .bg141 { background-color: #af87ff }
- .bg142 { background-color: #afaf00 }
- .bg143 { background-color: #afaf5f }
- .bg144 { background-color: #afaf87 }
- .bg145 { background-color: #afafaf }
- .bg146 { background-color: #afafd7 }
- .bg147 { background-color: #afafff }
- .bg148 { background-color: #afd700 }
- .bg149 { background-color: #afd75f }
- .bg150 { background-color: #afd787 }
- .bg151 { background-color: #afd7af }
- .bg152 { background-color: #afd7d7 }
- .bg153 { background-color: #afd7ff }
- .bg154 { background-color: #afff00 }
- .bg155 { background-color: #afff5f }
- .bg156 { background-color: #afff87 }
- .bg157 { background-color: #afffaf }
- .bg158 { background-color: #afffd7 }
- .bg159 { background-color: #afffff }
- .bg160 { background-color: #d70000 }
- .bg161 { background-color: #d7005f }
- .bg162 { background-color: #d70087 }
- .bg163 { background-color: #d700af }
- .bg164 { background-color: #d700d7 }
- .bg165 { background-color: #d700ff }
- .bg166 { background-color: #d75f00 }
- .bg167 { background-color: #d75f5f }
- .bg168 { background-color: #d75f87 }
- .bg169 { background-color: #d75faf }
- .bg170 { background-color: #d75fd7 }
- .bg171 { background-color: #d75fff }
- .bg172 { background-color: #d78700 }
- .bg173 { background-color: #d7875f }
- .bg174 { background-color: #d78787 }
- .bg175 { background-color: #d787af }
- .bg176 { background-color: #d787d7 }
- .bg177 { background-color: #d787ff }
- .bg178 { background-color: #d7af00 }
- .bg179 { background-color: #d7af5f }
- .bg180 { background-color: #d7af87 }
- .bg181 { background-color: #d7afaf }
- .bg182 { background-color: #d7afd7 }
- .bg183 { background-color: #d7afff }
- .bg184 { background-color: #d7d700 }
- .bg185 { background-color: #d7d75f }
- .bg186 { background-color: #d7d787 }
- .bg187 { background-color: #d7d7af }
- .bg188 { background-color: #d7d7d7 }
- .bg189 { background-color: #d7d7ff }
- .bg190 { background-color: #d7ff00 }
- .bg191 { background-color: #d7ff5f }
- .bg192 { background-color: #d7ff87 }
- .bg193 { background-color: #d7ffaf }
- .bg194 { background-color: #d7ffd7 }
- .bg195 { background-color: #d7ffff }
- .bg196 { background-color: #ff0000 }
- .bg197 { background-color: #ff005f }
- .bg198 { background-color: #ff0087 }
- .bg199 { background-color: #ff00af }
- .bg200 { background-color: #ff00d7 }
- .bg201 { background-color: #ff00ff }
- .bg202 { background-color: #ff5f00 }
- .bg203 { background-color: #ff5f5f }
- .bg204 { background-color: #ff5f87 }
- .bg205 { background-color: #ff5faf }
- .bg206 { background-color: #ff5fd7 }
- .bg207 { background-color: #ff5fff }
- .bg208 { background-color: #ff8700 }
- .bg209 { background-color: #ff875f }
- .bg210 { background-color: #ff8787 }
- .bg211 { background-color: #ff87af }
- .bg212 { background-color: #ff87d7 }
- .bg213 { background-color: #ff87ff }
- .bg214 { background-color: #ffaf00 }
- .bg215 { background-color: #ffaf5f }
- .bg216 { background-color: #ffaf87 }
- .bg217 { background-color: #ffafaf }
- .bg218 { background-color: #ffafd7 }
- .bg219 { background-color: #ffafff }
- .bg220 { background-color: #ffd700 }
- .bg221 { background-color: #ffd75f }
- .bg222 { background-color: #ffd787 }
- .bg223 { background-color: #ffd7af }
- .bg224 { background-color: #ffd7d7 }
- .bg225 { background-color: #ffd7ff }
- .bg226 { background-color: #ffff00 }
- .bg227 { background-color: #ffff5f }
- .bg228 { background-color: #ffff87 }
- .bg229 { background-color: #ffffaf }
- .bg230 { background-color: #ffffd7 }
- .bg231 { background-color: #ffffff }
-
- /* 24 shades of grey */
+ .fg8 { font-weight: bold }
+ .fg9 { font-weight: bold }
+ .fg10 { font-weight: bold }
+ .fg11 { font-weight: bold }
+ .fg12 { font-weight: bold }
+ .fg13 { font-weight: bold }
+ .fg14 { font-weight: bold }
+ .fg15 { font-weight: bold }
- .bg232 { background-color: #080808 }
- .bg233 { background-color: #121212 }
- .bg234 { background-color: #1c1c1c }
- .bg235 { background-color: #262626 }
- .bg236 { background-color: #303030 }
- .bg237 { background-color: #3a3a3a }
- .bg238 { background-color: #444444 }
- .bg239 { background-color: #4e4e4e }
- .bg240 { background-color: #585858 }
- .bg241 { background-color: #626262 }
- .bg242 { background-color: #6c6c6c }
- .bg243 { background-color: #767676 }
- .bg244 { background-color: #808080 }
- .bg245 { background-color: #8a8a8a }
- .bg246 { background-color: #949494 }
- .bg247 { background-color: #9e9e9e }
- .bg248 { background-color: #a8a8a8 }
- .bg249 { background-color: #b2b2b2 }
- .bg250 { background-color: #bcbcbc }
- .bg251 { background-color: #c6c6c6 }
- .bg252 { background-color: #d0d0d0 }
- .bg253 { background-color: #dadada }
- .bg254 { background-color: #e4e4e4 }
- .bg255 { background-color: #eeeeee }
}
diff --git a/app/helpers/asciicasts_helper.rb b/app/helpers/asciicasts_helper.rb
index 3b6bf73..dab1e7f 100644
--- a/app/helpers/asciicasts_helper.rb
+++ b/app/helpers/asciicasts_helper.rb
@@ -29,6 +29,12 @@ module AsciicastsHelper
def player_script(asciicast, options = {})
auto_play = options.key?(:auto_play) ? !!options[:auto_play] : false
+ if custom_renderer = params[:renderer]
+ renderer_class = "AsciiIo.Renderer.#{custom_renderer.capitalize}"
+ else
+ renderer_class = "AsciiIo.Renderer.Pre"
+ end
+
return <
$(function() {
@@ -37,6 +43,7 @@ module AsciicastsHelper
cols: #{asciicast.terminal_columns},
lines: #{asciicast.terminal_lines},
model: new AsciiIo.Asciicast({ id: #{asciicast.id} }),
+ rendererClass: #{renderer_class},
autoPlay: #{auto_play}
});
});
diff --git a/config/colors/default.yml b/config/colors/default.yml
new file mode 100644
index 0000000..693dc41
--- /dev/null
+++ b/config/colors/default.yml
@@ -0,0 +1,18 @@
+# Default xterm palette
+
+0: '#000000'
+1: '#CC0000'
+2: '#4E9A06'
+3: '#C4A000'
+4: '#3465A4'
+5: '#75507B'
+6: '#06989A'
+7: '#D3D7CF'
+8: '#555753'
+9: '#EF2929'
+10: '#8AE234'
+11: '#FCE94F'
+12: '#729FCF'
+13: '#AD7FA8'
+14: '#34E2E2'
+15: '#EEEEEC'
diff --git a/config/colors/rgb.yml b/config/colors/rgb.yml
new file mode 100644
index 0000000..ec9c854
--- /dev/null
+++ b/config/colors/rgb.yml
@@ -0,0 +1,245 @@
+# 216 rgb colors
+
+16: '#000000'
+17: '#00005f'
+18: '#000087'
+19: '#0000af'
+20: '#0000d7'
+21: '#0000ff'
+22: '#005f00'
+23: '#005f5f'
+24: '#005f87'
+25: '#005faf'
+26: '#005fd7'
+27: '#005fff'
+28: '#008700'
+29: '#00875f'
+30: '#008787'
+31: '#0087af'
+32: '#0087d7'
+33: '#0087ff'
+34: '#00af00'
+35: '#00af5f'
+36: '#00af87'
+37: '#00afaf'
+38: '#00afd7'
+39: '#00afff'
+40: '#00d700'
+41: '#00d75f'
+42: '#00d787'
+43: '#00d7af'
+44: '#00d7d7'
+45: '#00d7ff'
+46: '#00ff00'
+47: '#00ff5f'
+48: '#00ff87'
+49: '#00ffaf'
+50: '#00ffd7'
+51: '#00ffff'
+52: '#5f0000'
+53: '#5f005f'
+54: '#5f0087'
+55: '#5f00af'
+56: '#5f00d7'
+57: '#5f00ff'
+58: '#5f5f00'
+59: '#5f5f5f'
+60: '#5f5f87'
+61: '#5f5faf'
+62: '#5f5fd7'
+63: '#5f5fff'
+64: '#5f8700'
+65: '#5f875f'
+66: '#5f8787'
+67: '#5f87af'
+68: '#5f87d7'
+69: '#5f87ff'
+70: '#5faf00'
+71: '#5faf5f'
+72: '#5faf87'
+73: '#5fafaf'
+74: '#5fafd7'
+75: '#5fafff'
+76: '#5fd700'
+77: '#5fd75f'
+78: '#5fd787'
+79: '#5fd7af'
+80: '#5fd7d7'
+81: '#5fd7ff'
+82: '#5fff00'
+83: '#5fff5f'
+84: '#5fff87'
+85: '#5fffaf'
+86: '#5fffd7'
+87: '#5fffff'
+88: '#870000'
+89: '#87005f'
+90: '#870087'
+91: '#8700af'
+92: '#8700d7'
+93: '#8700ff'
+94: '#875f00'
+95: '#875f5f'
+96: '#875f87'
+97: '#875faf'
+98: '#875fd7'
+99: '#875fff'
+100: '#878700'
+101: '#87875f'
+102: '#878787'
+103: '#8787af'
+104: '#8787d7'
+105: '#8787ff'
+106: '#87af00'
+107: '#87af5f'
+108: '#87af87'
+109: '#87afaf'
+110: '#87afd7'
+111: '#87afff'
+112: '#87d700'
+113: '#87d75f'
+114: '#87d787'
+115: '#87d7af'
+116: '#87d7d7'
+117: '#87d7ff'
+118: '#87ff00'
+119: '#87ff5f'
+120: '#87ff87'
+121: '#87ffaf'
+122: '#87ffd7'
+123: '#87ffff'
+124: '#af0000'
+125: '#af005f'
+126: '#af0087'
+127: '#af00af'
+128: '#af00d7'
+129: '#af00ff'
+130: '#af5f00'
+131: '#af5f5f'
+132: '#af5f87'
+133: '#af5faf'
+134: '#af5fd7'
+135: '#af5fff'
+136: '#af8700'
+137: '#af875f'
+138: '#af8787'
+139: '#af87af'
+140: '#af87d7'
+141: '#af87ff'
+142: '#afaf00'
+143: '#afaf5f'
+144: '#afaf87'
+145: '#afafaf'
+146: '#afafd7'
+147: '#afafff'
+148: '#afd700'
+149: '#afd75f'
+150: '#afd787'
+151: '#afd7af'
+152: '#afd7d7'
+153: '#afd7ff'
+154: '#afff00'
+155: '#afff5f'
+156: '#afff87'
+157: '#afffaf'
+158: '#afffd7'
+159: '#afffff'
+160: '#d70000'
+161: '#d7005f'
+162: '#d70087'
+163: '#d700af'
+164: '#d700d7'
+165: '#d700ff'
+166: '#d75f00'
+167: '#d75f5f'
+168: '#d75f87'
+169: '#d75faf'
+170: '#d75fd7'
+171: '#d75fff'
+172: '#d78700'
+173: '#d7875f'
+174: '#d78787'
+175: '#d787af'
+176: '#d787d7'
+177: '#d787ff'
+178: '#d7af00'
+179: '#d7af5f'
+180: '#d7af87'
+181: '#d7afaf'
+182: '#d7afd7'
+183: '#d7afff'
+184: '#d7d700'
+185: '#d7d75f'
+186: '#d7d787'
+187: '#d7d7af'
+188: '#d7d7d7'
+189: '#d7d7ff'
+190: '#d7ff00'
+191: '#d7ff5f'
+192: '#d7ff87'
+193: '#d7ffaf'
+194: '#d7ffd7'
+195: '#d7ffff'
+196: '#ff0000'
+197: '#ff005f'
+198: '#ff0087'
+199: '#ff00af'
+200: '#ff00d7'
+201: '#ff00ff'
+202: '#ff5f00'
+203: '#ff5f5f'
+204: '#ff5f87'
+205: '#ff5faf'
+206: '#ff5fd7'
+207: '#ff5fff'
+208: '#ff8700'
+209: '#ff875f'
+210: '#ff8787'
+211: '#ff87af'
+212: '#ff87d7'
+213: '#ff87ff'
+214: '#ffaf00'
+215: '#ffaf5f'
+216: '#ffaf87'
+217: '#ffafaf'
+218: '#ffafd7'
+219: '#ffafff'
+220: '#ffd700'
+221: '#ffd75f'
+222: '#ffd787'
+223: '#ffd7af'
+224: '#ffd7d7'
+225: '#ffd7ff'
+226: '#ffff00'
+227: '#ffff5f'
+228: '#ffff87'
+229: '#ffffaf'
+230: '#ffffd7'
+231: '#ffffff'
+
+# 24 shades of grey
+
+232: '#080808'
+233: '#121212'
+234: '#1c1c1c'
+235: '#262626'
+236: '#303030'
+237: '#3a3a3a'
+238: '#444444'
+239: '#4e4e4e'
+240: '#585858'
+241: '#626262'
+242: '#6c6c6c'
+243: '#767676'
+244: '#808080'
+245: '#8a8a8a'
+246: '#949494'
+247: '#9e9e9e'
+248: '#a8a8a8'
+249: '#b2b2b2'
+250: '#bcbcbc'
+251: '#c6c6c6'
+252: '#d0d0d0'
+253: '#dadada'
+254: '#e4e4e4'
+255: '#eeeeee'
diff --git a/lib/tasks/colors.rake b/lib/tasks/colors.rake
new file mode 100644
index 0000000..2e7cc4e
--- /dev/null
+++ b/lib/tasks/colors.rake
@@ -0,0 +1,21 @@
+desc 'Generate color palettes'
+task :gen_color_palettes do
+ require 'yaml'
+
+ default = YAML.load_file('config/colors/default.yml')
+ rgb = YAML.load_file('config/colors/rgb.yml')
+ colors = default.merge(rgb)
+
+ out = ""
+
+ colors.each do |n, value|
+ out << ".fg#{n} { color: #{value} }\n"
+ out << ".bg#{n} { background-color: #{value} }\n"
+ end
+
+ File.open('app/assets/stylesheets/colors.css', 'w') { |f| f.write out }
+
+ File.open('app/assets/javascripts/player/colors.js', 'w') do |f|
+ f.write "AsciiIo.colors = #{JSON.dump(colors)};"
+ end
+end