tinymce-rails-imageupload 3.5.8.6 → 4.0.16.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +6 -14
  2. checksums.yaml.gz.asc +14 -14
  3. data.tar.gz.asc +14 -14
  4. data/CHANGELOG.md +3 -4
  5. data/README.md +69 -55
  6. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/de.js +11 -0
  7. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/en.js +11 -0
  8. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/es.js +11 -0
  9. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/fr.js +11 -0
  10. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/nb.js +11 -0
  11. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/pt.js +11 -0
  12. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/pt_BR.js +11 -0
  13. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/ru.js +11 -0
  14. data/app/assets/javascripts/tinymce/plugins/uploadimage/langs/zh-cn.js +11 -0
  15. data/app/assets/javascripts/tinymce/plugins/uploadimage/plugin.js +228 -0
  16. data/lib/tasks/tinymce-uploadimage-assets.rake +3 -11
  17. data/lib/tinymce-rails-imageupload/version.rb +1 -1
  18. metadata +49 -59
  19. metadata.gz.asc +14 -14
  20. data/.gitignore +0 -4
  21. data/Gemfile +0 -4
  22. data/Rakefile +0 -1
  23. data/tinymce-rails-imageupload.gemspec +0 -23
  24. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/dialog.html +0 -147
  25. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/editor_plugin.js +0 -38
  26. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/img/spinner.gif +0 -0
  27. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/img/uploadimage.png +0 -0
  28. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/de.js +0 -3
  29. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/de_dlg.js +0 -12
  30. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/en.js +0 -3
  31. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/en_dlg.js +0 -12
  32. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/es.js +0 -3
  33. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/es_dlg.js +0 -12
  34. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/fr.js +0 -3
  35. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/fr_dlg.js +0 -12
  36. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/nb.js +0 -3
  37. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/nb_dlg.js +0 -12
  38. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/pt.js +0 -3
  39. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/pt_BR.js +0 -3
  40. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/pt_BR_dlg.js +0 -12
  41. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/pt_dlg.js +0 -12
  42. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/ru.js +0 -3
  43. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/ru_dlg.js +0 -12
  44. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/zh-cn.js +0 -3
  45. data/vendor/assets/javascripts/tinymce/plugins/uploadimage/langs/zh-cn_dlg.js +0 -12
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Mjc4ZTM2ZTA1MTg2ZDYxMjUzMDZiMjQxMTkzM2E5MWQ0YzI3ZDFlOA==
5
- data.tar.gz: !binary |-
6
- YjRlNTk3NGEyM2RkMjE3ZGM1NTBhMWMxNTM1ZWM2ZGJmNTkxNzNkZA==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- YzljZjc0YTc2MGFmODFhYjY3NTIzMjI0NWIxNjUwZWU0ZTg2ZmNlNDI4Mjc4
10
- NzNiODU5ZTYxZmYyNjBmNzYzZjYwOTg0ZTY0Mzc0MWE5NTAwZjFjZDMyODUy
11
- OGUwNzJlZjM0OWE0ZDllMjAyMGY4OTAxNjhlNDRkNTZjYTQ2Yjk=
12
- data.tar.gz: !binary |-
13
- M2JhMGViOTgwNjNmYzgyOTY0ZDhjYzUwOTFlZDhmZjJlMjY5NTlkZGQwNDIx
14
- MjgwNWFiMWNiMTA1OGM1YzdkMmM3YzQ2NDkzYTQ1NzMwNjU2NzljM2Y2YWQ5
15
- MzY2MDBkM2QyYzM2MDYxODZlODIzM2RmMTkwYWUzNjI3NmI0Zjk=
2
+ SHA1:
3
+ metadata.gz: 5d5dcfd7e60f10e0a26e45843ac5c648c95ce294
4
+ data.tar.gz: c187795f946b3a370fd7c721e9f80f46dd67db2f
5
+ SHA512:
6
+ metadata.gz: 9c301208b269f59e0b2836ce80958df93a266d90e8c96684405ac796e20b06de39dff928de3672d8f5ef34dc10226807cc2aeb22cc65d2b727fbd28c6c14fbbf
7
+ data.tar.gz: 0ca6207e817adf957a60cf0f3e0afde1577fe4cb74c95c9c47b6838f1a3824320bde9ed4245bf21cb5f4cbf9798cb80e534c07619beef4eff61975958b6215b3
checksums.yaml.gz.asc CHANGED
@@ -1,18 +1,18 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.20 (Darwin)
2
+ Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQIcBAABAgAGBQJSRRZEAAoJEH1ncb0Txu7XyIcQAINJoTuvxGytlh28GOE7wMDY
6
- IdYwg41v+ytTk5yUY6LceT8n4QyulGHOqUDoApMN6sxUpzAYuR7Q0NHXqYkN00BI
7
- oyNXBP4s2nmBXjkuBDjTtztSzbuVqRGALWQxLMMWRJdKq6ykcbWZ6tryRKT+SKg5
8
- hmoROeJMRF1/hL2DXNuvqFKqMPU/MglhW9gCmit9oAYZYGbcCvs1Q+wBsGLlA+0S
9
- 2AHebWq9QwoutIuxYEta40tuTOyl7tDzG6EcklXMRdyKr5JxfgequVkRY5L2efrS
10
- EFv+8o9eZwQXdFNZhhIPJeVzdSsYDoRKfHi6kxPuR0X+YpaVZEx41wmBdHoSbO8D
11
- xAna2eYm4r2SI6/vu/vEz/ZWVfsrzCPwfdrwseEC0aRi4EBgrrFX1FribHIgyCk1
12
- WVP7EYvw1Jqvhc6l94kcnfKMZkNe0ydH7lO2Elqjeg/T3Q3GBEKX8lbKlUpnTEo8
13
- qSpuOpWyhhxFJHiPAWG3qil9pPozXgiDEYyTIr41QrQ5XdOBioX/tgtPim1Y9QJN
14
- afEh0plFVDKKy5tFbPTn5RneyuFg+bMshyKDUIiuMUdm+T03xfPsXmzpaqpaBGrZ
15
- 6XqqkP+WMG3pIfS7GD3qLf7WgjV0dxNYZzgLv9G2UVV6QEEAsXa4hIELcGUI3d2l
16
- 4jLyzpCz7IUBEQqOOSt6
17
- =7cPY
5
+ iQIcBAABAgAGBQJTB0BaAAoJEH1ncb0Txu7XQwsP/1NseaDvnBek45KXo8LDZn1a
6
+ VHAPgAedA6Pd+Q4pAA0KEnB0+SmwAQuTnbsb2npsEOitLq/Nu5lm4OVNfIXFi67m
7
+ kVksc3LlIdlGH2BybYZPXVFT7KH0D65g40nlO1pgjaAWEtreQlZHoZd9neBZAhIQ
8
+ lzEFuvP8CdeI6HzyQzq7/Oxcq0vAFjk2DwNiggoQwf9c759tmdvzeHlv4n9yohab
9
+ KvEz7rxEr2pAgBtW+B3t45y+s84JuLadbgR+Eu3zyMyP+QNiWBd3rXxJhlZ9oEDw
10
+ JWguDvgkBn9syLNw9Nu6Zp7Nlo0Y+y9HR2sB52bglYN8V3SKGT8ca35GHi+Fmhwc
11
+ /i2aFOy8EG3+IgmVijuowk4tJIs97NPnIrXGFgPVnBLuy5kSeIq0THFUm6K3Ah1Z
12
+ 0hb7jtleMdJ9DQX2c9gUVw3ISttm3PT10dWDqPdVShdC5Tvx07OJmmGvoeU07Ys0
13
+ mpRzHqkHePxC3EjWyF5AE4a0o+u7x++AFG11i8dPFu0Qh4Eluei/9KkaeJ3Mp59d
14
+ 3HRZH59L9p+d6s1tMZo1DCkyUu8qG4vWs+nl8SLLHtFt4Xy7Z7uQ37ikPkm0+MgH
15
+ 5y+FfhCdk4nty0KGA1wtMTwgTxR59+nP9R1xu/j2Z5MvqHvvxDWjzGCDNBS3JOSq
16
+ aU9E6mjRXTSMWhHyDeDZ
17
+ =gfFY
18
18
  -----END PGP SIGNATURE-----
data.tar.gz.asc CHANGED
@@ -1,18 +1,18 @@
1
1
  -----BEGIN PGP SIGNATURE-----
2
- Version: GnuPG/MacGPG2 v2.0.20 (Darwin)
2
+ Version: GnuPG/MacGPG2 v2.0.22 (Darwin)
3
3
  Comment: GPGTools - http://gpgtools.org
4
4
 
5
- iQIcBAABAgAGBQJSRRZEAAoJEH1ncb0Txu7XHxwQALLLjsxMGHKCRK+cnONAx/qB
6
- VDxo63WgpnaySBXGivnCRYMDEJUqAVX9kvnfavP1jpQHJm+1F/Ual+4TMjkcxjxn
7
- fE3FvE5nd2ahtUXynlGBWTc9xTe6IXKLnEtY/6LF3JFtB8e4EvF0PUMcmBS93o0t
8
- nC5/5hTXMJbb9GfKq9Nvua8GZfDVkQarxRW8Yb4S2sCG1sPG1ydnMtNT0Ckwel6F
9
- wtFYbyGlPms1INJu36hK3rgMY9y5bMQS6MoenirFlQrcW5zS25+ysrnRujj9OiW/
10
- yni4UElBFrvIkaaKWwiGy59HPy03hcqQv9e05pE133ckSXL9IL8nZvILZKyjsBQA
11
- NQk3AQWywWh5sch7nnIGOQT6OL+/kHt0UZ3On1tOdbqP157shGdq0c/RTmQ/YrSE
12
- iFWL6TRbhd+qPuQ0bDqWMFUKAdfxeEB2KV6uOhR8T7CHM47b6jR40eaSGd/ZNEib
13
- BP5iN7P3S601MyDeKAfcvslz+D9pXzm4AIe9fH5qtbHb3GXlGS3VDGmk0DMHKp1G
14
- Pygyv2ZN7pxuF07hGUkHw6pgLxv/7eOi1soXZnQYPZ4K9s9/ttxHA3bPj+/fklZ5
15
- JavsQP55OUue/EUF7uSLwNDwfX+oCg8pleAOFewiXyVDPh46sAttdqmgW0iW4isE
16
- vmksJWQkb60LksZmuiH5
17
- =EAmD
5
+ iQIcBAABAgAGBQJTB0BaAAoJEH1ncb0Txu7X6SsP/1q1Hqds47vm5eh6tLgZ8jAd
6
+ heSSpaYLdXH0FrXO6a3SN37IUFUz3ELhBgrmL97rwcYLoJQD8c9D/lvJox2H6Cut
7
+ +dzMiFYmNlnoBXKvfaBTY17jOfosltsilQSZqjq+D+EIIeWsPinWGjgjfjZb7No9
8
+ akuZdD0YMSW75zjtriLRoOqEHJGa9ifrOG7Rbaun/sY+0c1jIP2orr5MpTMSW0V5
9
+ 1PfdVJdcTw+gz0xk0pwcjNsY6+p07KDmr/wxMuLP6vAb5smIAdaSMsUiGs3E0FU2
10
+ YBDaC2S8WLkWaAEwlOsURocUmjtFfdkJ6pGZMts4qZ2FX5S3XWKRHG7kNzveHNzh
11
+ 1/ZHA7fRS6NOkSZ0GlQ0HTxtdCEflnncYmZM7E2KlE4FdZxZHueDTv0f37oAXKu2
12
+ oo2D0l2xf3PGdsYdjns4go5jV4l+5Jqwii7ASiJ+wzh/EulMeKSXq0sCn71vx8ZI
13
+ c+JkoW0ewasLIPhxKpjRi0LJcy6tP2NHm7y9QneZmng31r8sj9KTZ+LlYanMGks2
14
+ axlkKUuOqMkAmfcW5i/9tBHv8iobu2R/Fn4iy5WPY7myraJEeVeB6n56xeaTkpmq
15
+ MWVJzIXFFKSLHrmu7qaRArBUeWkAskakMO21rHYvkOellaG9q9EE9Po3bjLbOO1k
16
+ QlEKSRxWy+s1Zjq2c2pq
17
+ =Ybtc
18
18
  -----END PGP SIGNATURE-----
data/CHANGELOG.md CHANGED
@@ -1,8 +1,7 @@
1
- # 3.5.8.6 / 2013-09-27
1
+ # 4.0.0 / unreleased
2
2
 
3
- * Adapt to tinymce-rails changed asset task, which broke precompilation with
4
- newer versions. #44
5
- * Add license information to the gemspec
3
+ * Rewrite the plugin to work with TinyMCE 4. TinyMCE 3.x is supported in the
4
+ tinymce3-branch.
6
5
 
7
6
  # 3.5.8.5 / 2013-05-07
8
7
 
data/README.md CHANGED
@@ -1,47 +1,60 @@
1
+ # IMPORTANT NOTE:
2
+ This version is being rewritten to work with TinyMCE 4.x, and is
3
+ currently **not usable**. For the stable version targetting TinyMCE 3, see
4
+ the [tinymce3 branch](https://github.com/PerfectlyNormal/tinymce-rails-imageupload/tree/tinymce3)
5
+
1
6
  # tinymce-rails-imageupload
2
7
 
3
- Simple plugin for TinyMCE that allows uploading images and inserting.
4
- It makes no assumptions about how you store the images, but it POSTs to a URL and expects JSON back (see the Setup section).
8
+ Simple plugin for TinyMCE that allows uploading images and inserting.
9
+ It makes no assumptions about how you store the images, it simply POSTs to a
10
+ URL and expects JSON back (see the Setup section).
5
11
 
6
- This plugin borrows heavily from work done by [Peter Shoukry](http://77effects.com/).
12
+ This plugin started as a copy of work done by [Peter Shoukry](http://77effects.com/),
13
+ but has since mutated into something entirely different.
7
14
 
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/).
15
+ Support for TinyMCE 3 is currently available in the [tinymce3 branch](https://github.com/PerfectlyNormal/tinymce-rails-imageupload/tree/tinymce3).
16
+ The master branch is targetting TinyMCE 4.x.
9
17
 
10
- ## Requirements
11
18
 
12
- * Rails >= 3.1
13
- * TinyMCE3 using the advanced theme
19
+ ## Requirements
14
20
 
15
- For TinyMCE4 support, use the master branch.
21
+ * Rails >= 3.1
22
+ * TinyMCE4 using the advanced theme
16
23
 
17
24
  ## Setup
18
25
 
19
26
  ### Add the gem to your Gemfile
20
27
 
21
- gem 'tinymce-rails-imageupload', '~> 3.5.8'
28
+ gem 'tinymce-rails-imageupload', '~> 4.0.0'
22
29
 
23
30
  ### Set up TinyMCE as you would normally, but in the call to `.tinymce()`, add
24
31
 
25
32
  plugins: "uploadimage"
26
- # theme_advanced_buttonsX must include "uploadimage" somewhere to have the button appear
33
+ # toolbar option must include "uploadimage" somewhere to have the button appear
27
34
 
28
- and the rest should happen automatically.
35
+ and the rest should happen automatically.
29
36
 
30
37
  ### Set up upload URL and handler
31
38
 
32
- The plugin defaults to POSTing to `/tinymce_assets`. You may modify it by supplying option `uploadimage_form_url` in the call to `.tinymce()`
39
+ The plugin defaults to POSTing to `/tinymce_assets`. You may modify it by
40
+ supplying the option `uploadimage_form_url` in the call to `.tinymce()`
33
41
 
34
- Routing to your controller must be done manually. Set it up using something similar in `routes.rb`:
42
+ Routing to your controller must be done manually.
43
+ Set it up using something similar in `routes.rb`:
35
44
 
36
45
  post '/tinymce_assets' => 'tinymce_assets#create'
37
46
 
38
- The plugin will relay option `uploadimage_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.
47
+ The plugin will relay option `uploadimage_hint` in the call to `.tinymce()`
48
+ to the POSTed URL as param `hint`. You may use this to relay any hints
49
+ you wish (for example, blog post ID #) to the controller.
39
50
 
40
- This action gets called with a file parameter creatively called `file`, and must respond with JSON, containing the URL to the image.
51
+ This action gets called with a file parameter creatively called `file`,
52
+ and must respond with JSON, containing the URL to the image.
41
53
 
42
- 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)).
54
+ The JSON has to be returned with a content type of "text/html" to work, which
55
+ is hopefully going to be fixed ([issue #7](https://github.com/PerfectlyNormal/tinymce-rails-imageupload/issues/7)).
43
56
 
44
- Example:
57
+ Example:
45
58
 
46
59
  class TinymceAssetsController < ApplicationController
47
60
  def create
@@ -56,60 +69,60 @@ For TinyMCE4 support, use the master branch.
56
69
  end
57
70
  end
58
71
 
59
- If the JSON response contains a `width` and/or `height` key, those will be used in the inserted HTML (`<img src="..." width="..." height="...">`), but if those are not present, the inserted HTML is just `<img src="...">`.
72
+ If the JSON response contains a `width` and/or `height` key,
73
+ those will be used in the inserted HTML (`<img src="..." width="..." height="...">`),
74
+ but if those are not present, the inserted HTML is just `<img src="...">`.
60
75
 
61
76
  ### Default class for img tag
62
77
 
63
- By default the plugin doesn't assign any class to the img tag. You can set the class(es) by supplying the `uploadimage_default_img_class` option in the call to `.tinymce()`.
78
+ By default the plugin doesn't assign any class to the img tag.
79
+ You can set the class(es) by supplying the `uploadimage_default_img_class`
80
+ option in the call to `.tinymce()`.
64
81
 
65
- `class="..."` will only be added to the img tag if a default is specified. Otherwise the inserted HTML is just `<img src="...">`.
82
+ `class="..."` will only be added to the img tag if a default is specified.
83
+ Otherwise the inserted HTML is just `<img src="...">`.
66
84
 
67
85
  ## Error handling
68
86
 
69
- To notify the uploader that an error occurred, return JSON containing a `error` key with a `message`.
70
- The message gets show in a paragraph with the ID `error_message`, and the input label gets the class `invalid`.
87
+ To notify the uploader that an error occurred, return JSON containing an
88
+ `error` key with a `message`. The message gets show in a paragraph with the
89
+ ID `error_message`, and the input label gets the class `invalid`.
71
90
 
72
91
  Example response:
73
92
 
74
- "{"error": {"message": "Invalid file type. Only .jpg, .png and .gif allowed"}}"
93
+ "{"error": {
94
+ "message": "Invalid file type. Only .jpg, .png and .gif allowed"
95
+ }}"
75
96
 
76
97
  ## Internationalization
77
98
 
78
- I18n is taken care of by `tinymce-rails`. This gem includes strings for english, norwegian, russian and portugese.
79
- To add your own language, create the files `<code>.js` and `<code>_dlg.js` in `vendor/assets/javascripts/tinymce/plugins/uploadimage/langs` in your application,
80
- or fork the gem and add your own translations there.
81
-
82
- To get your custom language precompiled, you have to add it to the list of files manually.
83
- If you have a fork, just add it to the list in `lib/tinymce-rails-imageupload/rails.rb`, but if you have the translations in the application,
84
- you can add it like this in `config/application.rb`:
85
-
86
- config.assets.precompile += %w(tinymce/plugins/uploadimage/langs/fr.js tinymce/plugins/uploadimage/langs/fr_dlg.js)
87
-
88
- The available strings are listed below:
89
-
90
- ### en.js
91
-
92
- tinyMCE.addI18n('en.uploadimage', {
93
- desc: 'Insert an image from your computer'
94
- });
95
-
96
- ### en_dlg.js
97
-
98
- tinyMCE.addI18n('en.uploadimage_dlg', {
99
- title: 'Insert image',
100
- header: "Insert image",
101
- input: "Choose an image",
102
- uploading: "Uploading…",
103
- blank_input: "Must choose a file",
104
- bad_response: "Got a bad response from the server",
105
- blank_response: "Didn't get a response from the server",
106
- insert: "Insert",
107
- cancel: "Cancel"
99
+ I18n is taken care of by `tinymce-rails`.
100
+ This gem includes strings for `en`, `de`, `es`, `fr`, `nb`, `pt`, `pt_BR`,
101
+ `ru` and `zh-cn`.
102
+ To add your own language, create the files `<code>.js` in
103
+ `app/assets/javascripts/tinymce/plugins/uploadimage/langs` in your
104
+ application, or fork the gem and add your own translations there.
105
+
106
+ The format and available strings are listed below:
107
+
108
+ ### nb.js
109
+
110
+ tinyMCE.addI18n('nb', {
111
+ 'Insert an image from your computer': 'Sett inn et bilde fra datamaskinen',
112
+ 'Insert image': "Sett inn bilde",
113
+ 'Choose an image': "Velg et bilde",
114
+ 'You must choose a file': "Du m\u00e5 velge en fil",
115
+ 'Got a bad response from the server': "Fikk et ugyldig svar fra serveren",
116
+ "Didn't get a response from the server": "Fikk ikke svar fra serveren",
117
+ 'Insert': "Sett inn",
118
+ 'Cancel': "Avbryt",
119
+ 'Image description': "Alternativ tekst for bilde",
108
120
  });
109
121
 
110
122
  ## Versioning
111
123
 
112
- The major, minor and patch version of this gem will be mirroring the release of `tinymce-rails` it is tested against.
124
+ The major, minor and patch version of this gem will be mirroring the
125
+ release of `tinymce-rails` it is tested against.
113
126
 
114
127
  ## Signing
115
128
 
@@ -127,4 +140,5 @@ The plugin is released under the MIT license.
127
140
 
128
141
  TinyMCE is released under the LGPL Version 2.1.
129
142
 
130
- 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/)
143
+ The icon used for the button comes from the icon set Silk from famfamfam,
144
+ released under the [Creative Commons Attribution 3.0 License](http://creativecommons.org/licenses/by/3.0/)
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('de', {
2
+ 'Insert an image from your computer': 'Bild vom Computer einfügen',
3
+ 'Insert image': 'Bild einfügen',
4
+ 'Choose an image': "Bild auswählen",
5
+ 'You must choose a file': "Datei auswählen",
6
+ 'Got a bad response from the server': "Ungültige Antwort vom Server",
7
+ "Didn't get a response from the server": "Server antwortet nicht",
8
+ 'Insert': "Einfügen",
9
+ 'Cancel': "Abbrechen",
10
+ 'Image description': "Bildbeschreibung"
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('en', {
2
+ 'Insert an image from your computer': 'Insert an image from your computer',
3
+ 'Insert image': 'Insert image',
4
+ 'Choose an image': "Choose an image",
5
+ 'You must choose a file': "You must choose a file",
6
+ 'Got a bad response from the server': "Got a bad response from the server",
7
+ "Didn't get a response from the server": "Didn't get a response from the server",
8
+ 'Insert': "Insert",
9
+ 'Cancel': "Cancel",
10
+ 'Image description': "Image description",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('es', {
2
+ 'Insert an image from your computer': 'Insertar una imagen desde su computadora',
3
+ 'Insert image': 'Insertar una imagen',
4
+ 'Choose an image': "Elija una imagen",
5
+ 'You must choose a file': "Debe elegir un archivo",
6
+ 'Got a bad response from the server': "Mala respuesta del servidor",
7
+ "Didn't get a response from the server": "No se recibió respuesta del servidor",
8
+ 'Insert': "Insertar",
9
+ 'Cancel': "Cancelar",
10
+ 'Image description': "Descripción de la imagen",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('fr', {
2
+ 'Insert an image from your computer': "Envoyer une image de votre ordinateur",
3
+ 'Insert image': "Insérer une image",
4
+ 'Choose an image': "Choisissez une image",
5
+ 'You must choose a file': "Vous devez sélectionner un fichier",
6
+ 'Got a bad response from the server': "Le serveur a envoyé une réponse erronée",
7
+ "Didn't get a response from the server": "Le serveur n'a pas renvoyé de réponse",
8
+ 'Insert': "Insérer",
9
+ 'Cancel': "Annuler",
10
+ 'Image description': "Description de l'image",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('nb', {
2
+ 'Insert an image from your computer': 'Sett inn et bilde fra datamaskinen',
3
+ 'Insert image': "Sett inn bilde",
4
+ 'Choose an image': "Velg et bilde",
5
+ 'You must choose a file': "Du m\u00e5 velge en fil",
6
+ 'Got a bad response from the server': "Fikk et ugyldig svar fra serveren",
7
+ "Didn't get a response from the server": "Fikk ikke svar fra serveren",
8
+ 'Insert': "Sett inn",
9
+ 'Cancel': "Avbryt",
10
+ 'Image description': "Alternativ tekst for bilde",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('pt', {
2
+ 'Insert an image from your computer': 'Inserir uma imagem do seu computador',
3
+ 'Insert image': 'Inserir imagem',
4
+ 'Choose an image': "Escolher uma imagem",
5
+ 'You must choose a file': "É necessário seleccionar um ficheiro",
6
+ 'Got a bad response from the server': "Resposta inesperada do servidor",
7
+ "Didn't get a response from the server": "Não foi obtida uma resposta do servidor",
8
+ 'Insert': "Inserir",
9
+ 'Cancel': "Cancelar",
10
+ 'Image description': "Image description",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('pt_BR', {
2
+ 'Insert an image from your computer': 'Inserir uma imagem do computador',
3
+ 'Insert image': 'Inserir imagem',
4
+ 'Choose an image': "Escolher uma imagem",
5
+ 'You must choose a file': "É necessário selecionar um diretório",
6
+ 'Got a bad response from the server': "Resposta inesperada do servidor",
7
+ "Didn't get a response from the server": "Servidor não está respondendo",
8
+ 'Insert': "Inserir",
9
+ 'Cancel': "Cancelar",
10
+ 'Image description': "Image description",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('ru', {
2
+ 'Insert an image from your computer': 'Вставить изображение с вашего компьютера',
3
+ 'Insert image': "Вставить изображение",
4
+ 'Choose an image': "Выберите изображение",
5
+ 'You must choose a file': "Необходимо выбрать файл",
6
+ 'Got a bad response from the server': "Получен некорректный ответ с сервера",
7
+ "Didn't get a response from the server": "Не получен ответ с сервера",
8
+ 'Insert': "Вставить",
9
+ 'Cancel': "Отмена",
10
+ 'Image description': "Информация об изображении",
11
+ });
@@ -0,0 +1,11 @@
1
+ tinyMCE.addI18n('zh-cn', {
2
+ 'Insert an image from your computer': "\u4e0a\u4f20\u56fe\u7247",
3
+ 'Insert image': "\u63d2\u5165\u56fe\u7247",
4
+ 'Choose an image': "\u9009\u62e9\u56fe\u7247",
5
+ 'You must choose a file': "\u5fc5\u987b\u9009\u62e9\u6587\u4ef6",
6
+ 'Got a bad response from the server': "\u670d\u52a1\u5668\u8fd4\u56de\u9519\u8bef",
7
+ "Didn't get a response from the server": "\u670d\u52a1\u5668\u6ca1\u6709\u54cd\u5e94",
8
+ 'Insert': "\u63d2\u5165",
9
+ 'Cancel': "\u53d6\u6d88",
10
+ 'Image description': "\u56fe\u7247\u63cf\u8ff0",
11
+ });
@@ -0,0 +1,228 @@
1
+ (function() {
2
+ tinymce.PluginManager.requireLangPack('uploadimage');
3
+
4
+ tinymce.create('tinymce.plugins.UploadImage', {
5
+ UploadImage: function(ed, url) {
6
+ var form,
7
+ iframe,
8
+ win,
9
+ throbber,
10
+ editor = ed;
11
+
12
+ function showDialog() {
13
+ win = editor.windowManager.open({
14
+ title: ed.translate('Insert an image from your computer'),
15
+ width: 500 + parseInt(editor.getLang('uploadimage.delta_width', 0), 10),
16
+ height: 180 + parseInt(editor.getLang('uploadimage.delta_height', 0), 10),
17
+ body: [
18
+ {type: 'iframe', url: 'javascript:void(0)'},
19
+ {type: 'textbox', name: 'file', label: ed.translate('Choose an image'), subtype: 'file'},
20
+ {type: 'textbox', name: 'alt', label: ed.translate('Image description')},
21
+ {type: 'container', classes: 'error', html: "<p style='color: #b94a48;'>&nbsp;</p>"},
22
+ ],
23
+ buttons: [
24
+ {
25
+ text: ed.translate('Insert'),
26
+ onclick: insertImage,
27
+ subtype: 'primary'
28
+ },
29
+ {
30
+ text: ed.translate('Cancel'),
31
+ onclick: ed.windowManager.close
32
+ }
33
+ ],
34
+ }, {
35
+ plugin_url: url
36
+ });
37
+
38
+ // TinyMCE likes pointless submit handlers
39
+ win.off('submit');
40
+ win.on('submit', insertImage);
41
+
42
+ /* WHY DO YOU HATE <form>, TINYMCE!? */
43
+ iframe = win.find("iframe")[0];
44
+ form = createElement('form', {
45
+ action: ed.getParam("uploadimage_form_url", "/tinymce_assets"),
46
+ target: iframe._id,
47
+ method: "POST",
48
+ enctype: 'multipart/form-data',
49
+ accept_charset: "UTF-8",
50
+ });
51
+
52
+ // Might have several instances on the same page,
53
+ // so we TinyMCE create unique IDs and use those.
54
+ iframe.getEl().name = iframe._id;
55
+
56
+ // Create some needed hidden inputs
57
+ form.appendChild(createElement('input', {type: "hidden", name: "utf8", value: "✓"}));
58
+ form.appendChild(createElement('input', {type: 'hidden', name: 'authenticity_token', value: getMetaContents('csrf-token')}));
59
+ form.appendChild(createElement('input', {type: 'hidden', name: 'hint', value: ed.getParam("uploadimage_hint", "")}));
60
+
61
+ var el = win.getEl();
62
+ var body = document.getElementById(el.id + "-body");
63
+
64
+ // Copy everything TinyMCE made into our form
65
+ var containers = body.getElementsByClassName('mce-container');
66
+ for(var i = 0; i < containers.length; i++) {
67
+ form.appendChild(containers[i]);
68
+ }
69
+
70
+ // Fix inputs, since TinyMCE hates HTML and forms
71
+ var inputs = form.getElementsByTagName('input');
72
+ for(var i = 0; i < inputs.length; i++) {
73
+ var ctrl = inputs[i];
74
+
75
+ if(ctrl.tagName.toLowerCase() == 'input' && ctrl.type != "hidden") {
76
+ ctrl.name = ctrl.type == "file" ? "file" : "alt";
77
+ }
78
+ }
79
+
80
+ body.appendChild(form);
81
+ }
82
+
83
+ function insertImage() {
84
+ if(getInputValue("file") == "") {
85
+ return handleError('You must choose a file');
86
+ }
87
+
88
+ throbber = new top.tinymce.ui.Throbber(win.getEl());
89
+ throbber.show();
90
+
91
+ clearErrors();
92
+
93
+ /* Add event listeners.
94
+ * We remove the existing to avoid them being called twice in case
95
+ * of errors and re-submitting afterwards.
96
+ */
97
+ var target = iframe.getEl();
98
+ if(target.attachEvent) {
99
+ target.detachEvent('onload', uploadDone);
100
+ target.attachEvent('onload', uploadDone);
101
+ } else {
102
+ target.removeEventListener('load', uploadDone);
103
+ target.addEventListener('load', uploadDone, false);
104
+ }
105
+
106
+ form.submit();
107
+ }
108
+
109
+ function uploadDone() {
110
+ if(throbber) {
111
+ throbber.hide();
112
+ }
113
+
114
+ var target = iframe.getEl();
115
+ if(target.document || target.contentDocument) {
116
+ var doc = target.contentDocument || target.contentWindow.document;
117
+ handleResponse(doc.getElementsByTagName("body")[0].innerHTML);
118
+ } else {
119
+ handleError("Didn't get a response from the server");
120
+ }
121
+ }
122
+
123
+ function handleResponse(ret) {
124
+ console.group("Handling response");
125
+ console.log("Raw", ret)
126
+ try {
127
+ var json = tinymce.util.JSON.parse(ret);
128
+ console.log("Parsed", json);
129
+
130
+ if(json["error"]) {
131
+ console.log("It has an error!", json["error"]["message"]);
132
+ handleError(json["error"]["message"]);
133
+ } else {
134
+ console.log("Inserting", buildHTML(json));
135
+ ed.execCommand('mceInsertContent', false, buildHTML(json));
136
+ ed.windowManager.close();
137
+ }
138
+ } catch(e) {
139
+ console.log("Bad response :(", e);
140
+ handleError('Got a bad response from the server');
141
+ }
142
+ console.groupEnd();
143
+ }
144
+
145
+ function clearErrors() {
146
+ var message = win.find(".error")[0].getEl();
147
+
148
+ if(message)
149
+ message.getElementsByTagName("p")[0].innerHTML = "&nbsp;";
150
+ }
151
+
152
+ function handleError(error) {
153
+ console.log("Handling error", error);
154
+ var message = win.find(".error")[0].getEl();
155
+
156
+ if(message)
157
+ message.getElementsByTagName("p")[0].innerHTML = ed.translate(error);
158
+ }
159
+
160
+ function createElement(element, attributes) {
161
+ var el = document.createElement(element);
162
+ for(var property in attributes) {
163
+ if (!(attributes[property] instanceof Function)) {
164
+ el[property] = attributes[property];
165
+ }
166
+ }
167
+
168
+ return el;
169
+ }
170
+
171
+ function buildHTML(json) {
172
+ var default_class = ed.getParam("uploadimage_default_img_class", "");
173
+ var alt_text = getInputValue("alt");
174
+
175
+ var imgstr = "<img src='" + json["image"]["url"] + "'";
176
+
177
+ if(default_class != "")
178
+ imgstr += " class='" + default_class + "'";
179
+
180
+ if(json["image"]["height"])
181
+ imgstr += " height='" + json["image"]["height"] + "'";
182
+ if(json["image"]["width"])
183
+ imgstr += " width='" + json["image"]["width"] + "'";
184
+
185
+ imgstr += " alt='" + alt_text + "'/>";
186
+
187
+ return imgstr;
188
+ }
189
+
190
+ function getInputValue(name) {
191
+ var inputs = form.getElementsByTagName("input");
192
+
193
+ for(var i in inputs)
194
+ if(inputs[i].name == name)
195
+ return inputs[i].value;
196
+
197
+ return "";
198
+ }
199
+
200
+ function getMetaContents(mn) {
201
+ var m = document.getElementsByTagName('meta');
202
+
203
+ for(var i in m)
204
+ if(m[i].name == mn)
205
+ return m[i].content;
206
+
207
+ return null;
208
+ }
209
+
210
+ // Add a button that opens a window
211
+ editor.addButton('uploadimage', {
212
+ tooltip: ed.translate('Insert an image from your computer'),
213
+ icon : 'image',
214
+ onclick: showDialog
215
+ });
216
+
217
+ // Adds a menu item to the tools menu
218
+ editor.addMenuItem('uploadimage', {
219
+ text: ed.translate('Insert an image from your computer'),
220
+ icon : 'image',
221
+ context: 'insert',
222
+ onclick: showDialog
223
+ });
224
+ }
225
+ });
226
+
227
+ tinymce.PluginManager.add('uploadimage', tinymce.plugins.UploadImage);
228
+ })();