fs_browser 0.0.1

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.
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: []