tinymce-rails-documentupload 3.5.8.5

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e031008e784fe63af23e71c55c292e556fd918d1
4
+ data.tar.gz: dc4c2212136065e57834507e2b852299b19c3e8e
5
+ SHA512:
6
+ metadata.gz: 4fcad4fd07ec52c255ac18f3393aabe543a63556b4b7ec5cfb49776b30fb4c1ebd02023191938b4f44e181a5284d4242a3817e2498b827e90ff4d6c872e00851
7
+ data.tar.gz: 99af450a72e56f43a4d6f6eb4c59218551740cc44b5804c7b888bd3e1409a04b1ce28a261b326ff795e4b2704ac339a7eb3409c25ddf7479d66663b35996d11e
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/CHANGELOG.md ADDED
@@ -0,0 +1,3 @@
1
+ # 3.5.8.5 / 2013-05-09
2
+
3
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ MIT LICENSE
2
+
3
+ Copyright (c) 2013 Per Florent Morin <morinflorent@gmail.com>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,119 @@
1
+ # tinymce-rails-documentupload
2
+
3
+ Simple plugin for TinyMCE that allows uploading documents and inserting.
4
+ It makes no assumptions about how you store the documents, but it POSTs to a URL and expects JSON back (see the Setup section).
5
+
6
+ This plugin is adapted from work done by [Christian Bechström Viken for TinyMCE Rails Image Upload plugin](https://github.com/PerfectlyNormal/tinymce-rails-imageupload).
7
+
8
+ The icon used for the button comes from the icon set [Silk by famfamfam](http://www.famfamfam.com/lab/icons/silk/) and the spinner image from [ajaxload.info](http://ajaxload.info/).
9
+
10
+ ## Requirements
11
+
12
+ * Rails >= 3.1
13
+ * TinyMCE using the advanced theme
14
+
15
+ ## Setup
16
+
17
+ ### Add the gem to your Gemfile
18
+
19
+ gem 'tinymce-rails-documentupload', '~> 3.5.8.1'
20
+
21
+ ### Set up TinyMCE as you would normally, but in the call to `.tinymce()`, add
22
+
23
+ plugins: "uploaddocument"
24
+ # theme_advanced_buttonsX must include "uploaddocument" somewhere to have the button appear
25
+
26
+ and the rest should happen automatically.
27
+
28
+ ### Set up upload URL and handler
29
+
30
+ The plugin defaults to POSTing to `/tinymce_documents`. You may modify it by supplying option `uploaddocument_form_url` in the call to `.tinymce()`
31
+
32
+ Routing to your controller must be done manually. Set it up using something similar in `routes.rb`:
33
+
34
+ post '/tinymce_documents' => 'tinymce_documents#create'
35
+
36
+ The plugin will relay option `uploaddocument_hint` in the call to `.tinymce()` to the POSTed URL as param `hint`. You may use this to relay any hints you wish (for example, blog post ID #) to the controller.
37
+
38
+ This action gets called with a file parameter creatively called `file`, and must respond with JSON, containing the URL to the document.
39
+
40
+ The JSON has to be returned with a content type of "text/html" to work, which is going to be fixed as soon as possible ([issue #7](https://github.com/PerfectlyNormal/tinymce-rails-imageupload/issues/7)).
41
+
42
+ Example:
43
+
44
+ class TinymceDocumentsController < ApplicationController
45
+ def create
46
+ # Take upload from params[:file] and store it somehow...
47
+ # Optionally also accept params[:hint] and consume if needed
48
+
49
+ render json: {
50
+ document: {
51
+ url: view_context.document_url(image)
52
+ }
53
+ }, content_type: "text/html"
54
+ end
55
+ end
56
+
57
+ If the JSON response contains a `thumb` object with `url` and `width` and/or `height` key, those will be used in the inserted HTML (`<a href="..."><img src="..." width="..." height="..." alt="..."></a>`), but if those are not present, the inserted HTML is just `<a href="...">description</a>`.
58
+
59
+ ### Default class for a tag
60
+
61
+ By default the plugin doesn't assign any class to the a tag. You can set the class(es) by supplying the `uploaddocument_default_a_class` option in the call to `.tinymce()`.
62
+
63
+ `class="..."` will only be added to the a tag if a default is specified. Otherwise the inserted HTML is just `<a href="...">`.
64
+
65
+ ## Error handling
66
+
67
+ To notify the uploader that an error occurred, return JSON containing a `error` key with a `message`.
68
+ The message gets show in a paragraph with the ID `error_message`, and the input label gets the class `invalid`.
69
+
70
+ Example response:
71
+
72
+ "{"error": {"message": "Invalid file type. Only .jpg, .png and .gif allowed"}}"
73
+
74
+ ## Internationalization
75
+
76
+ I18n is taken care of by `tinymce-rails`. This gem includes strings for english and french.
77
+ To add your own language, create the files `<code>.js` and `<code>_dlg.js` in `vendor/assets/javascripts/tinymce/plugins/uploaddocument/langs` in your application,
78
+ or fork the gem and add your own translations there.
79
+
80
+ To get your custom language precompiled, you have to add it to the list of files manually.
81
+ If you have a fork, just add it to the list in `lib/tinymce-rails-documentupload/rails.rb`, but if you have the translations in the application,
82
+ you can add it like this in `config/application.rb`:
83
+
84
+ config.assets.precompile += %w(tinymce/plugins/uploaddocument/langs/fr.js tinymce/plugins/uploaddocument/langs/fr_dlg.js)
85
+
86
+ The available strings are listed below:
87
+
88
+ ### en.js
89
+
90
+ tinyMCE.addI18n('en.uploaddocument', {
91
+ desc: 'Insert a document from your computer'
92
+ });
93
+
94
+ ### en_dlg.js
95
+
96
+ tinyMCE.addI18n('en.uploaddocument_dlg', {
97
+ title: 'Insert document',
98
+ header: "Insert document",
99
+ input: "Choose a document",
100
+ uploading: "Uploading…",
101
+ blank_input: "Must choose a file",
102
+ bad_response: "Got a bad response from the server",
103
+ blank_response: "Didn't get a response from the server",
104
+ insert: "Insert",
105
+ cancel: "Cancel",
106
+ alt_text: "Document description"
107
+ });
108
+
109
+ ## Versioning
110
+
111
+ The major, minor and patch version of this gem will be mirroring the release of `tinymce-rails` it is tested against.
112
+
113
+ ## Licensing
114
+
115
+ The plugin is released under the MIT license.
116
+
117
+ TinyMCE is released under the LGPL Version 2.1.
118
+
119
+ The icon used for the button comes from the icon set Silk from famfamfam, released under the [Creative Commons Attribution 3.0 License](http://creativecommons.org/licenses/by/3.0/)
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,14 @@
1
+ assets_task = Rake::Task.task_defined?('assets:precompile:primary') ? 'assets:precompile:primary' : 'assets:precompile'
2
+
3
+ Rake::Task[assets_task].enhance do
4
+ require "tinymce/rails/asset_installer"
5
+
6
+ config = Rails.application.config
7
+ target = File.join(Rails.public_path, config.assets.prefix)
8
+ manifest = config.assets.manifest
9
+
10
+ assets = Pathname.new(File.expand_path(File.join(File.dirname(__FILE__),
11
+ "../../vendor/assets/javascripts/tinymce/plugins/uploaddocument")))
12
+ TinyMCE::Rails::AssetInstaller::ASSETS = assets
13
+ TinyMCE::Rails::AssetInstaller.new(target, manifest).install
14
+ end
@@ -0,0 +1,3 @@
1
+ require "tinymce-rails"
2
+ require "tinymce-rails-documentupload/version"
3
+ require "tinymce-rails-documentupload/rails"
@@ -0,0 +1,11 @@
1
+ module Tinymce
2
+ module Rails
3
+ module Documentupload
4
+ class Engine < ::Rails::Engine
5
+ initializer 'TinymceRailsDocumentupload.assets_pipeline' do |app|
6
+ app.config.assets.precompile << "tinymce/plugins/uploaddocument/*"
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module Tinymce
2
+ module Rails
3
+ module Documentupload
4
+ VERSION = "3.5.8.5"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "tinymce-rails-documentupload/version"
4
+
5
+ # Describe your gem and declare its dependencies:
6
+ Gem::Specification.new do |s|
7
+ s.name = "tinymce-rails-documentupload"
8
+ s.version = Tinymce::Rails::Documentupload::VERSION
9
+ s.authors = ["Florent Morin"]
10
+ s.email = ["morinflorent@gmail.com"]
11
+ s.homepage = "https://github.com/florentmorin/tinymce-rails-documentupload"
12
+ s.summary = %q{TinyMCE plugin for taking documents uploads in Rails >= 3.1}
13
+ s.description = %q{TinyMCE plugin for taking documents uploads in Rails >= 3.1}
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.require_paths = ["lib"]
18
+
19
+ s.add_runtime_dependency "railties", ">= 3.1"
20
+ s.add_runtime_dependency "tinymce-rails", "~> 3.5.8.1"
21
+ s.add_development_dependency "bundler", "~> 1.0"
22
+ s.add_development_dependency "rails", ">= 3.1"
23
+ end
@@ -0,0 +1,163 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>{#uploaddocument_dlg.title}</title>
6
+ <style type="text/css">
7
+ form { margin-top: 0.5em; }
8
+ label { margin-bottom: 0.5em; }
9
+ p#error_message { color: #E00; }
10
+ #upload_spinner { padding-top: 4px; padding-left: 3px; }
11
+ #upload_spinner.inactive { display: none; }
12
+ </style>
13
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
14
+ <script type="text/javascript">
15
+ tinyMCEPopup.requireLangPack();
16
+
17
+ var UploadDocumentDialog = {
18
+
19
+ init: function() {
20
+ this.f = document.forms[0];
21
+ this.f.action = tinyMCEPopup.getParam("uploaddocument_form_url", "/tinymce_documents");
22
+ document.getElementById("hint").value = tinyMCEPopup.getParam("uploaddocument_hint", "");
23
+ document.getElementById("authenticity_token").value = this.getMetaContents('csrf-token');
24
+
25
+ this.iframe = document.getElementById("hidden_upload");
26
+ },
27
+
28
+ insert: function() {
29
+ // Detach events first, then attach to avoid double event triggering
30
+ if(this.iframe.attachEvent) {
31
+ this.iframe.detachEvent('onload', UploadDocumentDialog.uploadDone);
32
+ this.iframe.attachEvent('onload', UploadDocumentDialog.uploadDone);
33
+ } else {
34
+ this.iframe.removeEventListener('load', UploadDocumentDialog.uploadDone);
35
+ this.iframe.addEventListener('load', UploadDocumentDialog.uploadDone, false);
36
+ }
37
+ var input = document.getElementById("file_upload");
38
+
39
+ if(input.value != "") {
40
+ document.getElementById("upload_spinner").className = '';
41
+ this.f.submit();
42
+ } else {
43
+ this.handleError(tinyMCEPopup.getLang("uploaddocument_dlg.blank_input", "Must choose a file"));
44
+ }
45
+ },
46
+
47
+ uploadDone: function() {
48
+ document.getElementById("upload_spinner").className = 'inactive';
49
+ var iframe = document.getElementById("hidden_upload");
50
+ if(iframe.document || iframe.contentDocument) {
51
+ var doc = iframe.contentDocument || iframe.contentWindow.document;
52
+ UploadDocumentDialog.handleResponse(doc.getElementsByTagName("body")[0].innerHTML);
53
+ } else {
54
+ UploadDocumentDialog.handleError(tinyMCEPopup.getLang("uploaddocument_dlg.blank_response", "Didn't get a response from the server"));
55
+ }
56
+ },
57
+
58
+ handleResponse: function(ret) {
59
+ try {
60
+ var json = JSON.parse(ret);
61
+
62
+ if(json["error"])
63
+ UploadDocumentDialog.handleError(json["error"]["message"]);
64
+ else {
65
+ tinyMCE.execCommand('mceInsertContent', false, UploadDocumentDialog.buildHTML(json));
66
+ tinyMCEPopup.close();
67
+ }
68
+ } catch(e) {
69
+ UploadDocumentDialog.handleError(tinyMCEPopup.getLang("uploaddocument_dlg.bad_response", "Got a bad response from the server"));
70
+ }
71
+ },
72
+
73
+ buildHTML: function(json) {
74
+ var default_class = tinyMCEPopup.getParam("uploaddocument_default_a_class", "");
75
+ var alt_text = document.getElementById("alt_text").value;
76
+
77
+ var docstr = "<a href='" + json["document"]["url"] + "' target='_blank' type='octet-stream'";
78
+
79
+ if (default_class != "") {
80
+ docstr += " class='" + default_class + "'";
81
+ }
82
+
83
+ docstr += '>'
84
+
85
+ if (json["document"]["thumb"] && json["document"]["thumb"]["url"]) {
86
+ thumb_json = json["document"]["thumb"];
87
+
88
+ docstr += "><img src='" + thumb_json["url"] + "'";
89
+
90
+ if (thumb_json["height"]) {
91
+ docstr += " height='" + thumb_json["height"] + "'";
92
+ }
93
+
94
+ if (thumb_json["width"]) {
95
+ docstr += " width='" + thumb_json["width"] + "'";
96
+ }
97
+
98
+ docstr += " alt='" + alt_text + "' />";
99
+ } else {
100
+ docstr += ">" + alt_text;
101
+ }
102
+
103
+ docstr += "</a>";
104
+
105
+ return docstr;
106
+ },
107
+
108
+ handleError: function(error) {
109
+ var className = 'invalid';
110
+ var label = document.getElementById("file_upload_label");
111
+ var message = document.getElementById("error_message");
112
+
113
+ if(message)
114
+ message.innerHTML = error;
115
+
116
+ // Add the 'invalid' class, avoiding duplicates
117
+ if(label) {
118
+ var cn = label.className;
119
+ if(cn.indexOf(className) == -1) {
120
+ if(cn != '')
121
+ className = ' ' + className;
122
+ label.className = cn + className;
123
+ }
124
+ }
125
+ },
126
+
127
+ getMetaContents: function(mn) {
128
+ var m = (window.opener || window.parent).document.getElementsByTagName('meta');
129
+
130
+ for(var i in m)
131
+ if(m[i].name == mn)
132
+ return m[i].content;
133
+
134
+ return null;
135
+ },
136
+ };
137
+
138
+ tinyMCEPopup.onInit.add(UploadDocumentDialog.init, UploadDocumentDialog);
139
+ </script>
140
+ </head>
141
+ <body>
142
+ <h1>{#uploaddocument_dlg.header}</h1>
143
+
144
+ <form method="post" enctype='multipart/form-data' accept-charset="UTF-8" target="hidden_upload" action='#replaceme' name="uploaddocumentForm">
145
+ <input type="hidden" name="utf8" value="✓">
146
+ <input type="hidden" name="authenticity_token" id="authenticity_token" value="#replaceme">
147
+ <input type="hidden" name="hint" id="hint" value="#replaceme">
148
+ <iframe id="hidden_upload" name="hidden_upload" src="javascript:void(0)" style='width:0;height:0;border:0px solid #fff'></iframe>
149
+
150
+ <label id='file_upload_label' for='file_upload'>{#uploaddocument_dlg.input}:</label>
151
+ <input type='file' name='file' id='file_upload'>
152
+ <p id="error_message"></p>
153
+ <label id='alt_text_label' for='alt_text'>{#uploaddocument_dlg.alt_text}:</label>
154
+ <input type="text" name="alt" id="alt_text">
155
+
156
+ <div class="mceActionPanel">
157
+ <input type="button" id="insert" name="insert" value="{#uploaddocument_dlg.insert}" onclick="UploadDocumentDialog.insert();"/>
158
+ <img src="img/spinner.gif" alt="#{uploaddocument_dlg.uploading}" id="upload_spinner" height="16" width="16" class="inactive">
159
+ <input type="button" id="cancel" name="cancel" value="{#uploaddocument_dlg.cancel}" onclick="tinyMCEPopup.close();" />
160
+ </div>
161
+ </form>
162
+ </body>
163
+ </html>
@@ -0,0 +1,38 @@
1
+ (function() {
2
+ tinymce.PluginManager.requireLangPack('uploaddocument');
3
+ tinymce.create('tinymce.plugins.UploadDocumentPlugin', {
4
+ init: function(ed, url) {
5
+ ed.addCommand('mceUploadDocument', function() {
6
+ return ed.windowManager.open({
7
+ file: url + '/dialog.html',
8
+ width: 350 + parseInt(ed.getLang('uploaddocument.delta_width', 0)),
9
+ height: 180 + parseInt(ed.getLang('uploaddocument.delta_height', 0)),
10
+ inline: 1
11
+ }, {
12
+ plugin_url: url
13
+ });
14
+ });
15
+ ed.addButton('uploaddocument', {
16
+ title: 'uploaddocument.desc',
17
+ cmd: 'mceUploadDocument',
18
+ image: url + '/img/uploaddocument.png'
19
+ });
20
+ return ed.onNodeChange.add(function(ed, cm, n) {
21
+ return cm.setActive('uploaddocument', n.nodeName === 'IMG');
22
+ });
23
+ },
24
+ createControl: function(n, cm) {
25
+ return null;
26
+ },
27
+ getInfo: function() {
28
+ return {
29
+ longname: 'UploadDocument plugin',
30
+ author: 'Per Florent Morin (based on work done by Christian B. Viken for image upload plugin)',
31
+ authorurl: 'https://github.com/florentmorin',
32
+ infourl: 'https://github.com/florentmorin/tinymce-rails-documentupload',
33
+ version: '1.0'
34
+ };
35
+ }
36
+ });
37
+ return tinymce.PluginManager.add('uploaddocument', tinymce.plugins.UploadDocumentPlugin);
38
+ })();
@@ -0,0 +1,3 @@
1
+ tinyMCE.addI18n('en.uploaddocument', {
2
+ desc: 'Insert a document from your computer'
3
+ });
@@ -0,0 +1,12 @@
1
+ tinyMCE.addI18n('en.uploaddocument_dlg', {
2
+ title: 'Insert document',
3
+ header: "Insert document",
4
+ input: "Choose a document",
5
+ uploading: "Uploading…",
6
+ blank_input: "Must choose a file",
7
+ bad_response: "Got a bad response from the server",
8
+ blank_response: "Didn't get a response from the server",
9
+ insert: "Insert",
10
+ cancel: "Cancel",
11
+ alt_text: "Document description"
12
+ });
@@ -0,0 +1,3 @@
1
+ tinyMCE.addI18n('fr.uploaddocument', {
2
+ desc: "Envoyer un document de votre ordinateur"
3
+ });
@@ -0,0 +1,12 @@
1
+ tinyMCE.addI18n('fr.uploaddocument_dlg', {
2
+ title: "Insérer un document",
3
+ header: "Insérer un document",
4
+ input: "Choisissez un document",
5
+ uploading: "Transfert en cours ...",
6
+ blank_input: "Vous devez sélectionner un fichier",
7
+ bad_response: "Le serveur a envoyé une réponse erronée",
8
+ blank_response: "Le serveur n'a pas renvoyé de réponse",
9
+ insert: "Insérer",
10
+ cancel: "Annuler",
11
+ alt_text: "Description du document"
12
+ });
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tinymce-rails-documentupload
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.5.8.5
5
+ platform: ruby
6
+ authors:
7
+ - Florent Morin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: tinymce-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: 3.5.8.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: 3.5.8.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '3.1'
69
+ description: TinyMCE plugin for taking documents uploads in Rails >= 3.1
70
+ email:
71
+ - morinflorent@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - CHANGELOG.md
78
+ - Gemfile
79
+ - LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - lib/tasks/tinymce-uploaddocument-assets.rake
83
+ - lib/tinymce-rails-documentupload.rb
84
+ - lib/tinymce-rails-documentupload/rails.rb
85
+ - lib/tinymce-rails-documentupload/version.rb
86
+ - tinymce-rails-documentupload.gemspec
87
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/dialog.html
88
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/editor_plugin.js
89
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/img/spinner.gif
90
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/img/uploaddocument.png
91
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/langs/en.js
92
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/langs/en_dlg.js
93
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/langs/fr.js
94
+ - vendor/assets/javascripts/tinymce/plugins/uploaddocument/langs/fr_dlg.js
95
+ homepage: https://github.com/florentmorin/tinymce-rails-documentupload
96
+ licenses: []
97
+ metadata: {}
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project:
114
+ rubygems_version: 2.0.3
115
+ signing_key:
116
+ specification_version: 4
117
+ summary: TinyMCE plugin for taking documents uploads in Rails >= 3.1
118
+ test_files: []