webconsole 0.0.4 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc8e172d83ccc1442f084eba2bc72ce312b8cf05
4
- data.tar.gz: 3b2840ec862428cb116f46affe14c0f226d92827
3
+ metadata.gz: 70395a2c52eb177d5822716aac4e2abfeec7e95f
4
+ data.tar.gz: aec4858a911a98087d24565ae96a0eb737e3589d
5
5
  SHA512:
6
- metadata.gz: 473ea562500056a29d217eb1598d4fe793b9aca2f803caee62e6618215a3c6110a194ed76dbcfbeee850651447c7d3b4177ddd6832a94c27b9835d72be94417b
7
- data.tar.gz: 4c76fa4f13d0a7d0ec4cbace78bc9b4ee89ba64578bc3b68123db8ce5fada1e15a9b20a688c34a20509e7b7cdba7c4eda85c896f791513a4c93343f5881060ed
6
+ metadata.gz: 35ae7c659a3f1eba971b886723cc4c470311111f259660e539ff26b2872919f3c1908688e78e7029e47a11c8ff3615d0b705e04f87a11ec62c20025234d3b266
7
+ data.tar.gz: 5ca14d43ea863d47b7e02abc0e016a8e158c45d938a95c3ce3ee09c7c9ff209a4e6675a754df85be6634e630433b0f06aa38485e11e096c719a65f00f50adf71
Binary file
data/lib/webconsole.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module WebConsole
2
- require_relative "webconsole/constants"
3
- require_relative "webconsole/window_manager"
4
- require_relative "webconsole/controller"
5
- require_relative "webconsole/module"
2
+ require_relative "webconsole/lib/constants"
3
+ require_relative "webconsole/lib/window"
4
+ require_relative "webconsole/lib/controller"
5
+ require_relative "webconsole/lib/view"
6
+ require_relative "webconsole/lib/module"
6
7
  end
@@ -0,0 +1,41 @@
1
+ require_relative 'extension_constants'
2
+ require WEBCONSOLE_FILE
3
+
4
+ module WebConsole::Dependencies
5
+ class Checker
6
+ require_relative 'dependencies/lib/model'
7
+ require_relative 'dependencies/lib/controller'
8
+
9
+ def check_dependencies(dependencies)
10
+ passed = true
11
+ dependencies.each { |dependency|
12
+ dependency_passed = check(dependency)
13
+ if !dependency_passed
14
+ passed = false
15
+ end
16
+ }
17
+ return passed
18
+ end
19
+
20
+ def check(dependency)
21
+ name = dependency.name
22
+ type = dependency.type
23
+ passed = Tester::check(name, type)
24
+ if !passed
25
+ controller.missing_dependency(dependency)
26
+ end
27
+ return passed
28
+ end
29
+
30
+ private
31
+
32
+ def controller
33
+ if !@controller
34
+ @controller = Controller.new
35
+ end
36
+ return @controller
37
+ end
38
+
39
+ end
40
+
41
+ end
@@ -0,0 +1,15 @@
1
+ body, h5 {
2
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
3
+ font-size: 13px;
4
+ }
5
+ h5 {
6
+ font-weight: normal;
7
+ color: red;
8
+ }
9
+ blockquote {
10
+ margin-left: 2em;
11
+ }
12
+ code {
13
+ background-color: #DBE2EC;
14
+ font-family: "Menlo", monospace;
15
+ }
@@ -0,0 +1,10 @@
1
+ function addMissingDependency(name, type, installationInstructions) {
2
+ var source = $("#dependency-template").html();
3
+ var template = Handlebars.compile(source);
4
+ var data = {
5
+ name: name,
6
+ type: type,
7
+ installationInstructions: installationInstructions
8
+ };
9
+ $(template(data)).appendTo("body");
10
+ }
@@ -0,0 +1,36 @@
1
+ require_relative 'tester'
2
+ require_relative 'model'
3
+ require_relative 'view'
4
+
5
+ module WebConsole::Dependencies
6
+
7
+ class Controller < WebConsole::Controller
8
+
9
+ def initialize
10
+ @view = View.new
11
+ end
12
+
13
+ def missing_dependency(dependency)
14
+ name = dependency.name
15
+ type = self.class.string_for_type(dependency.type)
16
+ options = dependency.options
17
+
18
+ if options.has_key?(:installation_instructions)
19
+ installation_instructions = options[:installation_instructions]
20
+ end
21
+
22
+ @view.add_missing_dependency(name, type, installation_instructions)
23
+ end
24
+
25
+ private
26
+
27
+ def self.string_for_type(type)
28
+ case type
29
+ when :shell_command
30
+ return "shell command"
31
+ end
32
+ return nil
33
+ end
34
+
35
+ end
36
+ end
@@ -0,0 +1,10 @@
1
+ module WebConsole::Dependencies
2
+ class Dependency
3
+ attr_reader :name, :type, :options
4
+ def initialize(name, type, options = {})
5
+ @name = name
6
+ @type = type
7
+ @options = options
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,19 @@
1
+ module WebConsole::Dependencies
2
+ module Tester
3
+ def self.check(name, type)
4
+ case type
5
+ when :shell_command
6
+ return check_shell_command(name)
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ require 'shellwords'
13
+ def self.check_shell_command(name)
14
+ command = "type -a #{Shellwords.escape(name)} > /dev/null 2>&1"
15
+ return system(command)
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ module WebConsole::Dependencies
2
+
3
+ class View < WebConsole::View
4
+ BASE_DIRECTORY = File.join(File.dirname(__FILE__), '..')
5
+ VIEWS_DIRECTORY = File.join(BASE_DIRECTORY, "views")
6
+ VIEW_TEMPLATE = File.join(VIEWS_DIRECTORY, 'view.html.erb')
7
+
8
+ def initialize
9
+ super
10
+ self.base_url_path = File.expand_path(BASE_DIRECTORY)
11
+ load_erb_from_path(VIEW_TEMPLATE)
12
+ end
13
+
14
+ ADD_MISSING_DEPENDENCY_FUNCTION = "addMissingDependency"
15
+ def add_missing_dependency(name, type, installation_instructions = nil)
16
+ self.do_javascript_function(ADD_MISSING_DEPENDENCY_FUNCTION, [name, type, installation_instructions])
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title><%= title %></title>
6
+ <%= shared_stylesheet_link_tag "raster" %>
7
+ <link rel="stylesheet" href="css/style.css" />
8
+ <script id="dependency-template" type="text/x-handlebars-template">
9
+ <section>
10
+ <header>
11
+ <h5>Dependency <span class="type">{{type}}</span> <code class="name">{{name}}</code> not found.</h5>
12
+ </header>
13
+ {{#if installationInstructions}}
14
+ <p><blockquote class="installation">To install <code>{{name}}</code>: {{{installationInstructions}}}</blockquote></p>
15
+ {{/if}}
16
+ </section>
17
+ </script>
18
+ <%= shared_javascript_include_tag "handlebars" %>
19
+ <%= shared_javascript_include_tag "zepto" %>
20
+ <script type="text/javascript" src="js/wcdependencies.js"></script>
21
+ </head>
22
+ <body>
23
+
24
+ </body>
25
+ </html>
@@ -0,0 +1 @@
1
+ WEBCONSOLE_FILE = File.join(File.dirname(__FILE__), "../webconsole")
@@ -6,5 +6,5 @@ module WebConsole
6
6
  SHARED_RESOURCES_URL_KEY = 'WC_SHARED_RESOURCES_URL'
7
7
 
8
8
  # Directories
9
- APPLESCRIPT_DIRECTORY = File.join(File.dirname(__FILE__), "..", "applescript")
9
+ APPLESCRIPT_DIRECTORY = File.join(File.dirname(__FILE__), "..", "..", "applescript")
10
10
  end
@@ -0,0 +1,5 @@
1
+ module WebConsole
2
+ class Controller
3
+ attr_reader :view
4
+ end
5
+ end
File without changes
@@ -0,0 +1,34 @@
1
+ require_relative "view/javascript"
2
+ require_relative "view/erb"
3
+ require_relative "view/resources"
4
+
5
+ module WebConsole
6
+ class View
7
+
8
+ attr_reader :window
9
+ def initialize
10
+ @window = WebConsole::Window.new
11
+ end
12
+
13
+ def base_url=(value)
14
+ @window.base_url = value
15
+ end
16
+
17
+ def base_url_path=(value)
18
+ @window.base_url_path = value
19
+ end
20
+
21
+ def load_html(html)
22
+ @window.load_html(html)
23
+ end
24
+
25
+ def do_javascript(javascript)
26
+ return @window.do_javascript(javascript)
27
+ end
28
+
29
+ def close
30
+ @window.close
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,17 @@
1
+ module WebConsole
2
+ class View
3
+
4
+ require 'erb'
5
+
6
+ def load_erb_from_path(path)
7
+ erb = File.new(path).read
8
+ load_erb(erb)
9
+ end
10
+
11
+ def load_erb(erb)
12
+ template = ERB.new(erb, nil, '-')
13
+ html = template.result(binding)
14
+ load_html(html)
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,78 @@
1
+ module WebConsole
2
+ class View
3
+
4
+ def do_javascript_function(function, arguments = nil)
5
+ javascript = self.class.javascript_function(function, arguments)
6
+ result = do_javascript(javascript)
7
+ result.chomp!
8
+
9
+ if result.is_integer?
10
+ return result.to_i
11
+ end
12
+
13
+ if result.is_float?
14
+ return result.to_f
15
+ end
16
+
17
+ return result
18
+ end
19
+
20
+ def self.javascript_function(function, arguments = nil)
21
+ function = function.dup
22
+ function << '('
23
+
24
+ if arguments
25
+ arguments.each { |argument|
26
+ if argument
27
+ function << argument.javascript_argument
28
+ else
29
+ function << "null"
30
+ end
31
+ function << ', '
32
+ }
33
+ function = function[0...-2]
34
+ end
35
+
36
+ function << ');'
37
+
38
+ return function
39
+ end
40
+
41
+ private
42
+
43
+ class ::String
44
+ def javascript_argument
45
+ return "'#{self.javascript_escape}'"
46
+ end
47
+
48
+ def javascript_escape
49
+ self.gsub('\\', "\\\\\\\\").gsub("\n", "\\\\n").gsub("'", "\\\\'")
50
+ end
51
+
52
+ def javascript_escape!
53
+ replace(self.javascript_escape)
54
+ end
55
+
56
+ def is_float?
57
+ !!Float(self) rescue false
58
+ end
59
+
60
+ def is_integer?
61
+ self.to_i.to_s == self
62
+ end
63
+ end
64
+
65
+ class ::Float
66
+ def javascript_argument
67
+ return self.to_s
68
+ end
69
+ end
70
+
71
+ class ::Integer
72
+ def javascript_argument
73
+ return self.to_s
74
+ end
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,48 @@
1
+ module WebConsole
2
+ class View
3
+ require 'open-uri'
4
+
5
+ require_relative "../constants"
6
+ require_relative "../module"
7
+
8
+ attr_accessor :title
9
+
10
+ CSS_EXTENSION = ".css"
11
+ CSS_PATH_COMPONENT = "css/"
12
+ def shared_stylesheet_link_tag(resource)
13
+ uri = URI.join(shared_resources_url, CSS_PATH_COMPONENT, resource + CSS_EXTENSION)
14
+ return stylesheet_link_tag(uri.to_s)
15
+ end
16
+
17
+ def stylesheet_link_tag(url)
18
+ return "<link rel=\"stylesheet\" href=\"#{url}\" />"
19
+ end
20
+
21
+ JS_EXTENSION = ".js"
22
+ JS_PATH_COMPONENT = "js/"
23
+ def shared_javascript_include_tag(resource)
24
+ uri = URI.join(shared_resources_url, JS_PATH_COMPONENT, resource + JS_EXTENSION)
25
+ return javascript_include_tag(uri.to_s)
26
+ end
27
+
28
+ def javascript_include_tag(url)
29
+ return "<script type=\"text/javascript\" src=\"#{url}\"></script>"
30
+ end
31
+
32
+ def title
33
+ if !@title && ENV.has_key?(PLUGIN_NAME_KEY)
34
+ @title = ENV[PLUGIN_NAME_KEY]
35
+ end
36
+ return @title
37
+ end
38
+
39
+ private
40
+
41
+ def shared_resources_url
42
+ if !@shared_resources_url
43
+ @shared_resources_url = ENV.has_key?(SHARED_RESOURCES_URL_KEY)? ENV[SHARED_RESOURCES_URL_KEY] : WebConsole::shared_resources_url
44
+ end
45
+ return @shared_resources_url
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  module WebConsole
2
- class WindowManager
2
+ class Window
3
3
  require_relative "constants"
4
4
 
5
5
  attr_writer :base_url
@@ -13,10 +13,14 @@ module WebConsole
13
13
  end
14
14
 
15
15
  LOADHTML_SCRIPT = File.join(APPLESCRIPT_DIRECTORY, "load_html.scpt")
16
+ LOADHTMLWITHBASEURL_SCRIPT = File.join(APPLESCRIPT_DIRECTORY, "load_html_with_base_url.scpt")
16
17
  def load_html(html)
17
18
  arguments = [html]
18
19
 
20
+ script = LOADHTML_SCRIPT
21
+
19
22
  if @base_url
23
+ script = LOADHTMLWITHBASEURL_SCRIPT
20
24
  arguments.push(@base_url)
21
25
  end
22
26
 
@@ -24,7 +28,7 @@ module WebConsole
24
28
  arguments.push(window_id)
25
29
  end
26
30
 
27
- result = WebConsole::run_applescript(LOADHTML_SCRIPT, arguments)
31
+ result = WebConsole::run_applescript(script, arguments)
28
32
  if !window_id
29
33
  # This allows a window manager created without a window_id and then be assigned the window_id when load_html is called.
30
34
  @window_id = self.class.window_id_from_result(result)
@@ -53,5 +57,6 @@ module WebConsole
53
57
  def self.window_id_from_result(result)
54
58
  return result.split.last.to_i
55
59
  end
60
+
56
61
  end
57
62
  end
@@ -0,0 +1,58 @@
1
+ require_relative 'extension_constants'
2
+ require WEBCONSOLE_FILE
3
+
4
+ module WebConsole::REPL
5
+ require_relative "repl/lib/input_controller"
6
+ require_relative "repl/lib/output_controller"
7
+ require_relative "repl/lib/view"
8
+
9
+ class Wrapper
10
+ require 'pty'
11
+ def initialize(command)
12
+
13
+ PTY.spawn(command) do |output, input, pid|
14
+ Thread.new do
15
+ output.each { |line|
16
+ output_controller.parse_output(line)
17
+ }
18
+ end
19
+ @input = input
20
+ end
21
+ end
22
+
23
+ def parse_input(input)
24
+ input_controller.parse_input(input)
25
+ write_input(input)
26
+ end
27
+
28
+ def write_input(input)
29
+ @input.write(input)
30
+ end
31
+
32
+ private
33
+
34
+ def input_controller
35
+ if !@input_controller
36
+ @input_controller = InputController.new
37
+ @input_controller.view = view
38
+ end
39
+ return @input_controller
40
+ end
41
+
42
+ def output_controller
43
+ if !@output_controller
44
+ @output_controller = OutputController.new
45
+ @output_controller.view = view
46
+ end
47
+ return @output_controller
48
+ end
49
+
50
+ def view
51
+ if !@view
52
+ @view = View.new
53
+ end
54
+ return @view
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1,20 @@
1
+ body {
2
+ font-family: "Menlo", monospace;
3
+ font-size: 13px;
4
+ }
5
+ li {
6
+ list-style: none;
7
+ white-space: pre-wrap;
8
+ }
9
+ pre {
10
+ position: relative;
11
+ padding-left: 18px;
12
+ }
13
+ pre.output code:before
14
+ {
15
+ content: '>';
16
+ font-weight: bold;
17
+ left: 7px;
18
+ position: absolute;
19
+ opacity: 0.5;
20
+ }
@@ -0,0 +1,17 @@
1
+ var WcREPL = {
2
+ addCode: function(code, source) {
3
+ var template = Handlebars.compile(source);
4
+ var data = {
5
+ code: code
6
+ };
7
+ return $(template(data)).appendTo("body");
8
+ },
9
+ addInput: function(code) {
10
+ var source = $("#input-template").html();
11
+ this.addCode(code, source);
12
+ },
13
+ addOutput: function(code) {
14
+ var source = $("#output-template").html();
15
+ this.addCode(code, source);
16
+ }
17
+ }
@@ -0,0 +1,17 @@
1
+ module WebConsole::REPL
2
+ class InputController < WebConsole::Controller
3
+
4
+ attr_accessor :view
5
+ def initialize
6
+ end
7
+
8
+ def parse_input(input)
9
+ input = input.dup
10
+ input.chomp!
11
+ if !input.strip.empty? # Ignore empty lines
12
+ @view.add_input(input)
13
+ end
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module WebConsole::REPL
2
+ class OutputController < WebConsole::Controller
3
+
4
+ attr_accessor :view
5
+ def initialize
6
+ end
7
+
8
+ def parse_output(output)
9
+ output = output.dup
10
+ output.gsub!(/\x1b[^m]*m/, "") # Remove escape sequences
11
+ output.chomp!
12
+ if !output.strip.empty? # Ignore empty lines
13
+ @view.add_output(output)
14
+ end
15
+ end
16
+
17
+ end
18
+ end
@@ -0,0 +1,68 @@
1
+ module WebConsole::REPL
2
+ class View < WebConsole::View
3
+
4
+ BASE_DIRECTORY = File.join(File.dirname(__FILE__), "..")
5
+ VIEWS_DIRECTORY = File.join(BASE_DIRECTORY, "view")
6
+ VIEW_TEMPLATE = File.join(VIEWS_DIRECTORY, 'view.html.erb')
7
+ def initialize
8
+ super
9
+ self.base_url_path = File.expand_path(BASE_DIRECTORY)
10
+ load_erb_from_path(VIEW_TEMPLATE)
11
+ end
12
+
13
+ ADD_INPUT_JAVASCRIPT_FUNCTION = "WcREPL.addInput"
14
+ def add_input(input)
15
+ do_javascript_function(ADD_INPUT_JAVASCRIPT_FUNCTION, [input])
16
+ end
17
+
18
+ ADD_OUTPUT_JAVASCRIPT_FUNCTION = "WcREPL.addOutput"
19
+ def add_output(output)
20
+ do_javascript_function(ADD_OUTPUT_JAVASCRIPT_FUNCTION, [output])
21
+ end
22
+
23
+ # Helpers to allow easy loading of REPL resource even from another base URL
24
+
25
+ def repl_header_tags
26
+ return %Q[
27
+ #{repl_stylesheet_link_tag}
28
+ #{repl_handlebars_template_tags}
29
+ #{shared_javascript_include_tag("handlebars")}
30
+ #{shared_javascript_include_tag("zepto")}
31
+ #{repl_javascript_include_tag}
32
+ ]
33
+ end
34
+
35
+ def repl_handlebars_template_tags
36
+ return %Q[
37
+ <script id="output-template" type="text/x-handlebars-template">
38
+ <pre class="output"><code>{{code}}</code></pre>
39
+ </script>
40
+ <script id="input-template" type="text/x-handlebars-template">
41
+ <pre><code>{{code}}</code></pre>
42
+ </script>]
43
+ end
44
+
45
+ def repl_stylesheet_link_tag
46
+ path = File.join(repl_base_resource_path, "css/style.css")
47
+ url = repl_url_for_path(path)
48
+ return stylesheet_link_tag(url)
49
+ end
50
+
51
+ def repl_javascript_include_tag
52
+ path = File.join(repl_base_resource_path, "js/wcrepl.js")
53
+ url = repl_url_for_path(path)
54
+ return javascript_include_tag(url)
55
+ end
56
+
57
+ require 'open-uri'
58
+ def repl_url_for_path(path)
59
+ uri = URI::encode(path)
60
+ return "file://" + uri
61
+ end
62
+
63
+ def repl_base_resource_path
64
+ path = File.expand_path(File.join(File.dirname(__FILE__), "../"))
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,12 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8" />
5
+ <title><%= title %></title>
6
+ <%= shared_stylesheet_link_tag "raster" %>
7
+ <%= repl_header_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ </body>
12
+ </html>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webconsole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roben Kleene
@@ -16,21 +16,42 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
- - lib/webconsole.rb
20
- - lib/webconsole/constants.rb
21
- - lib/webconsole/controller.rb
22
- - lib/webconsole/module.rb
23
- - lib/webconsole/window_manager.rb
24
- - lib/applescript/resource_path_for_plugin.scpt
25
- - lib/applescript/resource_url_for_plugin.scpt
26
19
  - lib/applescript/close_window.scpt
27
20
  - lib/applescript/do_javascript.scpt
28
21
  - lib/applescript/load_html.scpt
29
- - lib/applescript/run_plugin.scpt
22
+ - lib/applescript/load_html_with_base_url.scpt
30
23
  - lib/applescript/load_plugin.scpt
31
24
  - lib/applescript/plugin_has_windows.scpt
32
25
  - lib/applescript/plugin_read_from_standard_input.scpt
26
+ - lib/applescript/resource_path_for_plugin.scpt
27
+ - lib/applescript/resource_url_for_plugin.scpt
28
+ - lib/applescript/run_plugin.scpt
33
29
  - lib/applescript/window_id_for_plugin.scpt
30
+ - lib/webconsole/dependencies/css/style.css
31
+ - lib/webconsole/dependencies/js/wcdependencies.js
32
+ - lib/webconsole/dependencies/lib/controller.rb
33
+ - lib/webconsole/dependencies/lib/model.rb
34
+ - lib/webconsole/dependencies/lib/tester.rb
35
+ - lib/webconsole/dependencies/lib/view.rb
36
+ - lib/webconsole/dependencies/views/view.html.erb
37
+ - lib/webconsole/dependencies.rb
38
+ - lib/webconsole/extension_constants.rb
39
+ - lib/webconsole/lib/constants.rb
40
+ - lib/webconsole/lib/controller.rb
41
+ - lib/webconsole/lib/module.rb
42
+ - lib/webconsole/lib/view/erb.rb
43
+ - lib/webconsole/lib/view/javascript.rb
44
+ - lib/webconsole/lib/view/resources.rb
45
+ - lib/webconsole/lib/view.rb
46
+ - lib/webconsole/lib/window.rb
47
+ - lib/webconsole/repl/css/style.css
48
+ - lib/webconsole/repl/js/wcrepl.js
49
+ - lib/webconsole/repl/lib/input_controller.rb
50
+ - lib/webconsole/repl/lib/output_controller.rb
51
+ - lib/webconsole/repl/lib/view.rb
52
+ - lib/webconsole/repl/view/view.html.erb
53
+ - lib/webconsole/repl.rb
54
+ - lib/webconsole.rb
34
55
  homepage:
35
56
  licenses: []
36
57
  metadata: {}
@@ -1,54 +0,0 @@
1
- require 'erb'
2
- require 'open-uri'
3
-
4
- module WebConsole
5
- class Controller
6
- require_relative "constants"
7
- require_relative "module"
8
-
9
- attr_reader :name
10
- def initialize(delegate = nil, erb_template_path = nil)
11
- @delegate = delegate
12
-
13
- template_erb = ERB.new(File.new(erb_template_path).read, nil, '-')
14
- html = template_erb.result(binding)
15
-
16
- if @delegate
17
- @delegate.load_html(html)
18
- end
19
- end
20
-
21
- CSS_EXTENSION = ".css"
22
- CSS_PATH_COMPONENT = "css/"
23
- def shared_stylesheet_link_tag(resource)
24
- uri = URI.join(shared_resources_url, CSS_PATH_COMPONENT, resource + CSS_EXTENSION)
25
- return "<link rel=\"stylesheet\" href=\"#{uri.to_s}\" />"
26
- end
27
- JS_EXTENSION = ".js"
28
- JS_PATH_COMPONENT = "js/"
29
- def shared_javascript_include_tag(resource)
30
- uri = URI.join(shared_resources_url, JS_PATH_COMPONENT, resource + JS_EXTENSION)
31
- return "<script type=\"text/javascript\" src=\"#{uri.to_s}\"></script>"
32
- end
33
-
34
- private
35
-
36
- def shared_resources_url
37
- if !@shared_resources_url
38
- @shared_resources_url = ENV.has_key?(SHARED_RESOURCES_URL_KEY)? ENV[SHARED_RESOURCES_URL_KEY] : WebConsole::shared_resources_url
39
- end
40
- return @shared_resources_url
41
- end
42
-
43
- class ::String
44
- def javascript_escape
45
- self.gsub('\\', "\\\\\\\\").gsub("\n", "\\\\n").gsub("'", "\\\\'")
46
- end
47
-
48
- def javascript_escape!
49
- replace(self.javascript_escape)
50
- end
51
- end
52
-
53
- end
54
- end