Class: Weaver::Code

Inherits:
Object
  • Object
show all
Defined in:
lib/weaver/element_types/code.rb

Instance Method Summary collapse

Constructor Details

#initialize(page, anchors, lang, options = {}) ⇒ Code

Returns a new instance of Code.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/weaver/element_types/code.rb', line 5

def initialize(page, anchors, lang, options={})
  @page = page
  @anchors = anchors
  @content = ''
  @options = options

  codeArray = @anchors['code']

  @anchors['code'] = [] unless @anchors['code']

  codeArray = @anchors['code']

  @codeName = "code#{codeArray.length}"
  codeArray << @codeName

  @page.request_css 'css/plugins/codemirror/codemirror.css'
  @page.request_js 'js/plugins/codemirror/codemirror.js'

  language lang
end

Instance Method Details

#content(text) ⇒ Object



41
42
43
# File 'lib/weaver/element_types/code.rb', line 41

def content(text)
  @content = text
end

#generateObject



68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/weaver/element_types/code.rb', line 68

def generate
  content = @content
  codeName = @codeName

  elem = Elements.new(@page, @anchors)

  elem.instance_eval do
    textarea id: codeName do
      text content
    end
  end

  elem.generate
end

#generate_scriptObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/weaver/element_types/code.rb', line 51

def generate_script
  @options[:lineNumbers] ||= true
  @options[:matchBrackets] ||= true
  @options[:styleActiveLine] ||= true
  @options[:mode] ||= 'javascript'
  @options[:readOnly] ||= true

  <<-CODESCRIPT
		$(document).ready(function()
		{
			CodeMirror.fromTextArea(document.getElementById("#{@codeName}"),
JSON.parse('#{@options.to_json}')
			);
 });
  CODESCRIPT
end

#language(lang) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/weaver/element_types/code.rb', line 26

def language(lang)
  # TODO: improve langmap
  langmap = {
    javascript: { mime: 'text/javascript', file: 'javascript/javascript' }
  }

  if langmap[lang]
    @options[:mode] = langmap[lang][:mime]
    @page.request_js "js/plugins/codemirror/mode/#{langmap[lang][:file]}.js"
  else
    @options[:mode] = "text/x-#{lang}"
    @page.request_js "js/plugins/codemirror/mode/#{lang}/#{lang}.js"
  end
end

#theme(name) ⇒ Object



45
46
47
48
49
# File 'lib/weaver/element_types/code.rb', line 45

def theme(name)
  @options[:theme] = name

  @page.request_css "css/plugins/codemirror/#{name}.css"
end