fs_browser 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.md +44 -0
  3. data/Rakefile +29 -0
  4. data/app/assets/images/file_browser/file_icons/audio.png +0 -0
  5. data/app/assets/images/file_browser/file_icons/code.png +0 -0
  6. data/app/assets/images/file_browser/file_icons/css.png +0 -0
  7. data/app/assets/images/file_browser/file_icons/db.png +0 -0
  8. data/app/assets/images/file_browser/file_icons/doc.png +0 -0
  9. data/app/assets/images/file_browser/file_icons/exe.png +0 -0
  10. data/app/assets/images/file_browser/file_icons/file.png +0 -0
  11. data/app/assets/images/file_browser/file_icons/flash.png +0 -0
  12. data/app/assets/images/file_browser/file_icons/folder.png +0 -0
  13. data/app/assets/images/file_browser/file_icons/folder_open.png +0 -0
  14. data/app/assets/images/file_browser/file_icons/html.png +0 -0
  15. data/app/assets/images/file_browser/file_icons/image.png +0 -0
  16. data/app/assets/images/file_browser/file_icons/java.png +0 -0
  17. data/app/assets/images/file_browser/file_icons/js.png +0 -0
  18. data/app/assets/images/file_browser/file_icons/linux.png +0 -0
  19. data/app/assets/images/file_browser/file_icons/pdf.png +0 -0
  20. data/app/assets/images/file_browser/file_icons/php.png +0 -0
  21. data/app/assets/images/file_browser/file_icons/ppt.png +0 -0
  22. data/app/assets/images/file_browser/file_icons/psd.png +0 -0
  23. data/app/assets/images/file_browser/file_icons/rb.png +0 -0
  24. data/app/assets/images/file_browser/file_icons/spinner.gif +0 -0
  25. data/app/assets/images/file_browser/file_icons/txt.png +0 -0
  26. data/app/assets/images/file_browser/file_icons/video.png +0 -0
  27. data/app/assets/images/file_browser/file_icons/xls.png +0 -0
  28. data/app/assets/images/file_browser/file_icons/zip.png +0 -0
  29. data/app/assets/javascripts/file_browser/application.js +20 -0
  30. data/app/assets/javascripts/file_browser/entry.js.coffee +49 -0
  31. data/app/assets/javascripts/file_browser/modal.js.coffee +48 -0
  32. data/app/assets/javascripts/file_browser/path.js.coffee +30 -0
  33. data/app/assets/javascripts/file_browser/templates/file_browser/entry.jst.hjs +1 -0
  34. data/app/assets/stylesheets/file_browser/application.css +14 -0
  35. data/app/assets/stylesheets/file_browser/bootstrap_override.css.scss +1 -0
  36. data/app/assets/stylesheets/file_browser/modal.css.scss +32 -0
  37. data/app/controllers/file_browser/application_controller.rb +4 -0
  38. data/app/controllers/file_browser/paths_controller.rb +19 -0
  39. data/app/helpers/file_browser/application_helper.rb +4 -0
  40. data/app/models/file_browser/entry.rb +40 -0
  41. data/app/models/file_browser/path.rb +51 -0
  42. data/app/views/file_browser/_modal.html.haml +9 -0
  43. data/app/views/layouts/file_browser/application.html.erb +14 -0
  44. data/config/routes.rb +3 -0
  45. data/lib/file_browser.rb +4 -0
  46. data/lib/file_browser/engine.rb +5 -0
  47. data/lib/file_browser/version.rb +3 -0
  48. data/lib/tasks/file_browser_tasks.rake +4 -0
  49. metadata +179 -0
@@ -0,0 +1,20 @@
1
+ Copyright 2013 Andrea Longhi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # FileSystem Browser
2
+
3
+ This is a rails 3 engine that allows your to browse the filesystem via a modal window on the browser, simulating the operative system file open window. It relies on twitter bootstrap modal javascript.
4
+
5
+ ![modal example](https://raw.github.com/spaghetticode/fs_browser/master/docs/modal.jpg "modal example")
6
+
7
+ ## Demo
8
+
9
+ You can view a demo of the modal window by starting the rails app in ```spec/dummy```.
10
+
11
+
12
+ ## Usage
13
+
14
+ Add the gem to your rails app Gemfile:
15
+
16
+ ```ruby
17
+ gem 'fs_browser', :git => 'https://github.com/spaghetticode/fs_browser.git'
18
+ ```
19
+
20
+ Add the gem asset manifests:
21
+ in your rails app application.js add:
22
+ ```
23
+ //= require file_browser/application
24
+ ```
25
+ same goes in your rails app application.css:
26
+ ```
27
+ *= require file_browser/application
28
+ ```
29
+
30
+ Include the modal html in any view of your application:
31
+ ```ruby
32
+ <%= render 'file_browser/modal' %>
33
+ ```
34
+
35
+ To start the modal window use the following javascript code:
36
+ ```js
37
+ FileBrowser.Modal.init($('#file-browser'));
38
+ ```
39
+
40
+ # TODO
41
+
42
+ * Integration testing
43
+ * Add configuration for start path
44
+ * Check workings on windows
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'FileBrowser'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+ APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
24
+ load 'rails/tasks/engine.rake'
25
+
26
+
27
+
28
+ Bundler::GemHelper.install_tasks
29
+
@@ -0,0 +1,20 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // the compiled file.
9
+ //
10
+ // WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
11
+ // GO AFTER THE REQUIRES BELOW.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require handlebars
16
+ //= require bootstrap
17
+ //= require ./modal
18
+ //= require ./path
19
+ //= require ./entry
20
+ //= require_tree .
@@ -0,0 +1,49 @@
1
+ class FileBrowser.Entry
2
+ @FILE = 'file'
3
+ @DIRECTORY = 'directory'
4
+ @FLASH = ['flv', 'swf']
5
+ @VIDEO = ['mov', 'avi', 'wmv', 'mp4', 'mkv', 'm4v']
6
+ @AUDIO = ['mp3', 'ogg', 'wav', 'cue', 'm4a']
7
+ @IMAGE = ['png', 'jpg', 'jpeg', 'gif', 'bmp']
8
+ @KNOWN = ['rb', 'js', 'css', 'pdf', 'php', 'ppt', 'psd', 'txt', 'zip', 'doc', 'exe', 'xls', 'java']
9
+
10
+ @all: []
11
+
12
+ @build: (json) ->
13
+ @all = []
14
+ @all.push(new @ entry) for entry in json
15
+
16
+
17
+
18
+ constructor: (json) ->
19
+ @name = json.name
20
+ @type = json.type
21
+ @ext = json.ext
22
+ @icon = @_getIcon()
23
+ @element = @_buildElement()
24
+ @_bindClick()
25
+ @_bindDblClick()
26
+
27
+ isFile: -> @type is @constructor.FILE
28
+ isDirectory: -> @type is @constructor.DIRECTORY
29
+ extChars: -> if @ext then @ext[1..] else 'unk'
30
+
31
+ _getIcon: -> "/assets/file_browser/file_icons/#{@_iconName()}.png"
32
+
33
+ _iconName: ->
34
+ return 'folder' if @isDirectory()
35
+ return 'audio' if @_inArray('AUDIO')
36
+ return 'video' if @_inArray('VIDEO')
37
+ return 'image' if @_inArray('IMAGE')
38
+ return 'flash' if @_inArray('FLASH')
39
+ return @extChars() if @_inArray('KNOWN')
40
+ 'file'
41
+
42
+ _inArray: (name) ->
43
+ @constructor[name].indexOf(@extChars()) >= 0
44
+
45
+ _bindClick: -> FileBrowser.Modal.handleEntryClick(@)
46
+
47
+ _bindDblClick: -> FileBrowser.Modal.handleEntryDblClick(@)
48
+
49
+ _buildElement: -> FileBrowser.Modal.buildEntryElement(@)
@@ -0,0 +1,48 @@
1
+ window.FileBrowser = {}
2
+
3
+ class FileBrowser.Modal
4
+ @init: (@element) ->
5
+ @list = @element.find('ul')
6
+ @element.modal
7
+ keyboard: true
8
+ show: false
9
+ @element.on 'show', -> FileBrowser.Path.getJson()
10
+ @element.modal 'show'
11
+
12
+ @clearList: -> @list.html ''
13
+
14
+ @update: ->
15
+ @buildEntryList()
16
+ @updatePath()
17
+
18
+ @buildEntryList: ->
19
+ @clearList()
20
+ for entry in FileBrowser.Entry.all
21
+ @list.append(entry.element)
22
+
23
+ @handleEntryClick: (entry) ->
24
+ element = entry.element
25
+ element.click =>
26
+ $('.entry').removeClass('selected')
27
+ element.addClass('selected')
28
+ @updatePath entry.name
29
+
30
+ @handleEntryDblClick: (entry) ->
31
+ element = entry.element
32
+ element.dblclick =>
33
+ if entry.type is FileBrowser.Entry.DIRECTORY
34
+ FileBrowser.Path.update entry.name
35
+ @updatePath()
36
+ else
37
+ alert entry.type
38
+
39
+ @buildEntryElement: (entry) ->
40
+ $(JST['file_browser/templates/file_browser/entry'](entry))
41
+
42
+ @updatePath: (name) ->
43
+ dirty = [@currentPath(), name].join @separator()
44
+ clean = dirty.replace new RegExp("#{@separator()}#{@separator()}"), @separator()
45
+ $('#path').val clean
46
+
47
+ @currentPath: -> FileBrowser.Path.current()
48
+ @separator : -> FileBrowser.Path.separator
@@ -0,0 +1,30 @@
1
+ class FileBrowser.Path
2
+ @tree = []
3
+ @separator = '/'
4
+
5
+ @getJson: =>
6
+ $.ajax
7
+ type: 'POST'
8
+ dataType: 'json'
9
+ url: '/file_browser/paths'
10
+ data: {id: @current()}
11
+ success: @build
12
+
13
+ @current: =>
14
+ if @tree.length then @tree.join(@separator) else 'root'
15
+
16
+ @parent: ->
17
+ @tree.pop()
18
+ @current()
19
+
20
+ @build: (json) =>
21
+ @tree.push json.name unless @tree.length
22
+ FileBrowser.Entry.build(json.entries)
23
+ FileBrowser.Modal.update()
24
+
25
+ @update: (entryName) ->
26
+ if entryName is '..'
27
+ @parent()
28
+ else
29
+ @tree.push entryName
30
+ @getJson()
@@ -0,0 +1 @@
1
+ <li class="entry" data-type="{{type}}"><img src="{{icon}}" alt="">{{name}}</li>
@@ -0,0 +1,14 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the top of the
9
+ * compiled file, but it's generally better to create a new file per style scope.
10
+ *
11
+ *= require_self
12
+ *= require_tree .
13
+ *= require ./bootstrap_override
14
+ */
@@ -0,0 +1,32 @@
1
+ /*
2
+ Place all the styles related to the matching controller here.
3
+ They will automatically be included in application.css.
4
+ */
5
+
6
+ #file-browser {
7
+ .modal-header {
8
+ .close {
9
+ margin-top: 13px;
10
+ }
11
+ input {
12
+ width: 93%;
13
+ display: block;
14
+ margin-top:10px;
15
+ }
16
+ }
17
+ .modal-body {
18
+ ul {
19
+ width: 90%;
20
+ height: 200px;
21
+ list-style-type: none;
22
+ }
23
+ .entry {
24
+ img {
25
+ padding: 3px 6px;
26
+ }
27
+ &.selected {
28
+ background: #99CCFF;
29
+ }
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,4 @@
1
+ module FileBrowser
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,19 @@
1
+ require_dependency "file_browser/application_controller"
2
+
3
+ module FileBrowser
4
+ class PathsController < ApplicationController
5
+ respond_to :json
6
+
7
+ def create
8
+ @path = Path.new(path_name)
9
+ # respond_with @path
10
+ render :json => @path
11
+ end
12
+
13
+ private
14
+
15
+ def path_name
16
+ Path.name_from_params(params)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,4 @@
1
+ module FileBrowser
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,40 @@
1
+ module FileBrowser
2
+ class Entry
3
+ FILE = 'file'
4
+ DIRECTORY = 'directory'
5
+ TYPES = [DIRECTORY, FILE]
6
+
7
+ attr_reader :name, :type, :ext, :path
8
+
9
+ def initialize(path)
10
+ @path = path
11
+ @name = get_name
12
+ @type = get_type
13
+ @ext = get_ext
14
+ end
15
+
16
+ TYPES.each do |method_name|
17
+ define_method "#{method_name}?" do
18
+ self.class.const_get("#{method_name}".upcase) == type
19
+ end
20
+ end
21
+
22
+ def as_json(opts={})
23
+ {'name' => name, 'type' => type, 'path' => path, 'ext' => ext}
24
+ end
25
+
26
+ private
27
+
28
+ def get_name
29
+ File.basename(path)
30
+ end
31
+
32
+ def get_type
33
+ TYPES.detect { |type| File.send("#{type}?", path) }
34
+ end
35
+
36
+ def get_ext
37
+ File.extname(name).downcase if file?
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,51 @@
1
+ module FileBrowser
2
+ class Path
3
+ class NotFoundError < Exception; end
4
+ BASE = '/'
5
+
6
+ class << self
7
+ attr_writer :base
8
+
9
+ def base
10
+ @base ||= BASE
11
+ end
12
+ end
13
+
14
+ attr_reader :name, :entries
15
+
16
+ def self.name_from_params(params)
17
+ name = params[:id]
18
+ name == 'root' ? base : name
19
+ end
20
+
21
+ def initialize(name)
22
+ validate(name)
23
+ @name = name
24
+ @entries = get_entries
25
+ end
26
+
27
+ def get_entries
28
+ file_list.map do |entry_name|
29
+ Entry.new(entry_name)
30
+ end
31
+ end
32
+
33
+ def file_list
34
+ list = Dir.glob("#{name}/*")
35
+ list.unshift '..' unless root?
36
+ list
37
+ end
38
+
39
+ def root?
40
+ name == base
41
+ end
42
+
43
+ def base
44
+ self.class.base
45
+ end
46
+
47
+ def validate(name)
48
+ raise NotFoundError unless File.exists?(name)
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,9 @@
1
+ #file-browser.modal.hide.fade
2
+ .modal-header
3
+ %button.close{:type=>"button", 'data-dismiss'=>"modal", 'aria-hidden'=>"true"}×
4
+ %input{:type => 'text', :disabled => 'disabled', :id => 'path', :name => 'path'}
5
+ .modal-body
6
+ %ul
7
+ .modal-footer
8
+ %button.btn{'data-dismiss'=>"modal", 'aria-hidden'=>"true"} Cancel
9
+ %button.btn.btn-primary Open
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>FileBrowser</title>
5
+ <%= stylesheet_link_tag "file_browser/application", :media => "all" %>
6
+ <%= javascript_include_tag "file_browser/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,3 @@
1
+ FileBrowser::Engine.routes.draw do
2
+ resources :paths, :only => :create
3
+ end
@@ -0,0 +1,4 @@
1
+ require "file_browser/engine"
2
+
3
+ module FileBrowser
4
+ end
@@ -0,0 +1,5 @@
1
+ module FileBrowser
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace FileBrowser
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ module FileBrowser
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :file_browser do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,179 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fs_browser
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrea Longhi
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-04 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.13
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.13
30
+ - !ruby/object:Gem::Dependency
31
+ name: sqlite3
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec-rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: capybara
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: guard-rspec
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ description: rails 3 engine to create a modal window to browse the server file system
95
+ email:
96
+ - andrea@spaghetticode.it
97
+ executables: []
98
+ extensions: []
99
+ extra_rdoc_files: []
100
+ files:
101
+ - app/assets/images/file_browser/file_icons/audio.png
102
+ - app/assets/images/file_browser/file_icons/code.png
103
+ - app/assets/images/file_browser/file_icons/css.png
104
+ - app/assets/images/file_browser/file_icons/db.png
105
+ - app/assets/images/file_browser/file_icons/doc.png
106
+ - app/assets/images/file_browser/file_icons/exe.png
107
+ - app/assets/images/file_browser/file_icons/file.png
108
+ - app/assets/images/file_browser/file_icons/flash.png
109
+ - app/assets/images/file_browser/file_icons/folder.png
110
+ - app/assets/images/file_browser/file_icons/folder_open.png
111
+ - app/assets/images/file_browser/file_icons/html.png
112
+ - app/assets/images/file_browser/file_icons/image.png
113
+ - app/assets/images/file_browser/file_icons/java.png
114
+ - app/assets/images/file_browser/file_icons/js.png
115
+ - app/assets/images/file_browser/file_icons/linux.png
116
+ - app/assets/images/file_browser/file_icons/pdf.png
117
+ - app/assets/images/file_browser/file_icons/php.png
118
+ - app/assets/images/file_browser/file_icons/ppt.png
119
+ - app/assets/images/file_browser/file_icons/psd.png
120
+ - app/assets/images/file_browser/file_icons/rb.png
121
+ - app/assets/images/file_browser/file_icons/spinner.gif
122
+ - app/assets/images/file_browser/file_icons/txt.png
123
+ - app/assets/images/file_browser/file_icons/video.png
124
+ - app/assets/images/file_browser/file_icons/xls.png
125
+ - app/assets/images/file_browser/file_icons/zip.png
126
+ - app/assets/javascripts/file_browser/application.js
127
+ - app/assets/javascripts/file_browser/entry.js.coffee
128
+ - app/assets/javascripts/file_browser/modal.js.coffee
129
+ - app/assets/javascripts/file_browser/path.js.coffee
130
+ - app/assets/javascripts/file_browser/templates/file_browser/entry.jst.hjs
131
+ - app/assets/stylesheets/file_browser/application.css
132
+ - app/assets/stylesheets/file_browser/bootstrap_override.css.scss
133
+ - app/assets/stylesheets/file_browser/modal.css.scss
134
+ - app/controllers/file_browser/application_controller.rb
135
+ - app/controllers/file_browser/paths_controller.rb
136
+ - app/helpers/file_browser/application_helper.rb
137
+ - app/models/file_browser/entry.rb
138
+ - app/models/file_browser/path.rb
139
+ - app/views/file_browser/_modal.html.haml
140
+ - app/views/layouts/file_browser/application.html.erb
141
+ - config/routes.rb
142
+ - lib/file_browser/engine.rb
143
+ - lib/file_browser/version.rb
144
+ - lib/file_browser.rb
145
+ - lib/tasks/file_browser_tasks.rake
146
+ - MIT-LICENSE
147
+ - Rakefile
148
+ - README.md
149
+ homepage: https://github.com/spaghetticode/fs_browser
150
+ licenses: []
151
+ post_install_message:
152
+ rdoc_options: []
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ segments:
162
+ - 0
163
+ hash: -783945965777440577
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ! '>='
168
+ - !ruby/object:Gem::Version
169
+ version: '0'
170
+ segments:
171
+ - 0
172
+ hash: -783945965777440577
173
+ requirements: []
174
+ rubyforge_project:
175
+ rubygems_version: 1.8.25
176
+ signing_key:
177
+ specification_version: 3
178
+ summary: rails 3 engine to create a modal window to browse the server file system
179
+ test_files: []