From e40a859b7defb5549f99c26a86e7a756131aea2b Mon Sep 17 00:00:00 2001 From: Wojciech Todryk Date: Fri, 24 Jun 2011 23:48:08 +0200 Subject: [PATCH] works but need some cleanup --- .gitignore | 1 - AUTHORS | 5 + CHANGELOG | 718 --- Gemfile | 36 + Gemfile.lock | 81 + MIT-LICENSE | 23 - README | 34 - README.markdown | 40 + Rakefile | 9 +- UNLICENSE | 24 + app/controllers/application_controller.rb | 43 +- app/controllers/contact_groups_controller.rb | 0 app/controllers/contacts_controller.rb | 0 app/controllers/folders_controller.rb | 0 app/controllers/login_controller.rb | 38 +- app/controllers/webmail_controller.rb | 175 +- app/helpers/application_helper.rb | 0 app/helpers/contact_group_helper.rb | 0 app/helpers/contacts_helper.rb | 0 app/helpers/folders_helper.rb | 0 app/helpers/navigation_helper.rb | 0 app/helpers/webmail_helper.rb | 63 +- app/models/contact.rb | 71 +- app/models/contact_group.rb | 43 +- app/models/customer.rb | 0 app/models/mail_pref.rb | 0 .../{edit.rhtml => edit.html.erb} | 0 app/views/contact_groups/index.html.erb | 0 ...d_multiple.rhtml => add_multiple.html.erb} | 0 .../{choose.rhtml => choose.html.erb} | 0 ..._preview.rhtml => import_preview.html.erb} | 0 app/views/contacts/index.html.erb | 0 app/views/contacts/new.html.erb | 20 +- app/views/folders/index.html.erb | 8 +- app/views/layouts/chooser.html.erb | 0 app/views/layouts/login.html.erb | 0 app/views/layouts/public.html.erb | 5 +- app/views/login/index.rhtml | 0 app/views/shared/_folders.html.erb | 4 +- .../{_contacts.rhtml => _contacts.html.erb} | 0 .../webmail/{_expr.rhtml => _expr.html.erb} | 0 .../{_filter.rhtml => _filter.html.erb} | 0 ...essage_row.rhtml => _message_row.html.erb} | 0 .../{_search.rhtml => _search.html.erb} | 0 .../{compose.rhtml => compose.html.erb} | 0 ...ection.rhtml => error_connection.html.erb} | 0 .../webmail/{filter.rhtml => filter.html.erb} | 0 .../{filters.rhtml => filters.html.erb} | 0 .../{folders.rhtml => folders.html.erb} | 0 .../{mailsent.rhtml => mailsent.html.erb} | 0 .../{message.rhtml => message.html.erb} | 0 .../{messages.rhtml => messages.html.erb} | 10 +- ...attachment.rhtml => noattachment.html.erb} | 0 .../webmail/{prefs.rhtml => prefs.html.erb} | 0 ...view_source.rhtml => view_source.html.erb} | 0 arts/logo.png | Bin 0 -> 61554 bytes arts/logo.xcf | Bin 0 -> 254283 bytes config.ru | 4 + config/application.rb | 63 + config/boot.rb | 111 +- config/default_site.rb | 0 config/environment.rb | 84 +- config/environments/development.rb | 34 +- config/environments/production.rb | 56 +- config/environments/test.rb | 50 +- config/initializers/backtrace_silencers.rb | 7 + config/initializers/inflections.rb | 10 + config/initializers/mime_types.rb | 5 + config/initializers/pluralization.rb | 36 + config/initializers/secret_token.rb | 7 + config/initializers/session_store.rb | 8 + config/lighttpd.conf | 79 - config/locales/en.yml | 7 +- config/locales/es-ES.yml | 0 config/locales/{pl-PL.yml => pl.yml} | 6 +- config/routes.rb | 99 +- db/migrate/20090107193228_init.rb | 0 db/schema.mysql.sql | 111 - db/schema.pgsql.sql | 111 - db/schema.rb | 13 +- db/seeds.rb | 7 + doc/README_FOR_APP | 2 +- lib/cdfutils.rb | 0 lib/imap_utils.rb | 14 +- lib/tasks/.gitkeep | 0 lib/tmail_patch.rb | 0 lib/webmail/bounced_mail.rb | 0 lib/webmail/cdfmail.rb | 134 +- lib/webmail/environment.rb | 0 lib/webmail/expression.rb | 0 lib/webmail/filter.rb | 0 lib/webmail/imap_message.rb | 0 lib/webmail/imapmailbox.rb | 189 +- lib/webmail/mail2screen.rb | 0 lib/webmail/mail_transform.rb | 0 lib/webmail/maildropserializator.rb | 0 lib/webmail/routes.rb | 0 lib/webmail/virtual_email.rb | 0 public/404.html | 28 +- public/422.html | 26 + public/500.html | 28 +- public/favicon.ico | 0 public/images/attachment.png | Bin public/images/d6deec.gif | Bin public/images/deselect.png | Bin public/images/list_closed.gif | Bin public/images/list_opened.gif | Bin public/images/noprogress.gif | Bin public/images/rails.png | Bin 0 -> 6646 bytes public/images/select.png | Bin public/images/white.gif | Bin public/images/white.png | Bin public/javascripts/application.js | 0 public/javascripts/controls.js | 8 +- public/javascripts/dragdrop.js | 13 +- public/javascripts/effects.js | 21 +- public/javascripts/effects2.js | 0 public/javascripts/global.js | 0 public/javascripts/global_src.js | 0 public/javascripts/prototype.js | 5493 +++++++++++------ public/javascripts/prototype_src.js | 0 public/javascripts/rails.js | 191 + public/javascripts/scriptaculous.js | 0 public/javascripts/slider.js | 0 public/robots.txt | 5 + public/stylesheets/.gitkeep | 0 public/stylesheets/admin.css | 0 public/stylesheets/mailr.css | 8 +- public/stylesheets/tabs.css | 0 .../stylesheets/webmail/icon-folder-open.gif | Bin public/tiny_mce/blank.htm | 10 - public/tiny_mce/jstrim.pl | 75 - public/tiny_mce/langs/ar.js | 39 - public/tiny_mce/langs/ca.js | 38 - public/tiny_mce/langs/cs.js | 38 - public/tiny_mce/langs/da.js | 38 - public/tiny_mce/langs/de.js | 38 - public/tiny_mce/langs/el.js | 38 - public/tiny_mce/langs/en.js | 44 - public/tiny_mce/langs/es.js | 38 - public/tiny_mce/langs/fa.js | 43 - public/tiny_mce/langs/fi.js | 38 - public/tiny_mce/langs/fr.js | 38 - public/tiny_mce/langs/fr_ca.js | 38 - public/tiny_mce/langs/hu.js | 39 - public/tiny_mce/langs/it.js | 38 - public/tiny_mce/langs/ja.js | 38 - public/tiny_mce/langs/ko.js | 37 - public/tiny_mce/langs/nl.js | 38 - public/tiny_mce/langs/no.js | 37 - public/tiny_mce/langs/pl.js | 38 - public/tiny_mce/langs/pt.js | 41 - public/tiny_mce/langs/pt_br.js | 41 - public/tiny_mce/langs/readme.txt | 2 - public/tiny_mce/langs/ru.js | 40 - public/tiny_mce/langs/sv.js | 40 - public/tiny_mce/langs/th.js | 37 - public/tiny_mce/langs/zh_cn.js | 39 - .../plugins/_template/editor_plugin.js | 118 - .../plugins/_template/images/template.gif | Bin 879 -> 0 bytes public/tiny_mce/plugins/_template/langs/en.js | 6 - .../tiny_mce/plugins/_template/langs/zh_cn.js | 7 - public/tiny_mce/plugins/_template/popup.htm | 31 - public/tiny_mce/plugins/_template/readme.txt | 1 - .../tiny_mce/plugins/advhr/editor_plugin.js | 2 - .../plugins/advhr/editor_plugin_src.js | 58 - .../tiny_mce/plugins/advhr/images/advhr.gif | Bin 209 -> 0 bytes public/tiny_mce/plugins/advhr/langs/cs.js | 6 - public/tiny_mce/plugins/advhr/langs/de.js | 6 - public/tiny_mce/plugins/advhr/langs/en.js | 6 - public/tiny_mce/plugins/advhr/langs/fa.js | 11 - public/tiny_mce/plugins/advhr/langs/fr.js | 6 - public/tiny_mce/plugins/advhr/langs/fr_ca.js | 6 - public/tiny_mce/plugins/advhr/langs/pl.js | 6 - public/tiny_mce/plugins/advhr/langs/pt_br.js | 6 - public/tiny_mce/plugins/advhr/langs/sv.js | 6 - public/tiny_mce/plugins/advhr/langs/zh_cn.js | 7 - public/tiny_mce/plugins/advhr/readme.txt | 20 - public/tiny_mce/plugins/advhr/rule.htm | 107 - .../plugins/advimage/editor_plugin.js | 2 - .../plugins/advimage/editor_plugin_src.js | 61 - public/tiny_mce/plugins/advimage/image.htm | 371 -- public/tiny_mce/plugins/advimage/langs/cs.js | 6 - public/tiny_mce/plugins/advimage/langs/de.js | 6 - public/tiny_mce/plugins/advimage/langs/en.js | 6 - public/tiny_mce/plugins/advimage/langs/fa.js | 11 - public/tiny_mce/plugins/advimage/langs/fr.js | 6 - .../tiny_mce/plugins/advimage/langs/fr_ca.js | 6 - public/tiny_mce/plugins/advimage/langs/ko.js | 6 - public/tiny_mce/plugins/advimage/langs/pl.js | 6 - .../tiny_mce/plugins/advimage/langs/pt_br.js | 6 - public/tiny_mce/plugins/advimage/langs/sv.js | 6 - .../tiny_mce/plugins/advimage/langs/zh_cn.js | 7 - public/tiny_mce/plugins/advimage/readme.txt | 19 - .../tiny_mce/plugins/advlink/editor_plugin.js | 2 - .../plugins/advlink/editor_plugin_src.js | 18 - public/tiny_mce/plugins/advlink/langs/cs.js | 20 - public/tiny_mce/plugins/advlink/langs/de.js | 20 - public/tiny_mce/plugins/advlink/langs/en.js | 20 - public/tiny_mce/plugins/advlink/langs/fa.js | 25 - public/tiny_mce/plugins/advlink/langs/fr.js | 20 - .../tiny_mce/plugins/advlink/langs/fr_ca.js | 20 - public/tiny_mce/plugins/advlink/langs/ko.js | 19 - public/tiny_mce/plugins/advlink/langs/pl.js | 23 - .../tiny_mce/plugins/advlink/langs/pt_br.js | 20 - public/tiny_mce/plugins/advlink/langs/sv.js | 20 - .../tiny_mce/plugins/advlink/langs/zh_cn.js | 21 - public/tiny_mce/plugins/advlink/link.htm | 444 -- public/tiny_mce/plugins/advlink/readme.txt | 19 - .../plugins/contextmenu/contextmenu.css | 60 - .../plugins/contextmenu/editor_plugin.js | 2 - .../plugins/contextmenu/editor_plugin_src.js | 289 - .../plugins/contextmenu/images/spacer.gif | Bin 43 -> 0 bytes .../plugins/directionality/editor_plugin.js | 2 - .../directionality/editor_plugin_src.js | 71 - .../plugins/directionality/images/ltr.gif | Bin 314 -> 0 bytes .../plugins/directionality/images/rtl.gif | Bin 314 -> 0 bytes .../plugins/directionality/langs/en.js | 4 - .../plugins/directionality/langs/sv.js | 4 - .../plugins/directionality/langs/zh_cn.js | 5 - .../plugins/directionality/readme.txt | 16 - .../plugins/emotions/editor_plugin.js | 2 - .../plugins/emotions/editor_plugin_src.js | 36 - public/tiny_mce/plugins/emotions/emotions.htm | 45 - .../plugins/emotions/images/emotions.gif | Bin 1127 -> 0 bytes .../plugins/emotions/images/readme.txt | 2 - .../plugins/emotions/images/smiley-cool.gif | Bin 1135 -> 0 bytes .../plugins/emotions/images/smiley-cry.gif | Bin 1127 -> 0 bytes .../emotions/images/smiley-embarassed.gif | Bin 1134 -> 0 bytes .../emotions/images/smiley-foot-in-mouth.gif | Bin 1120 -> 0 bytes .../plugins/emotions/images/smiley-frown.gif | Bin 1116 -> 0 bytes .../emotions/images/smiley-innocent.gif | Bin 1139 -> 0 bytes .../plugins/emotions/images/smiley-kiss.gif | Bin 1129 -> 0 bytes .../emotions/images/smiley-laughing.gif | Bin 1122 -> 0 bytes .../emotions/images/smiley-money-mouth.gif | Bin 1112 -> 0 bytes .../plugins/emotions/images/smiley-sealed.gif | Bin 1110 -> 0 bytes .../plugins/emotions/images/smiley-smile.gif | Bin 1116 -> 0 bytes .../emotions/images/smiley-surprised.gif | Bin 1122 -> 0 bytes .../emotions/images/smiley-tongue-out.gif | Bin 1112 -> 0 bytes .../emotions/images/smiley-undecided.gif | Bin 1117 -> 0 bytes .../plugins/emotions/images/smiley-wink.gif | Bin 1124 -> 0 bytes .../plugins/emotions/images/smiley-yell.gif | Bin 1132 -> 0 bytes public/tiny_mce/plugins/emotions/langs/cs.js | 4 - public/tiny_mce/plugins/emotions/langs/de.js | 6 - public/tiny_mce/plugins/emotions/langs/el.js | 5 - public/tiny_mce/plugins/emotions/langs/en.js | 5 - public/tiny_mce/plugins/emotions/langs/fa.js | 10 - public/tiny_mce/plugins/emotions/langs/fr.js | 5 - .../tiny_mce/plugins/emotions/langs/fr_ca.js | 5 - public/tiny_mce/plugins/emotions/langs/it.js | 5 - public/tiny_mce/plugins/emotions/langs/ko.js | 5 - public/tiny_mce/plugins/emotions/langs/pl.js | 4 - .../tiny_mce/plugins/emotions/langs/pt_br.js | 5 - public/tiny_mce/plugins/emotions/langs/sv.js | 4 - .../tiny_mce/plugins/emotions/langs/zh_cn.js | 6 - public/tiny_mce/plugins/emotions/readme.txt | 20 - .../tiny_mce/plugins/flash/editor_plugin.js | 2 - .../plugins/flash/editor_plugin_src.js | 225 - public/tiny_mce/plugins/flash/flash.css | 7 - public/tiny_mce/plugins/flash/flash.htm | 182 - .../tiny_mce/plugins/flash/images/flash.gif | Bin 664 -> 0 bytes public/tiny_mce/plugins/flash/langs/cs.js | 7 - public/tiny_mce/plugins/flash/langs/de.js | 7 - public/tiny_mce/plugins/flash/langs/en.js | 7 - public/tiny_mce/plugins/flash/langs/fa.js | 11 - public/tiny_mce/plugins/flash/langs/fr.js | 7 - public/tiny_mce/plugins/flash/langs/fr_ca.js | 6 - public/tiny_mce/plugins/flash/langs/pl.js | 7 - public/tiny_mce/plugins/flash/langs/pt_br.js | 7 - public/tiny_mce/plugins/flash/langs/sv.js | 7 - public/tiny_mce/plugins/flash/langs/zh_cn.js | 8 - public/tiny_mce/plugins/flash/readme.txt | 48 - .../plugins/fullscreen/editor_plugin.js | 2 - .../plugins/fullscreen/editor_plugin_src.js | 34 - .../plugins/fullscreen/fullscreen.htm | 72 - .../plugins/fullscreen/images/fullscreen.gif | Bin 391 -> 0 bytes .../tiny_mce/plugins/fullscreen/langs/cs.js | 4 - .../tiny_mce/plugins/fullscreen/langs/en.js | 4 - .../tiny_mce/plugins/fullscreen/langs/sv.js | 4 - .../plugins/fullscreen/langs/zh_cn.js | 5 - public/tiny_mce/plugins/fullscreen/readme.txt | 17 - .../tiny_mce/plugins/iespell/editor_plugin.js | 2 - .../plugins/iespell/editor_plugin_src.js | 37 - .../plugins/iespell/images/iespell.gif | Bin 151 -> 0 bytes public/tiny_mce/plugins/iespell/langs/cs.js | 4 - public/tiny_mce/plugins/iespell/langs/de.js | 4 - public/tiny_mce/plugins/iespell/langs/el.js | 4 - public/tiny_mce/plugins/iespell/langs/en.js | 4 - public/tiny_mce/plugins/iespell/langs/fr.js | 4 - .../tiny_mce/plugins/iespell/langs/fr_ca.js | 4 - public/tiny_mce/plugins/iespell/langs/it.js | 4 - public/tiny_mce/plugins/iespell/langs/ko.js | 4 - public/tiny_mce/plugins/iespell/langs/pl.js | 4 - .../tiny_mce/plugins/iespell/langs/pt_br.js | 4 - public/tiny_mce/plugins/iespell/langs/sv.js | 4 - .../tiny_mce/plugins/iespell/langs/zh_cn.js | 5 - public/tiny_mce/plugins/iespell/readme.txt | 20 - .../plugins/insertdatetime/editor_plugin.js | 2 - .../insertdatetime/editor_plugin_src.js | 75 - .../insertdatetime/images/insertdate.gif | Bin 1031 -> 0 bytes .../insertdatetime/images/inserttime.gif | Bin 958 -> 0 bytes .../plugins/insertdatetime/langs/cs.js | 8 - .../plugins/insertdatetime/langs/de.js | 8 - .../plugins/insertdatetime/langs/el.js | 8 - .../plugins/insertdatetime/langs/en.js | 8 - .../plugins/insertdatetime/langs/fa.js | 9 - .../plugins/insertdatetime/langs/fr.js | 8 - .../plugins/insertdatetime/langs/fr_ca.js | 8 - .../plugins/insertdatetime/langs/it.js | 8 - .../plugins/insertdatetime/langs/ko.js | 8 - .../plugins/insertdatetime/langs/pl.js | 9 - .../plugins/insertdatetime/langs/pt_br.js | 8 - .../plugins/insertdatetime/langs/sv.js | 8 - .../plugins/insertdatetime/langs/zh_cn.js | 9 - .../plugins/insertdatetime/readme.txt | 35 - .../plugins/linkattach/attachment.htm | 448 -- .../plugins/linkattach/editor_plugin.js | 2 - .../plugins/linkattach/editor_plugin_src.js | 18 - .../tiny_mce/plugins/linkattach/langs/en.js | 20 - public/tiny_mce/plugins/paste/blank.htm | 15 - .../tiny_mce/plugins/paste/editor_plugin.js | 25 - .../plugins/paste/editor_plugin_src.js | 174 - .../plugins/paste/images/pastetext.gif | Bin 1023 -> 0 bytes .../plugins/paste/images/pasteword.gif | Bin 640 -> 0 bytes .../plugins/paste/images/selectall.gif | Bin 998 -> 0 bytes public/tiny_mce/plugins/paste/langs/cs.js | 8 - public/tiny_mce/plugins/paste/langs/en.js | 8 - public/tiny_mce/plugins/paste/langs/sv.js | 8 - public/tiny_mce/plugins/paste/langs/zh_cn.js | 9 - public/tiny_mce/plugins/paste/pastetext.htm | 76 - public/tiny_mce/plugins/paste/pasteword.htm | 111 - public/tiny_mce/plugins/paste/readme.txt | 28 - .../tiny_mce/plugins/preview/editor_plugin.js | 2 - .../plugins/preview/editor_plugin_src.js | 61 - public/tiny_mce/plugins/preview/example.html | 14 - .../plugins/preview/images/preview.gif | Bin 1024 -> 0 bytes public/tiny_mce/plugins/preview/langs/cs.js | 3 - public/tiny_mce/plugins/preview/langs/de.js | 3 - public/tiny_mce/plugins/preview/langs/el.js | 3 - public/tiny_mce/plugins/preview/langs/en.js | 3 - public/tiny_mce/plugins/preview/langs/fa.js | 8 - public/tiny_mce/plugins/preview/langs/fr.js | 3 - .../tiny_mce/plugins/preview/langs/fr_ca.js | 3 - public/tiny_mce/plugins/preview/langs/it.js | 3 - public/tiny_mce/plugins/preview/langs/ko.js | 3 - public/tiny_mce/plugins/preview/langs/pl.js | 4 - public/tiny_mce/plugins/preview/langs/pt.js | 3 - .../tiny_mce/plugins/preview/langs/pt_br.js | 3 - public/tiny_mce/plugins/preview/langs/sv.js | 3 - .../tiny_mce/plugins/preview/langs/zh_cn.js | 3 - public/tiny_mce/plugins/preview/readme.txt | 23 - .../tiny_mce/plugins/print/editor_plugin.js | 2 - .../plugins/print/editor_plugin_src.js | 26 - .../tiny_mce/plugins/print/images/print.gif | Bin 1013 -> 0 bytes public/tiny_mce/plugins/print/langs/cs.js | 3 - public/tiny_mce/plugins/print/langs/de.js | 3 - public/tiny_mce/plugins/print/langs/en.js | 3 - public/tiny_mce/plugins/print/langs/fa.js | 8 - public/tiny_mce/plugins/print/langs/fr.js | 3 - public/tiny_mce/plugins/print/langs/fr_ca.js | 3 - public/tiny_mce/plugins/print/langs/pl.js | 4 - public/tiny_mce/plugins/print/langs/pt_br.js | 3 - public/tiny_mce/plugins/print/langs/sv.js | 3 - public/tiny_mce/plugins/print/langs/zh_cn.js | 4 - public/tiny_mce/plugins/print/readme.txt | 17 - public/tiny_mce/plugins/readme.txt | 1 - public/tiny_mce/plugins/save/editor_plugin.js | 2 - .../plugins/save/editor_plugin_src.js | 43 - public/tiny_mce/plugins/save/images/save.gif | Bin 1001 -> 0 bytes public/tiny_mce/plugins/save/langs/cs.js | 3 - public/tiny_mce/plugins/save/langs/de.js | 3 - public/tiny_mce/plugins/save/langs/en.js | 3 - public/tiny_mce/plugins/save/langs/fa.js | 8 - public/tiny_mce/plugins/save/langs/fr.js | 3 - public/tiny_mce/plugins/save/langs/fr_ca.js | 3 - public/tiny_mce/plugins/save/langs/pl.js | 4 - public/tiny_mce/plugins/save/langs/pt_br.js | 3 - public/tiny_mce/plugins/save/langs/zh_cn.js | 4 - public/tiny_mce/plugins/save/readme.txt | 19 - .../plugins/searchreplace/editor_plugin.js | 2 - .../searchreplace/editor_plugin_src.js | 173 - .../plugins/searchreplace/images/replace.gif | Bin 152 -> 0 bytes .../plugins/searchreplace/images/search.gif | Bin 990 -> 0 bytes .../plugins/searchreplace/langs/cs.js | 19 - .../plugins/searchreplace/langs/de.js | 19 - .../plugins/searchreplace/langs/en.js | 19 - .../plugins/searchreplace/langs/fa.js | 24 - .../plugins/searchreplace/langs/fr.js | 19 - .../plugins/searchreplace/langs/fr_ca.js | 20 - .../plugins/searchreplace/langs/pl.js | 20 - .../plugins/searchreplace/langs/pt_br.js | 19 - .../plugins/searchreplace/langs/sv.js | 19 - .../plugins/searchreplace/langs/zh_cn.js | 20 - .../tiny_mce/plugins/searchreplace/readme.txt | 18 - .../plugins/searchreplace/replace.htm | 88 - .../tiny_mce/plugins/searchreplace/search.htm | 77 - public/tiny_mce/plugins/table/cell.htm | 137 - .../tiny_mce/plugins/table/editor_plugin.js | 2 - .../plugins/table/editor_plugin_src.js | 1142 ---- .../tiny_mce/plugins/table/images/buttons.gif | Bin 2113 -> 0 bytes .../tiny_mce/plugins/table/images/table.gif | Bin 1018 -> 0 bytes .../plugins/table/images/table_cell_props.gif | Bin 369 -> 0 bytes .../plugins/table/images/table_delete_col.gif | Bin 929 -> 0 bytes .../plugins/table/images/table_delete_row.gif | Bin 942 -> 0 bytes .../table/images/table_insert_col_after.gif | Bin 936 -> 0 bytes .../table/images/table_insert_col_before.gif | Bin 935 -> 0 bytes .../table/images/table_insert_row_after.gif | Bin 928 -> 0 bytes .../table/images/table_insert_row_before.gif | Bin 928 -> 0 bytes .../table/images/table_merge_cells.gif | Bin 383 -> 0 bytes .../plugins/table/images/table_row_props.gif | Bin 367 -> 0 bytes .../table/images/table_split_cells.gif | Bin 396 -> 0 bytes public/tiny_mce/plugins/table/langs/ar.js | 41 - public/tiny_mce/plugins/table/langs/cs.js | 41 - public/tiny_mce/plugins/table/langs/da.js | 41 - public/tiny_mce/plugins/table/langs/de.js | 41 - public/tiny_mce/plugins/table/langs/el.js | 41 - public/tiny_mce/plugins/table/langs/en.js | 41 - public/tiny_mce/plugins/table/langs/es.js | 41 - public/tiny_mce/plugins/table/langs/fa.js | 45 - public/tiny_mce/plugins/table/langs/fi.js | 41 - public/tiny_mce/plugins/table/langs/fr.js | 41 - public/tiny_mce/plugins/table/langs/fr_ca.js | 41 - public/tiny_mce/plugins/table/langs/hu.js | 41 - public/tiny_mce/plugins/table/langs/it.js | 41 - public/tiny_mce/plugins/table/langs/ja.js | 41 - public/tiny_mce/plugins/table/langs/ko.js | 41 - public/tiny_mce/plugins/table/langs/nl.js | 41 - public/tiny_mce/plugins/table/langs/no.js | 41 - public/tiny_mce/plugins/table/langs/pl.js | 39 - public/tiny_mce/plugins/table/langs/pt.js | 41 - .../tiny_mce/plugins/table/langs/readme.txt | 4 - public/tiny_mce/plugins/table/langs/sv.js | 41 - public/tiny_mce/plugins/table/langs/tw.js | 41 - public/tiny_mce/plugins/table/langs/zh_cn.js | 42 - public/tiny_mce/plugins/table/merge_cells.htm | 56 - public/tiny_mce/plugins/table/readme.txt | 44 - public/tiny_mce/plugins/table/row.htm | 127 - public/tiny_mce/plugins/table/table.htm | 153 - public/tiny_mce/plugins/zoom/editor_plugin.js | 7 - .../plugins/zoom/editor_plugin_src.js | 38 - public/tiny_mce/plugins/zoom/langs/fa.js | 8 - public/tiny_mce/plugins/zoom/langs/fr_ca.js | 3 - public/tiny_mce/plugins/zoom/langs/pl.js | 4 - public/tiny_mce/plugins/zoom/langs/pt_br.js | 3 - public/tiny_mce/plugins/zoom/langs/zh_cn.js | 5 - public/tiny_mce/plugins/zoom/readme.txt | 22 - public/tiny_mce/themes/advanced/anchor.htm | 45 - public/tiny_mce/themes/advanced/charmap.htm | 378 -- .../tiny_mce/themes/advanced/color_picker.htm | 271 - .../themes/advanced/docs/en/about.htm | 32 - .../advanced/docs/en/common_buttons.htm | 163 - .../docs/en/images/insert_anchor_window.gif | Bin 5189 -> 0 bytes .../docs/en/images/insert_image_window.gif | Bin 7195 -> 0 bytes .../docs/en/images/insert_link_window.gif | Bin 5658 -> 0 bytes .../docs/en/images/insert_table_window.gif | Bin 7094 -> 0 bytes .../themes/advanced/docs/en/index.htm | 27 - .../advanced/docs/en/insert_anchor_button.htm | 33 - .../advanced/docs/en/insert_image_button.htm | 66 - .../advanced/docs/en/insert_link_button.htm | 34 - .../advanced/docs/en/insert_table_button.htm | 72 - .../themes/advanced/docs/en/style.css | 28 - .../themes/advanced/docs/images/table.gif | Bin 1018 -> 0 bytes .../advanced/docs/images/table_delete_col.gif | Bin 929 -> 0 bytes .../advanced/docs/images/table_delete_row.gif | Bin 942 -> 0 bytes .../docs/images/table_insert_col_after.gif | Bin 936 -> 0 bytes .../docs/images/table_insert_col_before.gif | Bin 935 -> 0 bytes .../docs/images/table_insert_row_after.gif | Bin 928 -> 0 bytes .../docs/images/table_insert_row_before.gif | Bin 928 -> 0 bytes .../themes/advanced/editor_content.css | 27 - .../tiny_mce/themes/advanced/editor_popup.css | 121 - .../themes/advanced/editor_template.js | 31 - .../themes/advanced/editor_template_src.js | 1010 --- public/tiny_mce/themes/advanced/editor_ui.css | 199 - public/tiny_mce/themes/advanced/image.htm | 186 - .../themes/advanced/images/anchor.gif | Bin 943 -> 0 bytes .../themes/advanced/images/attachment.gif | Bin 182 -> 0 bytes .../themes/advanced/images/backcolor.gif | Bin 943 -> 0 bytes .../tiny_mce/themes/advanced/images/bold.gif | Bin 864 -> 0 bytes .../themes/advanced/images/bold_de_se.gif | Bin 79 -> 0 bytes .../themes/advanced/images/bold_fr.gif | Bin 78 -> 0 bytes .../themes/advanced/images/bold_ru.gif | Bin 77 -> 0 bytes .../themes/advanced/images/browse.gif | Bin 113 -> 0 bytes .../themes/advanced/images/bullist.gif | Bin 883 -> 0 bytes .../themes/advanced/images/buttons.gif | Bin 3889 -> 0 bytes .../themes/advanced/images/center.gif | Bin 855 -> 0 bytes .../themes/advanced/images/charmap.gif | Bin 958 -> 0 bytes .../themes/advanced/images/cleanup.gif | Bin 977 -> 0 bytes .../tiny_mce/themes/advanced/images/close.gif | Bin 110 -> 0 bytes .../tiny_mce/themes/advanced/images/code.gif | Bin 110 -> 0 bytes .../tiny_mce/themes/advanced/images/copy.gif | Bin 987 -> 0 bytes .../themes/advanced/images/custom_1.gif | Bin 854 -> 0 bytes .../tiny_mce/themes/advanced/images/cut.gif | Bin 358 -> 0 bytes .../themes/advanced/images/forecolor.gif | Bin 605 -> 0 bytes .../tiny_mce/themes/advanced/images/full.gif | Bin 856 -> 0 bytes .../tiny_mce/themes/advanced/images/help.gif | Bin 1027 -> 0 bytes public/tiny_mce/themes/advanced/images/hr.gif | Bin 844 -> 0 bytes .../tiny_mce/themes/advanced/images/image.gif | Bin 194 -> 0 bytes .../themes/advanced/images/indent.gif | Bin 890 -> 0 bytes .../themes/advanced/images/italic.gif | Bin 860 -> 0 bytes .../themes/advanced/images/italic_de_se.gif | Bin 81 -> 0 bytes .../themes/advanced/images/italic_ru.gif | Bin 78 -> 0 bytes .../tiny_mce/themes/advanced/images/left.gif | Bin 856 -> 0 bytes .../tiny_mce/themes/advanced/images/link.gif | Bin 545 -> 0 bytes .../themes/advanced/images/newdocument.gif | Bin 230 -> 0 bytes .../themes/advanced/images/numlist.gif | Bin 889 -> 0 bytes .../themes/advanced/images/outdent.gif | Bin 887 -> 0 bytes .../tiny_mce/themes/advanced/images/paste.gif | Bin 1022 -> 0 bytes .../tiny_mce/themes/advanced/images/redo.gif | Bin 942 -> 0 bytes .../themes/advanced/images/removeformat.gif | Bin 340 -> 0 bytes .../tiny_mce/themes/advanced/images/right.gif | Bin 855 -> 0 bytes .../themes/advanced/images/spacer.gif | Bin 43 -> 0 bytes .../themes/advanced/images/strikethrough.gif | Bin 873 -> 0 bytes .../tiny_mce/themes/advanced/images/sub.gif | Bin 900 -> 0 bytes .../tiny_mce/themes/advanced/images/sup.gif | Bin 906 -> 0 bytes .../tiny_mce/themes/advanced/images/table.gif | Bin 1018 -> 0 bytes .../advanced/images/table_delete_col.gif | Bin 929 -> 0 bytes .../advanced/images/table_delete_row.gif | Bin 942 -> 0 bytes .../images/table_insert_col_after.gif | Bin 936 -> 0 bytes .../images/table_insert_col_before.gif | Bin 935 -> 0 bytes .../images/table_insert_row_after.gif | Bin 928 -> 0 bytes .../images/table_insert_row_before.gif | Bin 928 -> 0 bytes .../themes/advanced/images/underline.gif | Bin 872 -> 0 bytes .../themes/advanced/images/underline_fr.gif | Bin 125 -> 0 bytes .../themes/advanced/images/underline_ru.gif | Bin 77 -> 0 bytes .../tiny_mce/themes/advanced/images/undo.gif | Bin 945 -> 0 bytes .../themes/advanced/images/unlink.gif | Bin 561 -> 0 bytes .../themes/advanced/images/visualaid.gif | Bin 1006 -> 0 bytes public/tiny_mce/themes/advanced/langs/ar.js | 60 - public/tiny_mce/themes/advanced/langs/ca.js | 61 - public/tiny_mce/themes/advanced/langs/cs.js | 60 - public/tiny_mce/themes/advanced/langs/da.js | 61 - public/tiny_mce/themes/advanced/langs/de.js | 63 - public/tiny_mce/themes/advanced/langs/el.js | 61 - public/tiny_mce/themes/advanced/langs/en.js | 61 - public/tiny_mce/themes/advanced/langs/es.js | 61 - public/tiny_mce/themes/advanced/langs/fa.js | 62 - public/tiny_mce/themes/advanced/langs/fi.js | 60 - public/tiny_mce/themes/advanced/langs/fr.js | 62 - .../tiny_mce/themes/advanced/langs/fr_ca.js | 60 - public/tiny_mce/themes/advanced/langs/hu.js | 61 - public/tiny_mce/themes/advanced/langs/it.js | 61 - public/tiny_mce/themes/advanced/langs/ja.js | 59 - public/tiny_mce/themes/advanced/langs/ko.js | 62 - public/tiny_mce/themes/advanced/langs/nl.js | 63 - public/tiny_mce/themes/advanced/langs/no.js | 63 - public/tiny_mce/themes/advanced/langs/pl.js | 61 - public/tiny_mce/themes/advanced/langs/pt.js | 62 - .../tiny_mce/themes/advanced/langs/pt_br.js | 61 - .../tiny_mce/themes/advanced/langs/readme.txt | 4 - public/tiny_mce/themes/advanced/langs/sv.js | 62 - public/tiny_mce/themes/advanced/langs/tw.js | 88 - .../tiny_mce/themes/advanced/langs/zh_cn.js | 62 - public/tiny_mce/themes/advanced/link.htm | 181 - .../themes/advanced/source_editor.htm | 86 - .../tiny_mce/themes/default/docs/en/about.htm | 32 - .../themes/default/docs/en/common_buttons.htm | 111 - .../docs/en/images/insert_image_window.gif | Bin 5680 -> 0 bytes .../docs/en/images/insert_link_window.gif | Bin 5658 -> 0 bytes .../tiny_mce/themes/default/docs/en/index.htm | 25 - .../default/docs/en/insert_image_button.htm | 34 - .../default/docs/en/insert_link_button.htm | 34 - .../tiny_mce/themes/default/docs/en/style.css | 28 - .../themes/default/editor_content.css | 27 - .../tiny_mce/themes/default/editor_popup.css | 41 - .../themes/default/editor_template.js | 32 - .../themes/default/editor_template_src.js | 151 - public/tiny_mce/themes/default/editor_ui.css | 100 - public/tiny_mce/themes/default/image.htm | 57 - .../tiny_mce/themes/default/images/bold.gif | Bin 864 -> 0 bytes .../themes/default/images/bold_de_se.gif | Bin 79 -> 0 bytes .../themes/default/images/bold_fr.gif | Bin 78 -> 0 bytes .../themes/default/images/bold_ru.gif | Bin 77 -> 0 bytes .../themes/default/images/bullist.gif | Bin 883 -> 0 bytes .../tiny_mce/themes/default/images/center.gif | Bin 855 -> 0 bytes .../themes/default/images/cleanup.gif | Bin 977 -> 0 bytes .../tiny_mce/themes/default/images/copy.gif | Bin 987 -> 0 bytes public/tiny_mce/themes/default/images/cut.gif | Bin 358 -> 0 bytes .../tiny_mce/themes/default/images/full.gif | Bin 856 -> 0 bytes .../tiny_mce/themes/default/images/help.gif | Bin 1027 -> 0 bytes .../tiny_mce/themes/default/images/image.gif | Bin 194 -> 0 bytes .../tiny_mce/themes/default/images/indent.gif | Bin 890 -> 0 bytes .../tiny_mce/themes/default/images/italic.gif | Bin 860 -> 0 bytes .../themes/default/images/italic_de_se.gif | Bin 81 -> 0 bytes .../themes/default/images/italic_ru.gif | Bin 78 -> 0 bytes .../tiny_mce/themes/default/images/left.gif | Bin 856 -> 0 bytes .../tiny_mce/themes/default/images/link.gif | Bin 545 -> 0 bytes .../themes/default/images/numlist.gif | Bin 889 -> 0 bytes .../themes/default/images/outdent.gif | Bin 887 -> 0 bytes .../tiny_mce/themes/default/images/paste.gif | Bin 1022 -> 0 bytes .../tiny_mce/themes/default/images/redo.gif | Bin 942 -> 0 bytes .../tiny_mce/themes/default/images/right.gif | Bin 855 -> 0 bytes .../tiny_mce/themes/default/images/spacer.gif | Bin 43 -> 0 bytes .../themes/default/images/strikethrough.gif | Bin 873 -> 0 bytes .../themes/default/images/underline.gif | Bin 872 -> 0 bytes .../themes/default/images/underline_ru.gif | Bin 77 -> 0 bytes .../tiny_mce/themes/default/images/undo.gif | Bin 945 -> 0 bytes .../tiny_mce/themes/default/images/unlink.gif | Bin 561 -> 0 bytes public/tiny_mce/themes/default/link.htm | 64 - .../tiny_mce/themes/simple/editor_content.css | 27 - .../tiny_mce/themes/simple/editor_popup.css | 41 - .../tiny_mce/themes/simple/editor_template.js | 20 - .../themes/simple/editor_template_src.js | 70 - public/tiny_mce/themes/simple/editor_ui.css | 100 - public/tiny_mce/themes/simple/images/bold.gif | Bin 864 -> 0 bytes .../themes/simple/images/bold_de_se.gif | Bin 79 -> 0 bytes .../tiny_mce/themes/simple/images/bold_fr.gif | Bin 78 -> 0 bytes .../tiny_mce/themes/simple/images/bold_ru.gif | Bin 77 -> 0 bytes .../tiny_mce/themes/simple/images/bullist.gif | Bin 883 -> 0 bytes .../tiny_mce/themes/simple/images/cleanup.gif | Bin 977 -> 0 bytes .../tiny_mce/themes/simple/images/italic.gif | Bin 860 -> 0 bytes .../themes/simple/images/italic_de_se.gif | Bin 81 -> 0 bytes .../themes/simple/images/italic_ru.gif | Bin 78 -> 0 bytes .../tiny_mce/themes/simple/images/numlist.gif | Bin 889 -> 0 bytes public/tiny_mce/themes/simple/images/redo.gif | Bin 942 -> 0 bytes .../tiny_mce/themes/simple/images/spacer.gif | Bin 43 -> 0 bytes .../themes/simple/images/strikethrough.gif | Bin 873 -> 0 bytes .../themes/simple/images/underline.gif | Bin 129 -> 0 bytes .../themes/simple/images/underline_ru.gif | Bin 77 -> 0 bytes public/tiny_mce/themes/simple/images/undo.gif | Bin 945 -> 0 bytes public/tiny_mce/tiny_mce.js | 12 - public/tiny_mce/tiny_mce_gzip.php | 88 - public/tiny_mce/tiny_mce_popup.js | 96 - public/tiny_mce/tiny_mce_src.js | 4884 --------------- script/about | 4 - script/benchmarker | 19 - script/breakpointer | 3 - script/console | 3 - script/console_sandbox.rb | 7 - script/dbconsole | 3 - script/destroy | 3 - script/generate | 3 - script/lighttpd | 2 - script/local2gettext | 47 - script/localize | 48 - script/performance/benchmarker | 3 - script/performance/profiler | 3 - script/performance/request | 3 - script/plugin | 3 - script/process/inspector | 3 - script/process/reaper | 3 - script/process/spawner | 3 - script/process/spinner | 3 - script/profiler | 34 - script/rails | 6 + script/rgettext.rb | 215 - script/runner | 3 - script/scgi_rails | 339 - script/server | 3 - test/fixtures/expressions.yml | 5 - test/fixtures/filters.yml | 5 - test/fixtures/users.yml | 5 - test/performance/browsing_test.rb | 9 + test/test_helper.rb | 18 +- test/unit/expression_test.rb | 14 - test/unit/filter_test.rb | 14 - test/unit/user_test.rb | 14 - vendor/ezcrypto-0.1.1/._README | Bin vendor/ezcrypto-0.1.1/._rakefile | Bin vendor/ezcrypto-0.1.1/MIT-LICENSE | 0 vendor/ezcrypto-0.1.1/README | 0 vendor/ezcrypto-0.1.1/lib/ezcrypto.rb | 0 vendor/ezcrypto-0.1.1/rakefile | 0 vendor/ezcrypto-0.1.1/test/ezcrypto_test.rb | 0 vendor/plugins/.gitkeep | 0 vendor/plugins/auto_complete/README | 0 vendor/plugins/auto_complete/Rakefile | 0 vendor/plugins/auto_complete/init.rb | 0 .../auto_complete/lib/auto_complete.rb | 0 .../lib/auto_complete_macros_helper.rb | 0 .../auto_complete/test/auto_complete_test.rb | 0 vendor/plugins/classic_pagination/CHANGELOG | 0 vendor/plugins/classic_pagination/README | 0 vendor/plugins/classic_pagination/Rakefile | 0 vendor/plugins/classic_pagination/init.rb | 0 vendor/plugins/classic_pagination/install.rb | 0 .../classic_pagination/lib/pagination.rb | 0 .../lib/pagination_helper.rb | 0 .../test/fixtures/companies.yml | 0 .../test/fixtures/company.rb | 0 .../test/fixtures/developer.rb | 0 .../test/fixtures/developers.yml | 0 .../test/fixtures/developers_projects.yml | 0 .../test/fixtures/project.rb | 0 .../test/fixtures/projects.yml | 0 .../test/fixtures/replies.yml | 0 .../classic_pagination/test/fixtures/reply.rb | 0 .../test/fixtures/schema.sql | 0 .../classic_pagination/test/fixtures/topic.rb | 0 .../test/fixtures/topics.yml | 0 .../plugins/classic_pagination/test/helper.rb | 0 .../test/pagination_helper_test.rb | 0 .../test/pagination_test.rb | 0 vendor/plugins/will_paginate/.autotest | 54 - vendor/plugins/will_paginate/.gitignore | 4 - vendor/plugins/will_paginate/.manifest | 66 - vendor/plugins/will_paginate/CHANGELOG.rdoc | 104 - vendor/plugins/will_paginate/LICENSE | 18 - vendor/plugins/will_paginate/README.rdoc | 123 - vendor/plugins/will_paginate/Rakefile | 62 - .../will_paginate/examples/apple-circle.gif | Bin 178 -> 0 bytes .../plugins/will_paginate/examples/index.haml | 69 - .../plugins/will_paginate/examples/index.html | 92 - .../will_paginate/examples/pagination.css | 90 - .../will_paginate/examples/pagination.sass | 91 - vendor/plugins/will_paginate/init.rb | 1 - .../will_paginate/lib/will_paginate.rb | 43 - .../will_paginate/lib/will_paginate/array.rb | 33 - .../lib/will_paginate/collection.rb | 145 - .../lib/will_paginate/core_ext.rb | 58 - .../lib/will_paginate/deprecation.rb | 50 - .../lib/will_paginate/finders.rb | 9 - .../will_paginate/finders/active_record.rb | 204 - .../finders/active_record/named_scope.rb | 170 - .../active_record/named_scope_patch.rb | 39 - .../will_paginate/finders/active_resource.rb | 48 - .../lib/will_paginate/finders/base.rb | 80 - .../lib/will_paginate/finders/data_mapper.rb | 30 - .../lib/will_paginate/version.rb | 9 - .../lib/will_paginate/view_helpers.rb | 39 - .../will_paginate/view_helpers/action_view.rb | 82 - .../lib/will_paginate/view_helpers/base.rb | 137 - .../view_helpers/link_renderer.rb | 177 - .../view_helpers/link_renderer_base.rb | 76 - .../will_paginate/spec/collection_spec.rb | 147 - vendor/plugins/will_paginate/spec/console | 8 - .../will_paginate/spec/console_fixtures.rb | 8 - .../plugins/will_paginate/spec/database.yml | 22 - .../spec/finders/active_record_spec.rb | 460 -- .../spec/finders/active_resource_spec.rb | 52 - .../finders/activerecord_test_connector.rb | 107 - .../will_paginate/spec/finders_spec.rb | 76 - .../will_paginate/spec/fixtures/admin.rb | 3 - .../will_paginate/spec/fixtures/developer.rb | 13 - .../spec/fixtures/developers_projects.yml | 13 - .../will_paginate/spec/fixtures/project.rb | 15 - .../will_paginate/spec/fixtures/projects.yml | 6 - .../will_paginate/spec/fixtures/replies.yml | 29 - .../will_paginate/spec/fixtures/reply.rb | 7 - .../will_paginate/spec/fixtures/schema.rb | 38 - .../will_paginate/spec/fixtures/topic.rb | 6 - .../will_paginate/spec/fixtures/topics.yml | 30 - .../will_paginate/spec/fixtures/user.rb | 2 - .../will_paginate/spec/fixtures/users.yml | 35 - vendor/plugins/will_paginate/spec/rcov.opts | 2 - vendor/plugins/will_paginate/spec/spec.opts | 2 - .../plugins/will_paginate/spec/spec_helper.rb | 76 - vendor/plugins/will_paginate/spec/tasks.rake | 34 - .../spec/view_helpers/action_view_spec.rb | 343 - .../spec/view_helpers/base_spec.rb | 64 - .../view_helpers/link_renderer_base_spec.rb | 84 - .../spec/view_helpers/view_example_group.rb | 111 - .../will_paginate/will_paginate.gemspec | 20 - 752 files changed, 4866 insertions(+), 27923 deletions(-) create mode 100644 AUTHORS delete mode 100644 CHANGELOG create mode 100755 Gemfile create mode 100755 Gemfile.lock delete mode 100644 MIT-LICENSE delete mode 100644 README create mode 100755 README.markdown mode change 100644 => 100755 Rakefile create mode 100644 UNLICENSE mode change 100644 => 100755 app/controllers/application_controller.rb mode change 100644 => 100755 app/controllers/contact_groups_controller.rb mode change 100644 => 100755 app/controllers/contacts_controller.rb mode change 100644 => 100755 app/controllers/folders_controller.rb mode change 100644 => 100755 app/controllers/login_controller.rb mode change 100644 => 100755 app/controllers/webmail_controller.rb mode change 100644 => 100755 app/helpers/application_helper.rb mode change 100644 => 100755 app/helpers/contact_group_helper.rb mode change 100644 => 100755 app/helpers/contacts_helper.rb mode change 100644 => 100755 app/helpers/folders_helper.rb mode change 100644 => 100755 app/helpers/navigation_helper.rb mode change 100644 => 100755 app/helpers/webmail_helper.rb mode change 100644 => 100755 app/models/contact.rb mode change 100644 => 100755 app/models/contact_group.rb mode change 100644 => 100755 app/models/customer.rb mode change 100644 => 100755 app/models/mail_pref.rb rename app/views/contact_groups/{edit.rhtml => edit.html.erb} (100%) mode change 100644 => 100755 mode change 100644 => 100755 app/views/contact_groups/index.html.erb rename app/views/contacts/{add_multiple.rhtml => add_multiple.html.erb} (100%) mode change 100644 => 100755 rename app/views/contacts/{choose.rhtml => choose.html.erb} (100%) mode change 100644 => 100755 rename app/views/contacts/{import_preview.rhtml => import_preview.html.erb} (100%) mode change 100644 => 100755 mode change 100644 => 100755 app/views/contacts/index.html.erb mode change 100644 => 100755 app/views/contacts/new.html.erb mode change 100644 => 100755 app/views/folders/index.html.erb mode change 100644 => 100755 app/views/layouts/chooser.html.erb mode change 100644 => 100755 app/views/layouts/login.html.erb mode change 100644 => 100755 app/views/layouts/public.html.erb mode change 100644 => 100755 app/views/login/index.rhtml mode change 100644 => 100755 app/views/shared/_folders.html.erb rename app/views/webmail/{_contacts.rhtml => _contacts.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{_expr.rhtml => _expr.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{_filter.rhtml => _filter.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{_message_row.rhtml => _message_row.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{_search.rhtml => _search.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{compose.rhtml => compose.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{error_connection.rhtml => error_connection.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{filter.rhtml => filter.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{filters.rhtml => filters.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{folders.rhtml => folders.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{mailsent.rhtml => mailsent.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{message.rhtml => message.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{messages.rhtml => messages.html.erb} (96%) mode change 100644 => 100755 rename app/views/webmail/{noattachment.rhtml => noattachment.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{prefs.rhtml => prefs.html.erb} (100%) mode change 100644 => 100755 rename app/views/webmail/{view_source.rhtml => view_source.html.erb} (100%) mode change 100644 => 100755 create mode 100755 arts/logo.png create mode 100755 arts/logo.xcf create mode 100755 config.ru create mode 100755 config/application.rb mode change 100644 => 100755 config/boot.rb mode change 100644 => 100755 config/default_site.rb mode change 100644 => 100755 config/environment.rb mode change 100644 => 100755 config/environments/development.rb mode change 100644 => 100755 config/environments/production.rb mode change 100644 => 100755 config/environments/test.rb create mode 100755 config/initializers/backtrace_silencers.rb create mode 100755 config/initializers/inflections.rb create mode 100755 config/initializers/mime_types.rb create mode 100755 config/initializers/pluralization.rb create mode 100755 config/initializers/secret_token.rb create mode 100755 config/initializers/session_store.rb delete mode 100644 config/lighttpd.conf mode change 100644 => 100755 config/locales/en.yml mode change 100644 => 100755 config/locales/es-ES.yml rename config/locales/{pl-PL.yml => pl.yml} (96%) mode change 100644 => 100755 mode change 100644 => 100755 config/routes.rb mode change 100644 => 100755 db/migrate/20090107193228_init.rb delete mode 100644 db/schema.mysql.sql delete mode 100644 db/schema.pgsql.sql mode change 100644 => 100755 db/schema.rb create mode 100755 db/seeds.rb mode change 100644 => 100755 doc/README_FOR_APP mode change 100644 => 100755 lib/cdfutils.rb mode change 100644 => 100755 lib/imap_utils.rb create mode 100755 lib/tasks/.gitkeep mode change 100644 => 100755 lib/tmail_patch.rb mode change 100644 => 100755 lib/webmail/bounced_mail.rb mode change 100644 => 100755 lib/webmail/cdfmail.rb mode change 100644 => 100755 lib/webmail/environment.rb mode change 100644 => 100755 lib/webmail/expression.rb mode change 100644 => 100755 lib/webmail/filter.rb mode change 100644 => 100755 lib/webmail/imap_message.rb mode change 100644 => 100755 lib/webmail/imapmailbox.rb mode change 100644 => 100755 lib/webmail/mail2screen.rb mode change 100644 => 100755 lib/webmail/mail_transform.rb mode change 100644 => 100755 lib/webmail/maildropserializator.rb mode change 100644 => 100755 lib/webmail/routes.rb mode change 100644 => 100755 lib/webmail/virtual_email.rb mode change 100644 => 100755 public/404.html create mode 100755 public/422.html mode change 100644 => 100755 public/500.html mode change 100644 => 100755 public/favicon.ico mode change 100644 => 100755 public/images/attachment.png mode change 100644 => 100755 public/images/d6deec.gif mode change 100644 => 100755 public/images/deselect.png mode change 100644 => 100755 public/images/list_closed.gif mode change 100644 => 100755 public/images/list_opened.gif mode change 100644 => 100755 public/images/noprogress.gif create mode 100755 public/images/rails.png mode change 100644 => 100755 public/images/select.png mode change 100644 => 100755 public/images/white.gif mode change 100644 => 100755 public/images/white.png mode change 100644 => 100755 public/javascripts/application.js mode change 100644 => 100755 public/javascripts/controls.js mode change 100644 => 100755 public/javascripts/dragdrop.js mode change 100644 => 100755 public/javascripts/effects.js mode change 100644 => 100755 public/javascripts/effects2.js mode change 100644 => 100755 public/javascripts/global.js mode change 100644 => 100755 public/javascripts/global_src.js mode change 100644 => 100755 public/javascripts/prototype.js mode change 100644 => 100755 public/javascripts/prototype_src.js create mode 100755 public/javascripts/rails.js mode change 100644 => 100755 public/javascripts/scriptaculous.js mode change 100644 => 100755 public/javascripts/slider.js create mode 100755 public/robots.txt create mode 100755 public/stylesheets/.gitkeep mode change 100644 => 100755 public/stylesheets/admin.css mode change 100644 => 100755 public/stylesheets/mailr.css mode change 100644 => 100755 public/stylesheets/tabs.css mode change 100644 => 100755 public/stylesheets/webmail/icon-folder-open.gif delete mode 100644 public/tiny_mce/blank.htm delete mode 100755 public/tiny_mce/jstrim.pl delete mode 100644 public/tiny_mce/langs/ar.js delete mode 100644 public/tiny_mce/langs/ca.js delete mode 100644 public/tiny_mce/langs/cs.js delete mode 100644 public/tiny_mce/langs/da.js delete mode 100644 public/tiny_mce/langs/de.js delete mode 100644 public/tiny_mce/langs/el.js delete mode 100644 public/tiny_mce/langs/en.js delete mode 100644 public/tiny_mce/langs/es.js delete mode 100644 public/tiny_mce/langs/fa.js delete mode 100644 public/tiny_mce/langs/fi.js delete mode 100644 public/tiny_mce/langs/fr.js delete mode 100644 public/tiny_mce/langs/fr_ca.js delete mode 100644 public/tiny_mce/langs/hu.js delete mode 100644 public/tiny_mce/langs/it.js delete mode 100644 public/tiny_mce/langs/ja.js delete mode 100644 public/tiny_mce/langs/ko.js delete mode 100644 public/tiny_mce/langs/nl.js delete mode 100644 public/tiny_mce/langs/no.js delete mode 100644 public/tiny_mce/langs/pl.js delete mode 100644 public/tiny_mce/langs/pt.js delete mode 100644 public/tiny_mce/langs/pt_br.js delete mode 100644 public/tiny_mce/langs/readme.txt delete mode 100644 public/tiny_mce/langs/ru.js delete mode 100644 public/tiny_mce/langs/sv.js delete mode 100644 public/tiny_mce/langs/th.js delete mode 100644 public/tiny_mce/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/_template/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/_template/images/template.gif delete mode 100644 public/tiny_mce/plugins/_template/langs/en.js delete mode 100644 public/tiny_mce/plugins/_template/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/_template/popup.htm delete mode 100644 public/tiny_mce/plugins/_template/readme.txt delete mode 100644 public/tiny_mce/plugins/advhr/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/advhr/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/advhr/images/advhr.gif delete mode 100644 public/tiny_mce/plugins/advhr/langs/cs.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/de.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/en.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/fa.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/fr.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/pl.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/sv.js delete mode 100644 public/tiny_mce/plugins/advhr/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/advhr/readme.txt delete mode 100644 public/tiny_mce/plugins/advhr/rule.htm delete mode 100644 public/tiny_mce/plugins/advimage/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/advimage/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/advimage/image.htm delete mode 100644 public/tiny_mce/plugins/advimage/langs/cs.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/de.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/en.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/fa.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/fr.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/ko.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/pl.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/sv.js delete mode 100644 public/tiny_mce/plugins/advimage/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/advimage/readme.txt delete mode 100644 public/tiny_mce/plugins/advlink/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/advlink/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/cs.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/de.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/en.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/fa.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/fr.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/ko.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/pl.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/sv.js delete mode 100644 public/tiny_mce/plugins/advlink/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/advlink/link.htm delete mode 100644 public/tiny_mce/plugins/advlink/readme.txt delete mode 100644 public/tiny_mce/plugins/contextmenu/contextmenu.css delete mode 100644 public/tiny_mce/plugins/contextmenu/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/contextmenu/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/contextmenu/images/spacer.gif delete mode 100644 public/tiny_mce/plugins/directionality/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/directionality/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/directionality/images/ltr.gif delete mode 100644 public/tiny_mce/plugins/directionality/images/rtl.gif delete mode 100644 public/tiny_mce/plugins/directionality/langs/en.js delete mode 100644 public/tiny_mce/plugins/directionality/langs/sv.js delete mode 100644 public/tiny_mce/plugins/directionality/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/directionality/readme.txt delete mode 100644 public/tiny_mce/plugins/emotions/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/emotions/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/emotions/emotions.htm delete mode 100644 public/tiny_mce/plugins/emotions/images/emotions.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/readme.txt delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-cool.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-cry.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-embarassed.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-foot-in-mouth.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-frown.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-innocent.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-kiss.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-laughing.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-money-mouth.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-sealed.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-smile.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-surprised.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-tongue-out.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-undecided.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-wink.gif delete mode 100644 public/tiny_mce/plugins/emotions/images/smiley-yell.gif delete mode 100644 public/tiny_mce/plugins/emotions/langs/cs.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/de.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/el.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/en.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/fa.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/fr.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/it.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/ko.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/pl.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/sv.js delete mode 100644 public/tiny_mce/plugins/emotions/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/emotions/readme.txt delete mode 100644 public/tiny_mce/plugins/flash/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/flash/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/flash/flash.css delete mode 100644 public/tiny_mce/plugins/flash/flash.htm delete mode 100644 public/tiny_mce/plugins/flash/images/flash.gif delete mode 100644 public/tiny_mce/plugins/flash/langs/cs.js delete mode 100644 public/tiny_mce/plugins/flash/langs/de.js delete mode 100644 public/tiny_mce/plugins/flash/langs/en.js delete mode 100644 public/tiny_mce/plugins/flash/langs/fa.js delete mode 100644 public/tiny_mce/plugins/flash/langs/fr.js delete mode 100644 public/tiny_mce/plugins/flash/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/flash/langs/pl.js delete mode 100644 public/tiny_mce/plugins/flash/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/flash/langs/sv.js delete mode 100644 public/tiny_mce/plugins/flash/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/flash/readme.txt delete mode 100644 public/tiny_mce/plugins/fullscreen/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/fullscreen/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/fullscreen/fullscreen.htm delete mode 100644 public/tiny_mce/plugins/fullscreen/images/fullscreen.gif delete mode 100644 public/tiny_mce/plugins/fullscreen/langs/cs.js delete mode 100644 public/tiny_mce/plugins/fullscreen/langs/en.js delete mode 100644 public/tiny_mce/plugins/fullscreen/langs/sv.js delete mode 100644 public/tiny_mce/plugins/fullscreen/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/fullscreen/readme.txt delete mode 100644 public/tiny_mce/plugins/iespell/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/iespell/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/iespell/images/iespell.gif delete mode 100644 public/tiny_mce/plugins/iespell/langs/cs.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/de.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/el.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/en.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/fr.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/it.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/ko.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/pl.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/sv.js delete mode 100644 public/tiny_mce/plugins/iespell/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/iespell/readme.txt delete mode 100644 public/tiny_mce/plugins/insertdatetime/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/images/insertdate.gif delete mode 100644 public/tiny_mce/plugins/insertdatetime/images/inserttime.gif delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/cs.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/de.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/el.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/en.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/fa.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/fr.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/it.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/ko.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/pl.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/sv.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/insertdatetime/readme.txt delete mode 100644 public/tiny_mce/plugins/linkattach/attachment.htm delete mode 100644 public/tiny_mce/plugins/linkattach/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/linkattach/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/linkattach/langs/en.js delete mode 100644 public/tiny_mce/plugins/paste/blank.htm delete mode 100644 public/tiny_mce/plugins/paste/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/paste/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/paste/images/pastetext.gif delete mode 100644 public/tiny_mce/plugins/paste/images/pasteword.gif delete mode 100644 public/tiny_mce/plugins/paste/images/selectall.gif delete mode 100644 public/tiny_mce/plugins/paste/langs/cs.js delete mode 100644 public/tiny_mce/plugins/paste/langs/en.js delete mode 100644 public/tiny_mce/plugins/paste/langs/sv.js delete mode 100644 public/tiny_mce/plugins/paste/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/paste/pastetext.htm delete mode 100644 public/tiny_mce/plugins/paste/pasteword.htm delete mode 100644 public/tiny_mce/plugins/paste/readme.txt delete mode 100644 public/tiny_mce/plugins/preview/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/preview/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/preview/example.html delete mode 100644 public/tiny_mce/plugins/preview/images/preview.gif delete mode 100644 public/tiny_mce/plugins/preview/langs/cs.js delete mode 100644 public/tiny_mce/plugins/preview/langs/de.js delete mode 100644 public/tiny_mce/plugins/preview/langs/el.js delete mode 100644 public/tiny_mce/plugins/preview/langs/en.js delete mode 100644 public/tiny_mce/plugins/preview/langs/fa.js delete mode 100644 public/tiny_mce/plugins/preview/langs/fr.js delete mode 100644 public/tiny_mce/plugins/preview/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/preview/langs/it.js delete mode 100644 public/tiny_mce/plugins/preview/langs/ko.js delete mode 100644 public/tiny_mce/plugins/preview/langs/pl.js delete mode 100644 public/tiny_mce/plugins/preview/langs/pt.js delete mode 100644 public/tiny_mce/plugins/preview/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/preview/langs/sv.js delete mode 100644 public/tiny_mce/plugins/preview/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/preview/readme.txt delete mode 100644 public/tiny_mce/plugins/print/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/print/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/print/images/print.gif delete mode 100644 public/tiny_mce/plugins/print/langs/cs.js delete mode 100644 public/tiny_mce/plugins/print/langs/de.js delete mode 100644 public/tiny_mce/plugins/print/langs/en.js delete mode 100644 public/tiny_mce/plugins/print/langs/fa.js delete mode 100644 public/tiny_mce/plugins/print/langs/fr.js delete mode 100644 public/tiny_mce/plugins/print/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/print/langs/pl.js delete mode 100644 public/tiny_mce/plugins/print/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/print/langs/sv.js delete mode 100644 public/tiny_mce/plugins/print/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/print/readme.txt delete mode 100644 public/tiny_mce/plugins/readme.txt delete mode 100644 public/tiny_mce/plugins/save/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/save/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/save/images/save.gif delete mode 100644 public/tiny_mce/plugins/save/langs/cs.js delete mode 100644 public/tiny_mce/plugins/save/langs/de.js delete mode 100644 public/tiny_mce/plugins/save/langs/en.js delete mode 100644 public/tiny_mce/plugins/save/langs/fa.js delete mode 100644 public/tiny_mce/plugins/save/langs/fr.js delete mode 100644 public/tiny_mce/plugins/save/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/save/langs/pl.js delete mode 100644 public/tiny_mce/plugins/save/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/save/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/save/readme.txt delete mode 100644 public/tiny_mce/plugins/searchreplace/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/searchreplace/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/searchreplace/images/replace.gif delete mode 100644 public/tiny_mce/plugins/searchreplace/images/search.gif delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/cs.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/de.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/en.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/fa.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/fr.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/pl.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/sv.js delete mode 100644 public/tiny_mce/plugins/searchreplace/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/searchreplace/readme.txt delete mode 100644 public/tiny_mce/plugins/searchreplace/replace.htm delete mode 100644 public/tiny_mce/plugins/searchreplace/search.htm delete mode 100644 public/tiny_mce/plugins/table/cell.htm delete mode 100644 public/tiny_mce/plugins/table/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/table/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/table/images/buttons.gif delete mode 100644 public/tiny_mce/plugins/table/images/table.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_cell_props.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_delete_col.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_delete_row.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_insert_col_after.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_insert_col_before.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_insert_row_after.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_insert_row_before.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_merge_cells.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_row_props.gif delete mode 100644 public/tiny_mce/plugins/table/images/table_split_cells.gif delete mode 100644 public/tiny_mce/plugins/table/langs/ar.js delete mode 100644 public/tiny_mce/plugins/table/langs/cs.js delete mode 100644 public/tiny_mce/plugins/table/langs/da.js delete mode 100644 public/tiny_mce/plugins/table/langs/de.js delete mode 100644 public/tiny_mce/plugins/table/langs/el.js delete mode 100644 public/tiny_mce/plugins/table/langs/en.js delete mode 100644 public/tiny_mce/plugins/table/langs/es.js delete mode 100644 public/tiny_mce/plugins/table/langs/fa.js delete mode 100644 public/tiny_mce/plugins/table/langs/fi.js delete mode 100644 public/tiny_mce/plugins/table/langs/fr.js delete mode 100644 public/tiny_mce/plugins/table/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/table/langs/hu.js delete mode 100644 public/tiny_mce/plugins/table/langs/it.js delete mode 100644 public/tiny_mce/plugins/table/langs/ja.js delete mode 100644 public/tiny_mce/plugins/table/langs/ko.js delete mode 100644 public/tiny_mce/plugins/table/langs/nl.js delete mode 100644 public/tiny_mce/plugins/table/langs/no.js delete mode 100644 public/tiny_mce/plugins/table/langs/pl.js delete mode 100644 public/tiny_mce/plugins/table/langs/pt.js delete mode 100644 public/tiny_mce/plugins/table/langs/readme.txt delete mode 100644 public/tiny_mce/plugins/table/langs/sv.js delete mode 100644 public/tiny_mce/plugins/table/langs/tw.js delete mode 100644 public/tiny_mce/plugins/table/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/table/merge_cells.htm delete mode 100644 public/tiny_mce/plugins/table/readme.txt delete mode 100644 public/tiny_mce/plugins/table/row.htm delete mode 100644 public/tiny_mce/plugins/table/table.htm delete mode 100644 public/tiny_mce/plugins/zoom/editor_plugin.js delete mode 100644 public/tiny_mce/plugins/zoom/editor_plugin_src.js delete mode 100644 public/tiny_mce/plugins/zoom/langs/fa.js delete mode 100644 public/tiny_mce/plugins/zoom/langs/fr_ca.js delete mode 100644 public/tiny_mce/plugins/zoom/langs/pl.js delete mode 100644 public/tiny_mce/plugins/zoom/langs/pt_br.js delete mode 100644 public/tiny_mce/plugins/zoom/langs/zh_cn.js delete mode 100644 public/tiny_mce/plugins/zoom/readme.txt delete mode 100644 public/tiny_mce/themes/advanced/anchor.htm delete mode 100644 public/tiny_mce/themes/advanced/charmap.htm delete mode 100644 public/tiny_mce/themes/advanced/color_picker.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/about.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/common_buttons.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/en/images/insert_link_window.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/en/index.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/insert_image_button.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/insert_link_button.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/insert_table_button.htm delete mode 100644 public/tiny_mce/themes/advanced/docs/en/style.css delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_delete_col.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_delete_row.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_insert_col_after.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif delete mode 100644 public/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif delete mode 100644 public/tiny_mce/themes/advanced/editor_content.css delete mode 100644 public/tiny_mce/themes/advanced/editor_popup.css delete mode 100644 public/tiny_mce/themes/advanced/editor_template.js delete mode 100644 public/tiny_mce/themes/advanced/editor_template_src.js delete mode 100644 public/tiny_mce/themes/advanced/editor_ui.css delete mode 100644 public/tiny_mce/themes/advanced/image.htm delete mode 100644 public/tiny_mce/themes/advanced/images/anchor.gif delete mode 100644 public/tiny_mce/themes/advanced/images/attachment.gif delete mode 100644 public/tiny_mce/themes/advanced/images/backcolor.gif delete mode 100644 public/tiny_mce/themes/advanced/images/bold.gif delete mode 100644 public/tiny_mce/themes/advanced/images/bold_de_se.gif delete mode 100644 public/tiny_mce/themes/advanced/images/bold_fr.gif delete mode 100644 public/tiny_mce/themes/advanced/images/bold_ru.gif delete mode 100644 public/tiny_mce/themes/advanced/images/browse.gif delete mode 100644 public/tiny_mce/themes/advanced/images/bullist.gif delete mode 100644 public/tiny_mce/themes/advanced/images/buttons.gif delete mode 100644 public/tiny_mce/themes/advanced/images/center.gif delete mode 100644 public/tiny_mce/themes/advanced/images/charmap.gif delete mode 100644 public/tiny_mce/themes/advanced/images/cleanup.gif delete mode 100644 public/tiny_mce/themes/advanced/images/close.gif delete mode 100644 public/tiny_mce/themes/advanced/images/code.gif delete mode 100644 public/tiny_mce/themes/advanced/images/copy.gif delete mode 100644 public/tiny_mce/themes/advanced/images/custom_1.gif delete mode 100644 public/tiny_mce/themes/advanced/images/cut.gif delete mode 100644 public/tiny_mce/themes/advanced/images/forecolor.gif delete mode 100644 public/tiny_mce/themes/advanced/images/full.gif delete mode 100644 public/tiny_mce/themes/advanced/images/help.gif delete mode 100644 public/tiny_mce/themes/advanced/images/hr.gif delete mode 100644 public/tiny_mce/themes/advanced/images/image.gif delete mode 100644 public/tiny_mce/themes/advanced/images/indent.gif delete mode 100644 public/tiny_mce/themes/advanced/images/italic.gif delete mode 100644 public/tiny_mce/themes/advanced/images/italic_de_se.gif delete mode 100644 public/tiny_mce/themes/advanced/images/italic_ru.gif delete mode 100644 public/tiny_mce/themes/advanced/images/left.gif delete mode 100644 public/tiny_mce/themes/advanced/images/link.gif delete mode 100644 public/tiny_mce/themes/advanced/images/newdocument.gif delete mode 100644 public/tiny_mce/themes/advanced/images/numlist.gif delete mode 100644 public/tiny_mce/themes/advanced/images/outdent.gif delete mode 100644 public/tiny_mce/themes/advanced/images/paste.gif delete mode 100644 public/tiny_mce/themes/advanced/images/redo.gif delete mode 100644 public/tiny_mce/themes/advanced/images/removeformat.gif delete mode 100644 public/tiny_mce/themes/advanced/images/right.gif delete mode 100644 public/tiny_mce/themes/advanced/images/spacer.gif delete mode 100644 public/tiny_mce/themes/advanced/images/strikethrough.gif delete mode 100644 public/tiny_mce/themes/advanced/images/sub.gif delete mode 100644 public/tiny_mce/themes/advanced/images/sup.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_delete_col.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_delete_row.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_insert_col_after.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_insert_col_before.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_insert_row_after.gif delete mode 100644 public/tiny_mce/themes/advanced/images/table_insert_row_before.gif delete mode 100644 public/tiny_mce/themes/advanced/images/underline.gif delete mode 100644 public/tiny_mce/themes/advanced/images/underline_fr.gif delete mode 100644 public/tiny_mce/themes/advanced/images/underline_ru.gif delete mode 100644 public/tiny_mce/themes/advanced/images/undo.gif delete mode 100644 public/tiny_mce/themes/advanced/images/unlink.gif delete mode 100644 public/tiny_mce/themes/advanced/images/visualaid.gif delete mode 100644 public/tiny_mce/themes/advanced/langs/ar.js delete mode 100644 public/tiny_mce/themes/advanced/langs/ca.js delete mode 100644 public/tiny_mce/themes/advanced/langs/cs.js delete mode 100644 public/tiny_mce/themes/advanced/langs/da.js delete mode 100644 public/tiny_mce/themes/advanced/langs/de.js delete mode 100644 public/tiny_mce/themes/advanced/langs/el.js delete mode 100644 public/tiny_mce/themes/advanced/langs/en.js delete mode 100644 public/tiny_mce/themes/advanced/langs/es.js delete mode 100644 public/tiny_mce/themes/advanced/langs/fa.js delete mode 100644 public/tiny_mce/themes/advanced/langs/fi.js delete mode 100644 public/tiny_mce/themes/advanced/langs/fr.js delete mode 100644 public/tiny_mce/themes/advanced/langs/fr_ca.js delete mode 100644 public/tiny_mce/themes/advanced/langs/hu.js delete mode 100644 public/tiny_mce/themes/advanced/langs/it.js delete mode 100644 public/tiny_mce/themes/advanced/langs/ja.js delete mode 100644 public/tiny_mce/themes/advanced/langs/ko.js delete mode 100644 public/tiny_mce/themes/advanced/langs/nl.js delete mode 100644 public/tiny_mce/themes/advanced/langs/no.js delete mode 100644 public/tiny_mce/themes/advanced/langs/pl.js delete mode 100644 public/tiny_mce/themes/advanced/langs/pt.js delete mode 100644 public/tiny_mce/themes/advanced/langs/pt_br.js delete mode 100644 public/tiny_mce/themes/advanced/langs/readme.txt delete mode 100644 public/tiny_mce/themes/advanced/langs/sv.js delete mode 100644 public/tiny_mce/themes/advanced/langs/tw.js delete mode 100644 public/tiny_mce/themes/advanced/langs/zh_cn.js delete mode 100644 public/tiny_mce/themes/advanced/link.htm delete mode 100644 public/tiny_mce/themes/advanced/source_editor.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/about.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/common_buttons.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/images/insert_image_window.gif delete mode 100644 public/tiny_mce/themes/default/docs/en/images/insert_link_window.gif delete mode 100644 public/tiny_mce/themes/default/docs/en/index.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/insert_image_button.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/insert_link_button.htm delete mode 100644 public/tiny_mce/themes/default/docs/en/style.css delete mode 100644 public/tiny_mce/themes/default/editor_content.css delete mode 100644 public/tiny_mce/themes/default/editor_popup.css delete mode 100644 public/tiny_mce/themes/default/editor_template.js delete mode 100644 public/tiny_mce/themes/default/editor_template_src.js delete mode 100644 public/tiny_mce/themes/default/editor_ui.css delete mode 100644 public/tiny_mce/themes/default/image.htm delete mode 100644 public/tiny_mce/themes/default/images/bold.gif delete mode 100644 public/tiny_mce/themes/default/images/bold_de_se.gif delete mode 100644 public/tiny_mce/themes/default/images/bold_fr.gif delete mode 100644 public/tiny_mce/themes/default/images/bold_ru.gif delete mode 100644 public/tiny_mce/themes/default/images/bullist.gif delete mode 100644 public/tiny_mce/themes/default/images/center.gif delete mode 100644 public/tiny_mce/themes/default/images/cleanup.gif delete mode 100644 public/tiny_mce/themes/default/images/copy.gif delete mode 100644 public/tiny_mce/themes/default/images/cut.gif delete mode 100644 public/tiny_mce/themes/default/images/full.gif delete mode 100644 public/tiny_mce/themes/default/images/help.gif delete mode 100644 public/tiny_mce/themes/default/images/image.gif delete mode 100644 public/tiny_mce/themes/default/images/indent.gif delete mode 100644 public/tiny_mce/themes/default/images/italic.gif delete mode 100644 public/tiny_mce/themes/default/images/italic_de_se.gif delete mode 100644 public/tiny_mce/themes/default/images/italic_ru.gif delete mode 100644 public/tiny_mce/themes/default/images/left.gif delete mode 100644 public/tiny_mce/themes/default/images/link.gif delete mode 100644 public/tiny_mce/themes/default/images/numlist.gif delete mode 100644 public/tiny_mce/themes/default/images/outdent.gif delete mode 100644 public/tiny_mce/themes/default/images/paste.gif delete mode 100644 public/tiny_mce/themes/default/images/redo.gif delete mode 100644 public/tiny_mce/themes/default/images/right.gif delete mode 100644 public/tiny_mce/themes/default/images/spacer.gif delete mode 100644 public/tiny_mce/themes/default/images/strikethrough.gif delete mode 100644 public/tiny_mce/themes/default/images/underline.gif delete mode 100644 public/tiny_mce/themes/default/images/underline_ru.gif delete mode 100644 public/tiny_mce/themes/default/images/undo.gif delete mode 100644 public/tiny_mce/themes/default/images/unlink.gif delete mode 100644 public/tiny_mce/themes/default/link.htm delete mode 100644 public/tiny_mce/themes/simple/editor_content.css delete mode 100644 public/tiny_mce/themes/simple/editor_popup.css delete mode 100644 public/tiny_mce/themes/simple/editor_template.js delete mode 100644 public/tiny_mce/themes/simple/editor_template_src.js delete mode 100644 public/tiny_mce/themes/simple/editor_ui.css delete mode 100644 public/tiny_mce/themes/simple/images/bold.gif delete mode 100644 public/tiny_mce/themes/simple/images/bold_de_se.gif delete mode 100644 public/tiny_mce/themes/simple/images/bold_fr.gif delete mode 100644 public/tiny_mce/themes/simple/images/bold_ru.gif delete mode 100644 public/tiny_mce/themes/simple/images/bullist.gif delete mode 100644 public/tiny_mce/themes/simple/images/cleanup.gif delete mode 100644 public/tiny_mce/themes/simple/images/italic.gif delete mode 100644 public/tiny_mce/themes/simple/images/italic_de_se.gif delete mode 100644 public/tiny_mce/themes/simple/images/italic_ru.gif delete mode 100644 public/tiny_mce/themes/simple/images/numlist.gif delete mode 100644 public/tiny_mce/themes/simple/images/redo.gif delete mode 100644 public/tiny_mce/themes/simple/images/spacer.gif delete mode 100644 public/tiny_mce/themes/simple/images/strikethrough.gif delete mode 100644 public/tiny_mce/themes/simple/images/underline.gif delete mode 100644 public/tiny_mce/themes/simple/images/underline_ru.gif delete mode 100644 public/tiny_mce/themes/simple/images/undo.gif delete mode 100644 public/tiny_mce/tiny_mce.js delete mode 100644 public/tiny_mce/tiny_mce_gzip.php delete mode 100644 public/tiny_mce/tiny_mce_popup.js delete mode 100644 public/tiny_mce/tiny_mce_src.js delete mode 100755 script/about delete mode 100755 script/benchmarker delete mode 100755 script/breakpointer delete mode 100755 script/console delete mode 100755 script/console_sandbox.rb delete mode 100755 script/dbconsole delete mode 100755 script/destroy delete mode 100755 script/generate delete mode 100755 script/lighttpd delete mode 100755 script/local2gettext delete mode 100755 script/localize delete mode 100755 script/performance/benchmarker delete mode 100755 script/performance/profiler delete mode 100755 script/performance/request delete mode 100755 script/plugin delete mode 100755 script/process/inspector delete mode 100755 script/process/reaper delete mode 100755 script/process/spawner delete mode 100755 script/process/spinner delete mode 100755 script/profiler create mode 100755 script/rails delete mode 100755 script/rgettext.rb delete mode 100755 script/runner delete mode 100755 script/scgi_rails delete mode 100755 script/server delete mode 100644 test/fixtures/expressions.yml delete mode 100644 test/fixtures/filters.yml delete mode 100644 test/fixtures/users.yml create mode 100755 test/performance/browsing_test.rb mode change 100644 => 100755 test/test_helper.rb delete mode 100644 test/unit/expression_test.rb delete mode 100644 test/unit/filter_test.rb delete mode 100644 test/unit/user_test.rb mode change 100644 => 100755 vendor/ezcrypto-0.1.1/._README mode change 100644 => 100755 vendor/ezcrypto-0.1.1/._rakefile mode change 100644 => 100755 vendor/ezcrypto-0.1.1/MIT-LICENSE mode change 100644 => 100755 vendor/ezcrypto-0.1.1/README mode change 100644 => 100755 vendor/ezcrypto-0.1.1/lib/ezcrypto.rb mode change 100644 => 100755 vendor/ezcrypto-0.1.1/rakefile mode change 100644 => 100755 vendor/ezcrypto-0.1.1/test/ezcrypto_test.rb create mode 100755 vendor/plugins/.gitkeep mode change 100644 => 100755 vendor/plugins/auto_complete/README mode change 100644 => 100755 vendor/plugins/auto_complete/Rakefile mode change 100644 => 100755 vendor/plugins/auto_complete/init.rb mode change 100644 => 100755 vendor/plugins/auto_complete/lib/auto_complete.rb mode change 100644 => 100755 vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb mode change 100644 => 100755 vendor/plugins/auto_complete/test/auto_complete_test.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/CHANGELOG mode change 100644 => 100755 vendor/plugins/classic_pagination/README mode change 100644 => 100755 vendor/plugins/classic_pagination/Rakefile mode change 100644 => 100755 vendor/plugins/classic_pagination/init.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/install.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/lib/pagination.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/lib/pagination_helper.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/companies.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/company.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/developer.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/developers.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/project.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/projects.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/replies.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/reply.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/schema.sql mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/topic.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/fixtures/topics.yml mode change 100644 => 100755 vendor/plugins/classic_pagination/test/helper.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/pagination_helper_test.rb mode change 100644 => 100755 vendor/plugins/classic_pagination/test/pagination_test.rb delete mode 100644 vendor/plugins/will_paginate/.autotest delete mode 100644 vendor/plugins/will_paginate/.gitignore delete mode 100644 vendor/plugins/will_paginate/.manifest delete mode 100644 vendor/plugins/will_paginate/CHANGELOG.rdoc delete mode 100644 vendor/plugins/will_paginate/LICENSE delete mode 100644 vendor/plugins/will_paginate/README.rdoc delete mode 100644 vendor/plugins/will_paginate/Rakefile delete mode 100644 vendor/plugins/will_paginate/examples/apple-circle.gif delete mode 100644 vendor/plugins/will_paginate/examples/index.haml delete mode 100644 vendor/plugins/will_paginate/examples/index.html delete mode 100644 vendor/plugins/will_paginate/examples/pagination.css delete mode 100644 vendor/plugins/will_paginate/examples/pagination.sass delete mode 100644 vendor/plugins/will_paginate/init.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/array.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/collection.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/deprecation.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/active_record.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope_patch.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/active_resource.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/base.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/finders/data_mapper.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/version.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/view_helpers/action_view.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/view_helpers/base.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer.rb delete mode 100644 vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer_base.rb delete mode 100644 vendor/plugins/will_paginate/spec/collection_spec.rb delete mode 100755 vendor/plugins/will_paginate/spec/console delete mode 100644 vendor/plugins/will_paginate/spec/console_fixtures.rb delete mode 100644 vendor/plugins/will_paginate/spec/database.yml delete mode 100644 vendor/plugins/will_paginate/spec/finders/active_record_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/finders/active_resource_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/finders/activerecord_test_connector.rb delete mode 100644 vendor/plugins/will_paginate/spec/finders_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/admin.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/developer.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/developers_projects.yml delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/project.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/projects.yml delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/replies.yml delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/reply.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/schema.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/topic.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/topics.yml delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/user.rb delete mode 100644 vendor/plugins/will_paginate/spec/fixtures/users.yml delete mode 100644 vendor/plugins/will_paginate/spec/rcov.opts delete mode 100644 vendor/plugins/will_paginate/spec/spec.opts delete mode 100644 vendor/plugins/will_paginate/spec/spec_helper.rb delete mode 100644 vendor/plugins/will_paginate/spec/tasks.rake delete mode 100644 vendor/plugins/will_paginate/spec/view_helpers/action_view_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/view_helpers/base_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/view_helpers/link_renderer_base_spec.rb delete mode 100644 vendor/plugins/will_paginate/spec/view_helpers/view_example_group.rb delete mode 100644 vendor/plugins/will_paginate/will_paginate.gemspec diff --git a/.gitignore b/.gitignore index 510568f..d6ea040 100644 --- a/.gitignore +++ b/.gitignore @@ -4,5 +4,4 @@ config/database.yml config/site.rb tmp mail_temp -config/site.rb .svn diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..79766f5 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,5 @@ +* Luben Manolov +* Nick Penkov +* Eugene Korbut +* Emilio Blanco +* Wojciech Todryk diff --git a/CHANGELOG b/CHANGELOG deleted file mode 100644 index 18b4288..0000000 --- a/CHANGELOG +++ /dev/null @@ -1,718 +0,0 @@ -*0.14.2 (RC3)* (October 26th, 2005) - -* Constants set in the development/test/production environment file are set in Object - -* Scaffold generator pays attention to the controller name. #2562 [self@mattmower.com] - -* Include tasks from vendor/plugins/*/tasks in the Rakefile #2545 [Rick Olson] - - -*0.14.1 (RC2)* (October 19th, 2005) - -* Don't clean RAILS_ROOT on windows - -* Remove trailing '/' from RAILS_ROOT [Nicholas Seckar] - -* Upgraded to Active Record 1.12.1 and Action Pack 1.10.1 - - -*0.14.0 (RC1)* (October 16th, 2005) - -* Moved generator folder from RAILS_ROOT/generators to RAILS_ROOT/lib/generators [Tobias Luetke] - -* Fix rake dev and related commands [Nicholas Seckar] - -* The rails command tries to deduce your MySQL socket by running `mysql_config ---socket`. If it fails, default to /path/to/your/mysql.sock - -* Made the rails command use the application name for database names in the tailored database.yml file. Example: "rails ~/projects/blog" will use "blog_development" instead of "rails_development". [Florian Weber] - -* Added Rails framework freezing tasks: freeze_gems (freeze to current gems), freeze_edge (freeze to Rails SVN trunk), unfreeze_rails (float with newest gems on system) - -* Added update_javascripts task which will fetch all the latest js files from your current rails install. Use after updating rails. [Tobias Luetke] - -* Added cleaning of RAILS_ROOT to useless elements such as '../non-dot-dot/'. Provides cleaner backtraces and error messages. [Nicholas Seckar] - -* Made the instantiated/transactional fixtures settings be controlled through Rails::Initializer. Transactional and non-instantiated fixtures are default from now on. [Florian Weber] - -* Support using different database adapters for development and test with ActiveRecord::Base.schema_format = :ruby [Sam Stephenson] - -* Make webrick work with session(:off) - -* Add --version, -v option to the Rails command. Closes #1840. [stancell] - -* Update Prototype to V1.4.0_pre11, script.aculo.us to V1.5_rc3 [2504] and fix the rails generator to include the new .js files [Thomas Fuchs] - -* Make the generator skip a file if it already exists and is identical to the new file. - -* Add experimental plugin support #2335 - -* Made Rakefile aware of new .js files in script.aculo.us [Thomas Fuchs] - -* Make table_name and controller_name in generators honor AR::Base.pluralize_table_names. #1216 #2213 [kazuhiko@fdiary.net] - -* Clearly label functional and unit tests in rake stats output. #2297 [lasse.koskela@gmail.com] - -* Make the migration generator only check files ending in *.rb when calculating the next file name #2317 [Chad Fowler] - -* Added prevention of duplicate migrations from the generator #2240 [fbeausoleil@ftml.net] - -* Add db_schema_dump and db_schema_import rake tasks to work with the new ActiveRecord::SchemaDumper (for dumping a schema to and reading a schema from a ruby file). - -* Reformed all the config/environments/* files to conform to the new Rails::Configuration approach. Fully backwards compatible. - -* Added create_sessions_table, drop_sessions_table, and purge_sessions_table as rake tasks for databases that supports migrations (MySQL, PostgreSQL, SQLite) to get a table for use with CGI::Session::ActiveRecordStore - -* Added dump of schema version to the db_structure_dump task for databases that support migrations #1835 [Rick Olson] - -* Fixed script/profiler for Ruby 1.8.2 #1863 [Rick Olson] - -* Fixed clone_structure_to_test task for SQLite #1864 [jon@burningbush.us] - -* Added -m/--mime-types option to the WEBrick server, so you can specify a Apache-style mime.types file to load #2059 [ask@develooper.com] - -* Added -c/--svn option to the generator that'll add new files and remove destroyed files using svn add/revert/remove as appropriate #2064 [kevin.clark@gmail.com] - -* Added -c/--charset option to WEBrick server, so you can specify a default charset (which without changes is UTF-8) #2084 [wejn@box.cz] - -* Make the default stats task extendable by modifying the STATS_DIRECTORIES constant - -* Allow the selected environment to define RAILS_DEFAULT_LOGGER, and have Rails::Initializer use it if it exists. - -* Moved all the shared tasks from Rakefile into Rails, so that the Rakefile is empty and doesn't require updating. - -* Added Rails::Initializer and Rails::Configuration to abstract all of the common setup out of config/environment.rb (uses config/boot.rb to bootstrap the initializer and paths) - -* Fixed the scaffold generator to fail right away if the database isn't accessible instead of in mid-air #1169 [Chad Fowler] - -* Corrected project-local generator location in scripts.rb #2010 [Michael Schuerig] - -* Don't require the environment just to clear the logs #2093 [Scott Barron] - -* Make the default rakefile read *.rake files from config/tasks (for easy extension of the rakefile by e.g. generators) - -* Only load breakpoint in development mode and when BREAKPOINT_SERVER_PORT is defined. - -* Allow the --toggle-spin switch on process/reaper to be negated - -* Replace render_partial with render :partial in scaffold generator [Nicholas Seckar] - -* Added -w flag to ps in process/reaper #1934 [Scott Barron] - -* Allow ERb in the database.yml file (just like with fixtures), so you can pull out the database configuration in environment variables #1822 [Duane Johnson] - -* Added convenience controls for FCGI processes (especially when managed remotely): spinner, spawner, and reaper. They reside in script/process. More details can be had by calling them with -h/--help. - -* Added load_fixtures task to the Rakefile, which will load all the fixtures into the database for the current environment #1791 [Marcel Molina] - -* Added an empty robots.txt to public/, so that web servers asking for it won't trigger a dynamic call, like favicon.ico #1738 [michael@schubert] - -* Dropped the 'immediate close-down' of FCGI processes since it didn't work consistently and produced bad responses when it didn't. So now a TERM ensures exit after the next request (just as if the process is handling a request when it receives the signal). This means that you'll have to 'nudge' all FCGI processes with a request in order to ensure that they have all reloaded. This can be done by something like ./script/process/repear --nudge 'http://www.myapp.com' --instances 10, which will load the myapp site 10 times (and thus hit all of the 10 FCGI processes once, enough to shut down). - - -*0.13.1* (11 July, 2005) - -* Look for app-specific generators in RAILS_ROOT/generators rather than the clunky old RAILS_ROOT/script/generators. Nobody really uses this feature except for the unit tests, so it's a negligible-impact change. If you want to work with third-party generators, drop them in ~/.rails/generators or simply install gems. - -* Fixed that each request with the WEBrick adapter would open a new database connection #1685 [Sam Stephenson] - -* Added support for SQL Server in the database rake tasks #1652 [ken.barker@gmail.com] Note: osql and scptxfr may need to be installed on your development environment. This involves getting the .exes and a .rll (scptxfr) from a production SQL Server (not developer level SQL Server). Add their location to your Environment PATH and you are all set. - -* Added a VERSION parameter to the migrate task that allows you to do "rake migrate VERSION=34" to migrate to the 34th version traveling up or down depending on the current version - -* Extend Ruby version check to include RUBY_RELEASE_DATE >= '2005-12-25', the final Ruby 1.8.2 release #1674 [court3nay@gmail.com] - -* Improved documentation for environment config files #1625 [court3nay@gmail.com] - - -*0.13.0* (6 July, 2005) - -* Changed the default logging level in config/environment.rb to INFO for production (so SQL statements won't be logged) - -* Added migration generator: ./script/generate migration add_system_settings - -* Added "migrate" as rake task to execute all the pending migrations from db/migrate - -* Fixed that model generator would make fixtures plural, even if ActiveRecord::Base.pluralize_table_names was false #1185 [Marcel Molina] - -* Added a DOCTYPE of HTML transitional to the HTML files generated by Rails #1124 [Michael Koziarski] - -* SIGTERM also gracefully exits dispatch.fcgi. Ignore SIGUSR1 on Windows. - -* Add the option to manually manage garbage collection in the FastCGI dispatcher. Set the number of requests between GC runs in your public/dispatch.fcgi [skaes@web.de] - -* Allow dynamic application reloading for dispatch.fcgi processes by sending a SIGHUP. If the process is currently handling a request, the request will be allowed to complete first. This allows production fcgi's to be reloaded without having to restart them. - -* RailsFCGIHandler (dispatch.fcgi) no longer tries to explicitly flush $stdout (CgiProcess#out always calls flush) - -* Fixed rakefile actions against PostgreSQL when the password is all numeric #1462 [michael@schubert.cx] - -* ActionMailer::Base subclasses are reloaded with the other rails components #1262 - -* Made the WEBrick adapter not use a mutex around action performance if ActionController::Base.allow_concurrency is true (default is false) - -* Fixed that mailer generator generated fixtures/plural while units expected fixtures/singular #1457 [Scott Barron] - -* Added a 'whiny nil' that's aim to ensure that when users pass nil to methods where that isn't appropriate, instead of NoMethodError? and the name of some method used by the framework users will see a message explaining what type of object was expected. Only active in test and development environments by default #1209 [Michael Koziarski] - -* Fixed the test_helper.rb to be safe for requiring controllers from multiple spots, like app/controllers/article_controller.rb and app/controllers/admin/article_controller.rb, without reloading the environment twice #1390 [Nicholas Seckar] - -* Fixed Webrick to escape + characters in URL's the same way that lighttpd and apache do #1397 [Nicholas Seckar] - -* Added -e/--environment option to script/runner #1408 [fbeausoleil@ftml.net] - -* Modernize the scaffold generator to use the simplified render and test methods and to change style from @params["id"] to params[:id]. #1367 - -* Added graceful exit from pressing CTRL-C during the run of the rails command #1150 [Caleb Tennis] - -* Allow graceful exits for dispatch.fcgi processes by sending a SIGUSR1. If the process is currently handling a request, the request will be allowed to complete and then will terminate itself. If a request is not being handled, the process is terminated immediately (via #exit). This basically works like restart graceful on Apache. [Jamis Buck] - -* Made dispatch.fcgi more robust by catching fluke errors and retrying unless its a permanent condition. [Jamis Buck] - -* Added console --profile for profiling an IRB session #1154 [Jeremy Kemper] - -* Changed console_sandbox into console --sandbox #1154 [Jeremy Kemper] - - -*0.12.1* (20th April, 2005) - -* Upgraded to Active Record 1.10.1, Action Pack 1.8.1, Action Mailer 0.9.1, Action Web Service 0.7.1 - - -*0.12.0* (19th April, 2005) - -* Fixed that purge_test_database would use database settings from the development environment when recreating the test database #1122 [rails@cogentdude.com] - -* Added script/benchmarker to easily benchmark one or more statement a number of times from within the environment. Examples: - - # runs the one statement 10 times - script/benchmarker 10 'Person.expensive_method(10)' - - # pits the two statements against each other with 50 runs each - script/benchmarker 50 'Person.expensive_method(10)' 'Person.cheap_method(10)' - -* Added script/profiler to easily profile a single statement from within the environment. Examples: - - script/profiler 'Person.expensive_method(10)' - script/profiler 'Person.expensive_method(10)' 10 # runs the statement 10 times - -* Added Rake target clear_logs that'll truncate all the *.log files in log/ to zero #1079 [Lucas Carlson] - -* Added lazy typing for generate, such that ./script/generate cn == ./script/generate controller and the likes #1051 [k@v2studio.com] - -* Fixed that ownership is brought over in pg_dump during tests for PostgreSQL #1060 [pburleson@gmail.com] - -* Upgraded to Active Record 1.10.0, Action Pack 1.8.0, Action Mailer 0.9.0, Action Web Service 0.7.0, Active Support 1.0.4 - - -*0.11.1* (27th March, 2005) - -* Fixed the dispatch.fcgi use of a logger - -* Upgraded to Active Record 1.9.1, Action Pack 1.7.0, Action Mailer 0.8.1, Action Web Service 0.6.2, Active Support 1.0.3 - - -*0.11.0* (22th March, 2005) - -* Removed SCRIPT_NAME from the WEBrick environment to prevent conflicts with PATH_INFO #896 [Nicholas Seckar] - -* Removed ?$1 from the dispatch.f/cgi redirect line to get rid of 'complete/path/from/request.html' => nil being in the @params now that the ENV["REQUEST_URI"] is used to determine the path #895 [dblack/Nicholas Seckar] - -* Added additional error handling to the FastCGI dispatcher to catch even errors taking down the entire process - -* Improved the generated scaffold code a lot to take advantage of recent Rails developments #882 [Tobias Luetke] - -* Combined the script/environment.rb used for gems and regular files version. If vendor/rails/* has all the frameworks, then files version is used, otherwise gems #878 [Nicholas Seckar] - -* Changed .htaccess to allow dispatch.* to be called from a sub-directory as part of the push with Action Pack to make Rails work on non-vhost setups #826 [Nicholas Seckar/Tobias Luetke] - -* Added script/runner which can be used to run code inside the environment by eval'ing the first parameter. Examples: - - ./script/runner 'ReminderService.deliver' - ./script/runner 'Mailer.receive(STDIN.read)' - - This makes it easier to do CRON and postfix scripts without actually making a script just to trigger 1 line of code. - -* Fixed webrick_server cookie handling to allow multiple cookes to be set at once #800, #813 [dave@cherryville.org] - -* Fixed the Rakefile's interaction with postgresql to: - - 1. Use PGPASSWORD and PGHOST in the environment to fix prompting for - passwords when connecting to a remote db and local socket connections. - 2. Add a '-x' flag to pg_dump which stops it dumping privileges #807 [rasputnik] - 3. Quote the user name and use template0 when dumping so the functions doesn't get dumped too #855 [pburleson] - 4. Use the port if available #875 [madrobby] - -* Upgraded to Active Record 1.9.0, Action Pack 1.6.0, Action Mailer 0.8.0, Action Web Service 0.6.1, Active Support 1.0.2 - - -*0.10.1* (7th March, 2005) - -* Fixed rake stats to ignore editor backup files like model.rb~ #791 [skanthak] - -* Added exception shallowing if the DRb server can't be started (not worth making a fuss about to distract new users) #779 [Tobias Luetke] - -* Added an empty favicon.ico file to the public directory of new applications (so the logs are not spammed by its absence) - -* Fixed that scaffold generator new template should use local variable instead of instance variable #778 [Dan Peterson] - -* Allow unit tests to run on a remote server for PostgreSQL #781 [adamm@galacticasoftware.com] - -* Added web_service generator (run ./script/generate web_service for help) #776 [Leon Bredt] - -* Added app/apis and components to code statistics report #729 [Scott Barron] - -* Fixed WEBrick server to use ABSOLUTE_RAILS_ROOT instead of working_directory #687 [Nicholas Seckar] - -* Fixed rails_generator to be usable without RubyGems #686 [Cristi BALAN] - -* Fixed -h/--help for generate and destroy generators #331 - -* Added begin/rescue around the FCGI dispatcher so no uncaught exceptions can bubble up to kill the process (logs to log/fastcgi.crash.log) - -* Fixed that association#count would produce invalid sql when called sequentialy #659 [kanis@comcard.de] - -* Fixed test/mocks/testing to the correct test/mocks/test #740 - -* Added early failure if the Ruby version isn't 1.8.2 or above #735 - -* Removed the obsolete -i/--index option from the WEBrick servlet #743 - -* Upgraded to Active Record 1.8.0, Action Pack 1.5.1, Action Mailer 0.7.1, Action Web Service 0.6.0, Active Support 1.0.1 - - -*0.10.0* (24th February, 2005) - -* Changed default IP binding for WEBrick from 127.0.0.1 to 0.0.0.0 so that the server is accessible both locally and remotely #696 [Marcel] - -* Fixed that script/server -d was broken so daemon mode couldn't be used #687 [Nicholas Seckar] - -* Upgraded to breakpoint 92 which fixes: - - * overload IRB.parse_opts(), fixes #443 - => breakpoints in tests work even when running them via rake - * untaint handlers, might fix an issue discussed on the Rails ML - * added verbose mode to breakpoint_client - * less noise caused by breakpoint_client by default - * ignored TerminateLineInput exception in signal handler - => quiet exit on Ctrl-C - -* Added support for independent components residing in /components. Example: - - Controller: components/list/items_controller.rb - (holds a List::ItemsController class with uses_component_template_root called) - - Model : components/list/item.rb - (namespace is still shared, so an Item model in app/models will take precedence) - - Views : components/list/items/show.rhtml - - -* Added --sandbox option to script/console that'll roll back all changes made to the database when you quit #672 [Jeremy Kemper] - -* Added 'recent' as a rake target that'll run tests for files that changed in the last 10 minutes #612 [Jeremy Kemper] - -* Changed script/console to default to development environment and drop --no-inspect #650 [Jeremy Kemper] - -* Added that the 'fixture :posts' syntax can be used for has_and_belongs_to_many fixtures where a model doesn't exist #572 [Jeremy Kemper] - -* Added that running test_units and test_functional now performs the clone_structure_to_test as well #566 [rasputnik] - -* Added new generator framework that informs about its doings on generation and enables updating and destruction of generated artifacts. See the new script/destroy and script/update for more details #487 [Jeremy Kemper] - -* Added Action Web Service as a new add-on framework for Action Pack [Leon Bredt] - -* Added Active Support as an independent utility and standard library extension bundle - -* Upgraded to Active Record 1.7.0, Action Pack 1.5.0, Action Mailer 0.7.0 - - -*0.9.5* (January 25th, 2005) - -* Fixed dependency reloading by switching to a remove_const approach where all Active Records, Active Record Observers, and Action Controllers are reloading by undefining their classes. This enables you to remove methods in all three types and see the change reflected immediately and it fixes #539. This also means that only those three types of classes will benefit from the const_missing and reloading approach. If you want other classes (like some in lib/) to reload, you must use require_dependency to do it. - -* Added Florian Gross' latest version of Breakpointer and friends that fixes a variaty of bugs #441 [Florian Gross] - -* Fixed skeleton Rakefile to work with sqlite3 out of the box #521 [rasputnik] - -* Fixed that script/breakpointer didn't get the Ruby path rewritten as the other scripts #523 [brandt@kurowski.net] - -* Fixed handling of syntax errors in models that had already been succesfully required once in the current interpreter - -* Fixed that models that weren't referenced in associations weren't being reloaded in the development mode by reinstating the reload - -* Fixed that generate scaffold would produce bad functional tests - -* Fixed that FCGI can also display SyntaxErrors - -* Upgraded to Active Record 1.6.0, Action Pack 1.4.0 - - -*0.9.4.1* (January 18th, 2005) - -* Added 5-second timeout to WordNet alternatives on creating reserved-word models #501 [Marcel Molina] - -* Fixed binding of caller #496 [Alexey] - -* Upgraded to Active Record 1.5.1, Action Pack 1.3.1, Action Mailer 0.6.1 - - -*0.9.4* (January 17th, 2005) - -* Added that ApplicationController will catch a ControllerNotFound exception if someone attempts to access a url pointing to an unexisting controller [Tobias Luetke] - -* Flipped code-to-test ratio around to be more readable #468 [Scott Baron] - -* Fixed log file permissions to be 666 instead of 777 (so they're not executable) #471 [Lucas Carlson] - -* Fixed that auto reloading would some times not work or would reload the models twice #475 [Tobias Luetke] - -* Added rewrite rules to deal with caching to public/.htaccess - -* Added the option to specify a controller name to "generate scaffold" and made the default controller name the plural form of the model. - -* Added that rake clone_structure_to_test, db_structure_dump, and purge_test_database tasks now pick up the source database to use from - RAILS_ENV instead of just forcing development #424 [Tobias Luetke] - -* Fixed script/console to work with Windows (that requires the use of irb.bat) #418 [octopod] - -* Fixed WEBrick servlet slowdown over time by restricting the load path reloading to mod_ruby - -* Removed Fancy Indexing as a default option on the WEBrick servlet as it made it harder to use various caching schemes - -* Upgraded to Active Record 1.5, Action Pack 1.3, Action Mailer 0.6 - - -*0.9.3* (January 4th, 2005) - -* Added support for SQLite in the auto-dumping/importing of schemas for development -> test #416 - -* Added automated rewriting of the shebang lines on installs through the gem rails command #379 [Manfred Stienstra] - -* Added ActionMailer::Base.deliver_method = :test to the test environment so that mail objects are available in ActionMailer::Base.deliveries - for functional testing. - -* Added protection for creating a model through the generators with a name of an existing class, like Thread or Date. - It'll even offer you a synonym using wordnet.princeton.edu as a look-up. No, I'm not kidding :) [Florian Gross] - -* Fixed dependency management to happen in a unified fashion for Active Record and Action Pack using the new Dependencies module. This means that - the environment options needs to change from: - - Before in development.rb: - ActionController::Base.reload_dependencies = true   - ActiveRecord::Base.reload_associations     = true - - Now in development.rb: - Dependencies.mechanism = :load - - Before in production.rb and test.rb: - ActionController::Base.reload_dependencies = false - ActiveRecord::Base.reload_associations     = false - - Now in production.rb and test.rb: - Dependencies.mechanism = :require - -* Fixed problems with dependency caching and controller hierarchies on Ruby 1.8.2 in development mode #351 - -* Fixed that generated action_mailers doesnt need to require the action_mailer since thats already done in the environment #382 [Lucas Carlson] - -* Upgraded to Action Pack 1.2.0 and Active Record 1.4.0 - - -*0.9.2* - -* Fixed CTRL-C exists from the Breakpointer to be a clean affair without error dumping [Kent Sibilev] - -* Fixed "rake stats" to work with sub-directories in models and controllers and to report the code to test ration [Scott Baron] - -* Added that Active Record associations are now reloaded instead of cleared to work with the new const_missing hook in Active Record. - -* Added graceful handling of an inaccessible log file by redirecting output to STDERR with a warning #330 [rainmkr] - -* Added support for a -h/--help parameter in the generator #331 [Ulysses] - -* Fixed that File.expand_path in config/environment.rb would fail when dealing with symlinked public directories [mjobin] - -* Upgraded to Action Pack 1.1.0 and Active Record 1.3.0 - - -*0.9.1* - -* Upgraded to Action Pack 1.0.1 for important bug fix - -* Updated gem dependencies - - -*0.9.0* - -* Renamed public/dispatch.servlet to script/server -- it wasn't really dispatching anyway as its delegating calls to public/dispatch.rb - -* Renamed AbstractApplicationController and abstract_application.rb to ApplicationController and application.rb, so that it will be possible - for the framework to automatically pick up on app/views/layouts/application.rhtml and app/helpers/application.rb - -* Added script/console that makes it even easier to start an IRB session for interacting with the domain model. Run with no-args to - see help. - -* Added breakpoint support through the script/breakpointer client. This means that you can break out of execution at any point in - the code, investigate and change the model, AND then resume execution! Example: - - class WeblogController < ActionController::Base - def index - @posts = Post.find_all - breakpoint "Breaking out from the list" - end - end - - So the controller will accept the action, run the first line, then present you with a IRB prompt in the breakpointer window. - Here you can do things like: - - Executing breakpoint "Breaking out from the list" at .../webrick_server.rb:16 in 'breakpoint' - - >> @posts.inspect - => "[#nil, \"body\"=>nil, \"id\"=>\"1\"}>, - #\"Rails you know!\", \"body\"=>\"Only ten..\", \"id\"=>\"2\"}>]" - >> @posts.first.title = "hello from a breakpoint" - => "hello from a breakpoint" - - ...and even better is that you can examine how your runtime objects actually work: - - >> f = @posts.first - => #nil, "body"=>nil, "id"=>"1"}> - >> f. - Display all 152 possibilities? (y or n) - - Finally, when you're ready to resume execution, you press CTRL-D - -* Changed environments to be configurable through an environment variable. By default, the environment is "development", but you - can change that and set your own by configuring the Apache vhost with a string like (mod_env must be available on the server): - - SetEnv RAILS_ENV production - - ...if you're using WEBrick, you can pick the environment to use with the command-line parameters -e/--environment, like this: - - ruby public/dispatcher.servlet -e production - -* Added a new default environment called "development", which leaves the production environment to be tuned exclusively for that. - -* Added a start_server in the root of the Rails application to make it even easier to get started - -* Fixed public/.htaccess to use RewriteBase and share the same rewrite rules for all the dispatch methods - -* Fixed webrick_server to handle requests in a serialized manner (the Rails reloading infrastructure is not thread-safe) - -* Added support for controllers in directories. So you can have: - - app/controllers/account_controller.rb # URL: /account/ - app/controllers/admin/account_controller.rb # URL: /admin/account/ - - NOTE: You need to update your public/.htaccess with the new rules to pick it up - -* Added reloading for associations and dependencies under cached environments like FastCGI and mod_ruby. This makes it possible to use - those environments for development. This is turned on by default, but can be turned off with - ActiveRecord::Base.reload_associations = false and ActionController::Base.reload_dependencies = false in production environments. - -* Added support for sub-directories in app/models. So now you can have something like Basecamp with: - - app/models/accounting - app/models/project - app/models/participants - app/models/settings - - It's poor man's namespacing, but only for file-system organization. You still require files just like before. - Nothing changes inside the files themselves. - - -* Fixed a few references in the tests generated by new_mailer [Jeremy Kemper] - -* Added support for mocks in testing with test/mocks - -* Cleaned up the environments a bit and added global constant RAILS_ROOT - - -*0.8.5* (9) - -* Made dev-util available to all tests, so you can insert breakpoints in any test case to get an IRB prompt at that point [Jeremy Kemper]: - - def test_complex_stuff - @david.projects << @new_project - breakpoint "Let's have a closer look at @david" - end - - You need to install dev-utils yourself for this to work ("gem install dev-util"). - -* Added shared generator behavior so future upgrades should be possible without manually copying over files [Jeremy Kemper] - -* Added the new helper style to both controller and helper templates [Jeremy Kemper] - -* Added new_crud generator for creating a model and controller at the same time with explicit scaffolding [Jeremy Kemper] - -* Added configuration of Test::Unit::TestCase.fixture_path to test_helper to concide with the new AR fixtures style - -* Fixed that new_model was generating singular table/fixture names - -* Upgraded to Action Mailer 0.4.0 - -* Upgraded to Action Pack 0.9.5 - -* Upgraded to Active Record 1.1.0 - - -*0.8.0 (15)* - -* Removed custom_table_name option for new_model now that the Inflector is as powerful as it is - -* Changed the default rake action to just do testing and separate API generation and coding statistics into a "doc" task. - -* Fixed WEBrick dispatcher to handle missing slashes in the URLs gracefully [alexey] - -* Added user option for all postgresql tool calls in the rakefile [elvstone] - -* Fixed problem with running "ruby public/dispatch.servlet" instead of "cd public; ruby dispatch.servlet" [alexey] - -* Fixed WEBrick server so that it no longer hardcodes the ruby interpreter used to "ruby" but will get the one used based - on the Ruby runtime configuration. [Marcel Molina Jr.] - -* Fixed Dispatcher so it'll route requests to magic_beans to MagicBeansController/magic_beans_controller.rb [Caio Chassot] - -* "new_controller MagicBeans" and "new_model SubscriptionPayments" will now both behave properly as they use the new Inflector. - -* Fixed problem with MySQL foreign key constraint checks in Rake :clone_production_structure_to_test target [Andreas Schwarz] - -* Changed WEBrick server to by default be auto-reloading, which is slower but makes source changes instant. - Class compilation cache can be turned on with "-c" or "--cache-classes". - -* Added "-b/--binding" option to WEBrick dispatcher to bind the server to a specific IP address (default: 127.0.0.1) [Kevin Temp] - -* dispatch.fcgi now DOESN'T set FCGI_PURE_RUBY as it was slowing things down for now reason [Andreas Schwarz] - -* Added new_mailer generator to work with Action Mailer - -* Included new framework: Action Mailer 0.3 - -* Upgraded to Action Pack 0.9.0 - -* Upgraded to Active Record 1.0.0 - - -*0.7.0* - -* Added an optional second argument to the new_model script that allows the programmer to specify the table name, - which will used to generate a custom table_name method in the model and will also be used in the creation of fixtures. - [Kevin Radloff] - -* script/new_model now turns AccountHolder into account_holder instead of accountholder [Kevin Radloff] - -* Fixed the faulty handleing of static files with WEBrick [Andreas Schwarz] - -* Unified function_test_helper and unit_test_helper into test_helper - -* Fixed bug with the automated production => test database dropping on PostgreSQL [dhawkins] - -* create_fixtures in both the functional and unit test helper now turns off the log during fixture generation - and can generate more than one fixture at a time. Which makes it possible for assignments like: - - @people, @projects, @project_access, @companies, @accounts = - create_fixtures "people", "projects", "project_access", "companies", "accounts" - -* Upgraded to Action Pack 0.8.5 (locally-scoped variables, partials, advanced send_file) - -* Upgraded to Active Record 0.9.5 (better table_name guessing, cloning, find_all_in_collection) - - -*0.6.5* - -* No longer specifies a template for rdoc, so it'll use whatever is default (you can change it in the rakefile) - -* The new_model generator will now use the same rules for plural wordings as Active Record - (so Category will give categories, not categorys) [Kevin Radloff] - -* dispatch.fcgi now sets FCGI_PURE_RUBY to true to ensure that it's the Ruby version that's loaded [danp] - -* Made the GEM work with Windows - -* Fixed bug where mod_ruby would "forget" the load paths added when switching between controllers - -* PostgreSQL are now supported for the automated production => test database dropping [Kevin Radloff] - -* Errors thrown by the dispatcher are now properly handled in FCGI. - -* Upgraded to Action Pack 0.8.0 (lots and lots and lots of fixes) - -* Upgraded to Active Record 0.9.4 (a bunch of fixes) - - -*0.6.0* - -* Added AbstractionApplicationController as a superclass for all controllers generated. This class can be used - to carry filters and methods that are to be shared by all. It has an accompanying ApplicationHelper that all - controllers will also automatically have available. - -* Added environments that can be included from any script to get the full Active Record and Action Controller - context running. This can be used by maintenance scripts or to interact with the model through IRB. Example: - - require 'config/environments/production' - - for account in Account.find_all - account.recalculate_interests - end - - A short migration script for an account model that had it's interest calculation strategy changed. - -* Accessing the index of a controller with "/weblog" will now redirect to "/weblog/" (only on Apache, not WEBrick) - -* Simplified the default Apache config so even remote requests are served off CGI as a default. - You'll now have to do something specific to activate mod_ruby and FCGI (like using the force urls). - This should make it easier for new comers that start on an external server. - -* Added more of the necessary Apache options to .htaccess to make it easier to setup - -* Upgraded to Action Pack 0.7.9 (lots of fixes) - -* Upgraded to Active Record 0.9.3 (lots of fixes) - - -*0.5.7* - -* Fixed bug in the WEBrick dispatcher that prevented it from getting parameters from the URL - (through GET requests or otherwise) - -* Added lib in root as a place to store app specific libraries - -* Added lib and vendor to load_path, so anything store within can be loaded directly. - Hence lib/redcloth.rb can be loaded with require "redcloth" - -* Upgraded to Action Pack 0.7.8 (lots of fixes) - -* Upgraded to Active Record 0.9.2 (minor upgrade) - - -*0.5.6* - -* Upgraded to Action Pack 0.7.7 (multipart form fix) - -* Updated the generated template stubs to valid XHTML files - -* Ensure that controllers generated are capitalized, so "new_controller TodoLists" - gives the same as "new_controller Todolists" and "new_controller todolists". - - -*0.5.5* - -* Works on Windows out of the box! (Dropped symlinks) - -* Added webrick dispatcher: Try "ruby public/dispatch.servlet --help" [Florian Gross] - -* Report errors about initialization to browser (instead of attempting to use uninitialized logger) - -* Upgraded to Action Pack 0.7.6 - -* Upgraded to Active Record 0.9.1 - -* Added distinct 500.html instead of reusing 404.html - -* Added MIT license - - -*0.5.0* - -* First public release diff --git a/Gemfile b/Gemfile new file mode 100755 index 0000000..d910b4b --- /dev/null +++ b/Gemfile @@ -0,0 +1,36 @@ +source 'http://rubygems.org' + +gem 'rails', '3.0.7' + +# Bundle edge Rails instead: +# gem 'rails', :git => 'git://github.com/rails/rails.git' + +gem 'sqlite3-ruby',:require => 'sqlite3' +gem 'arel' +gem 'mysql2' +gem 'will_paginate' +gem 'web-app-theme' +gem 'tmail' + +# Use unicorn as the web server +# gem 'unicorn' + +# Deploy with Capistrano +# gem 'capistrano' + +# To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+) +# gem 'ruby-debug' +# gem 'ruby-debug19', :require => 'ruby-debug' + +# Bundle the extra gems: +# gem 'bj' +# gem 'nokogiri' +# gem 'sqlite3-ruby', :require => 'sqlite3' +# gem 'aws-s3', :require => 'aws/s3' + +# Bundle gems for the local environment. Make sure to +# put test-only gems in this group so their generators +# and rake tasks are available in development mode: +# group :development, :test do +# gem 'webrat' +# end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100755 index 0000000..eb08281 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,81 @@ +GEM + remote: http://rubygems.org/ + specs: + actionmailer (3.0.7) + actionpack (= 3.0.7) + mail (~> 2.2.15) + actionpack (3.0.7) + activemodel (= 3.0.7) + activesupport (= 3.0.7) + builder (~> 2.1.2) + erubis (>= 2.6.6) + i18n (~> 0.5.0) + rack (~> 1.2.1) + rack-mount (>= 0.6.14) + rack-test (~> 0.5.7) + tzinfo (~> 0.3.23) + activemodel (3.0.7) + activesupport (= 3.0.7) + builder (~> 2.1.2) + i18n (~> 0.5.0) + activerecord (3.0.7) + activemodel (= 3.0.7) + activesupport (= 3.0.7) + arel (~> 2.0.2) + tzinfo (~> 0.3.23) + activeresource (3.0.7) + activemodel (= 3.0.7) + activesupport (= 3.0.7) + activesupport (3.0.7) + arel (2.0.4) + builder (2.1.2) + erubis (2.7.0) + i18n (0.5.0) + mail (2.2.18) + activesupport (>= 2.3.6) + i18n (>= 0.4.0) + mime-types (>= 1.16) + treetop (>= 1.4.8) + mime-types (1.16) + mysql2 (0.2.7) + polyglot (0.3.1) + rack (1.2.2) + rack-mount (0.7.3) + rack-test (0.5.7) + rack (>= 1.0) + rails (3.0.7) + actionmailer (= 3.0.7) + actionpack (= 3.0.7) + activerecord (= 3.0.7) + activeresource (= 3.0.7) + activesupport (= 3.0.7) + bundler (~> 1.0) + railties (= 3.0.7) + railties (3.0.7) + actionpack (= 3.0.7) + activesupport (= 3.0.7) + rake (>= 0.8.7) + thor (~> 0.14.4) + rake (0.8.7) + sqlite3 (1.3.3) + sqlite3-ruby (1.3.3) + sqlite3 (>= 1.3.3) + thor (0.14.6) + tmail (1.2.7.1) + treetop (1.4.9) + polyglot (>= 0.3.1) + tzinfo (0.3.24) + web-app-theme (0.6.3) + will_paginate (2.3.15) + +PLATFORMS + ruby + +DEPENDENCIES + arel + mysql2 + rails (= 3.0.7) + sqlite3-ruby + tmail + web-app-theme + will_paginate diff --git a/MIT-LICENSE b/MIT-LICENSE deleted file mode 100644 index 67625d0..0000000 --- a/MIT-LICENSE +++ /dev/null @@ -1,23 +0,0 @@ -Copyright (c) 2005, 2006 VibrantPlanet Ltd. -Copyright (c) 2005, 2006 Luben Manolov -Copyright (c) 2005, 2006 Nick Penkov - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - diff --git a/README b/README deleted file mode 100644 index c41a035..0000000 --- a/README +++ /dev/null @@ -1,34 +0,0 @@ - -Installation Guide -Requirements - - * Ruby 1.8.7 - * Rails 2.3.2 - -Installation - - 1. Checkout the source code - 2. If you need to override some of the default constants used in the application take a look at config/default_site.rb. Then create config/site.rb that contains only the keys which you want to override. Example content of config/site.rb is: - - module CDF - - LOCALCONFIG = { - :imap_server => 'your.imap.server' - } - end - - 3. Configure SMTP settings - # initializers/smtp_settings.rb - ActionMailer::Base.smtp_settings = { - :address => "mail.example.com.py", - :port => 26, - :authentication => :plain, - :enable_starttls_auto => true, - :user_name => "emilio@example.com.py", - :password => "yourpass" - } - - 4. Prepare config/database.yml file (see config/database.yml.example) - 5. Migrate database (rake db:migrate) - - 6. Use it diff --git a/README.markdown b/README.markdown new file mode 100755 index 0000000..887f305 --- /dev/null +++ b/README.markdown @@ -0,0 +1,40 @@ +## Introduction +_Mailr_ is a IMAP mail client based on _Ruby on Rails_ platform. + +## Installation guide + +**NOTE** All path and filenames are based on _Rails.root_ directory. + +### Requirements +In _Rails 3_ all dependencies should be defined in file _.Gemfile_. All needed gems can be installed using bundler. + +### Installation procedure +1. Checkout the source code. + +2. If you need to override some of the default constants used in the application take a look at config/default_site.rb. Then create config/site.rb that contains only the keys which you want to override. Example content of config/site.rb is: + + module CDF + + LOCALCONFIG = { + :imap_server => 'your.imap.server' + } + end + +3. Configure SMTP settings + # initializers/smtp_settings.rb + ActionMailer::Base.smtp_settings = { + :address => "mail.example.com.py", + :port => 26, + :authentication => :plain, + :enable_starttls_auto => true, + :user_name => "emilio@example.com.py", + :password => "yourpass" + } + +4. Prepare config/database.yml file (see config/database.yml.example). + Check if proper gems (sqlite3/mysql/postgresql) are defined in _Gemfile_ and installed. + +5. Migrate database (rake db:migrate) + +6. Use it. + diff --git a/Rakefile b/Rakefile old mode 100644 new mode 100755 index cffd19f..f7fac98 --- a/Rakefile +++ b/Rakefile @@ -1,10 +1,7 @@ # Add your own tasks in files placed in lib/tasks ending in .rake, -# for example lib/tasks/switchtower.rake, and they will automatically be available to Rake. - -require(File.join(File.dirname(__FILE__), 'config', 'boot')) +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. +require File.expand_path('../config/application', __FILE__) require 'rake' -require 'rake/testtask' -require 'rake/rdoctask' -require 'tasks/rails' \ No newline at end of file +Rails3::Application.load_tasks diff --git a/UNLICENSE b/UNLICENSE new file mode 100644 index 0000000..68a49da --- /dev/null +++ b/UNLICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb old mode 100644 new mode 100755 index 9e0a25b..7882e6f --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,34 +1,43 @@ # The filters added to this controller will be run for all controllers in the application. # Likewise will all the methods added be available for all controllers. class ApplicationController < ActionController::Base + + protect_from_forgery + before_filter :user_login_filter before_filter :add_scripts #before_filter :localize - - filter_parameter_logging :password + + #filter_parameter_logging :password #upgrade to Rails3 + protected def secure_user?() true end def secure_cust?() false end def additional_scripts() "" end def onload_function() "" end - + private def add_scripts @additional_scripts = additional_scripts() @onload_function = onload_function() end - + def user_login_filter if (secure_user? or secure_cust? )and logged_user.nil? - session["return_to"] = request.request_uri + + #upgrade Rails 3 + #session["return_to"] = request.request_uri + logger.debug "*** return_to => #{request.fullpath}" + session["return_to"] = request.fullpath + redirect_to :controller=>"/login", :action => "index" return false end end - - alias login_required user_login_filter - + + alias login_required user_login_filter + def logged_user # returns customer id session['user'] end @@ -36,7 +45,7 @@ class ApplicationController < ActionController::Base def logged_customer session['user'] end - + def localize # We will use instance vars for the locale so we can make use of them in # the templates. @@ -65,7 +74,7 @@ class ApplicationController < ActionController::Base end public - + def include_tinymce(mode="textareas",elements="") tinymce='' tinymce << ' @@ -76,11 +85,11 @@ class ApplicationController < ActionController::Base tinymce << mode << '",' if mode == "exact" tinymce << 'elements : "' << elements << '", - ' + ' end tinymce << ' theme : "advanced", - cleanup : true, + cleanup : true, width: "100%", remove_linebreaks : false, entity_encoding : "named", @@ -142,25 +151,25 @@ class ApplicationController < ActionController::Base ' tinymce end - + helper_method :include_tinymce def include_simple_tinymce(mode="textareas",elements="") tinymce = '' tinymce << ' - ' tinymce end @@ -168,7 +177,7 @@ class ApplicationController < ActionController::Base def _(text) t text end - + helper_method :include_simple_tinymce, :_ diff --git a/app/controllers/contact_groups_controller.rb b/app/controllers/contact_groups_controller.rb old mode 100644 new mode 100755 diff --git a/app/controllers/contacts_controller.rb b/app/controllers/contacts_controller.rb old mode 100644 new mode 100755 diff --git a/app/controllers/folders_controller.rb b/app/controllers/folders_controller.rb old mode 100644 new mode 100755 diff --git a/app/controllers/login_controller.rb b/app/controllers/login_controller.rb old mode 100644 new mode 100755 index 979f056..462a634 --- a/app/controllers/login_controller.rb +++ b/app/controllers/login_controller.rb @@ -1,14 +1,16 @@ require 'ezcrypto' +require 'imapmailbox' + class LoginController < ApplicationController - + def index if not(logged_user.nil?) - redirect_to :controller =>"webmail", :action=>"index" + redirect_to :controller =>"webmail", :action=>"index" else @login_user = Customer.new - end + end end - + def authenticate if user = auth(params['login_user']["email"], params['login_user']["password"]) session["user"] = user.id @@ -17,26 +19,27 @@ class LoginController < ApplicationController else # dont use crypt session["wmp"] = params['login_user']["password"] - end + end if session["return_to"] redirect_to(session["return_to"]) session["return_to"] = nil else - redirect_to :action=>"index" + redirect_to :action=>"index" end else + logger.debug "*** Not logged" @login_user = Customer.new flash["error"] = t :wrong_email_or_password - redirect_to :action => "index" + redirect_to :action => "index" end end - + def logout reset_session flash["status"] = t(:user_logged_out) - redirect_to :action => "index" + redirect_to :action => "index" end - + protected def need_subdomain?() true end @@ -45,12 +48,15 @@ class LoginController < ApplicationController private def auth(email, password) - mailbox = IMAPMailbox.new + mailbox = IMAPMailbox.new(Rails.logger) + logger.info "*** mailbox #{mailbox.inspect}" begin - mailbox.connect(email, password) - rescue - return nil + mailbox.connect(email, password) + rescue Exception => exc + logger.debug "*** auth/Mailbox Object => #{exc.message}" + return nil end + mailbox.disconnect mailbox = nil if user = Customer.find_by_email(email) @@ -60,6 +66,6 @@ class LoginController < ApplicationController user = Customer.create("email"=>email) MailPref.create('customer_id' => user.id) return user - end - end + end + end end diff --git a/app/controllers/webmail_controller.rb b/app/controllers/webmail_controller.rb old mode 100644 new mode 100755 index 565d8be..12c6a1e --- a/app/controllers/webmail_controller.rb +++ b/app/controllers/webmail_controller.rb @@ -3,58 +3,63 @@ require 'net/smtp' require 'net/imap' require 'mail2screen' require 'ezcrypto' +require 'imapmailbox' +require 'imap_utils' + class WebmailController < ApplicationController include ImapUtils - + + logger.info "*** WebmailController #{logger.inspect}" + # Administrative functions before_filter :login_required before_filter :obtain_cookies_for_search_and_nav, :only=>[:messages] before_filter :load_imap_session after_filter :close_imap_session - + layout "public", :except => [:view_source, :download] - + # model :filter, :expression, :mail_pref, :customer - + BOOL_ON = "on" - + def index redirect_to(:action=>"messages") end - + def error_connection end - + def refresh @mailbox.reload @folders = @mailbox.folders redirect_to(:action=>'messages') end - + def messages session["return_to"] = nil @search_field = params['search_field'] @search_value = params['search_value'] - + # handle sorting - tsort session field contains last reverse or no for field # and lsort - last sort field if session['tsort'].nil? or session['lsort'].nil? session['lsort'] = "DATE" session['tsort'] = {"DATE" => true, "FROM" => true, "SUBJECT" => true, "TO" => false} end - + case operation_param when t(:copy) # copy msg_ids = [] - messages_param.each { |msg_id, bool| + messages_param.each { |msg_id, bool| msg_ids << msg_id.to_i if bool == BOOL_ON and dst_folder != @folder_name } if messages_param - folder.copy_multiple(msg_ids, dst_folder) if msg_ids.size > 0 + folder.copy_multiple(msg_ids, dst_folder) if msg_ids.size > 0 when t(:move) # move msg_ids = [] - messages_param.each { |msg_id, bool| + messages_param.each { |msg_id, bool| msg_ids << msg_id.to_i if bool == BOOL_ON and dst_folder != @folder_name } if messages_param - folder.move_multiple(msg_ids, dst_folder) if msg_ids.size > 0 + folder.move_multiple(msg_ids, dst_folder) if msg_ids.size > 0 when t(:delete) # delete msg_ids = [] messages_param.each { |msg_id, bool| msg_ids << msg_id.to_i if bool == BOOL_ON } if messages_param @@ -67,10 +72,10 @@ class WebmailController < ApplicationController session['lsort'] = sort_query = params["scc"] session['tsort'][sort_query] = (session['tsort'][sort_query]? false : true) @search_field, @search_value = session['search_field'], session['search_value'] - when t(:search) # search + when t(:search) # search session['search_field'] = @search_field session['search_value'] = @search_value - when t(:show_all) # search + when t(:show_all) # search session['search_field'] = @search_field = nil session['search_value'] = @search_value = nil else @@ -78,7 +83,7 @@ class WebmailController < ApplicationController @search_field = session['search_field'] @search_value = session['search_value'] end - + sort_query = session['lsort'] reverse_sort = session['tsort'][sort_query] query = ["ALL"] @@ -92,39 +97,39 @@ class WebmailController < ApplicationController @pages = Paginator.new self, folder.total, get_mail_prefs.wm_rows, @page @messages = folder.messages(@pages.current.first_item - 1, get_mail_prefs.wm_rows, sort_query + (reverse_sort ? ' desc' : ' asc')) end - + end - + def delete @msg_id = msg_id_param.to_i folder.delete(@msg_id) redirect_to(:action=>"messages") end - + def reply # not ready at all @msg_id = msg_id_param.to_i @imapmail = folder.message(@msg_id) fb = @imapmail.full_body - @tmail = TMail::Mail.parse(fb) - + @tmail = TMail::Mail.parse(fb) + @mail = prepare_mail @mail.reply(@tmail, fb, get_mail_prefs.mail_type) - + render :action => 'compose' end - + def forward @msg_id = msg_id_param.to_i @imapmail = folder.message(@msg_id) fb = @imapmail.full_body - @tmail = TMail::Mail.parse(fb) - + @tmail = TMail::Mail.parse(fb) + @mail = prepare_mail @mail.forward(@tmail, fb) - + render :action => 'compose' end - + def compose if @mail.nil? operation = operation_param @@ -133,13 +138,13 @@ class WebmailController < ApplicationController encmail = @mail.send_mail get_imap_session @mailbox.message_sent(encmail) - + # delete temporary files (attachments) @mail.delete_attachments() render :action => :mailsent elsif operation == t(:add) @mail = create_mail - if params['attachment'] + if params['attachment'] attachment = CDF::Attachment.new(@mail) attachment.file = params['attachment'] end @@ -149,7 +154,7 @@ class WebmailController < ApplicationController end end end - + def empty # empty trash folder (works for any one else :-)) folder.messages(0, -1).each{ |message| folder.delete(message) @@ -157,50 +162,50 @@ class WebmailController < ApplicationController folder.expunge redirect_to(:action=>"messages") end - + def message @msg_id = msg_id_param @imapmail = folder.message(@msg_id) folder.mark_read(@imapmail.uid) if @imapmail.unread @mail = TMail::Mail.parse(@imapmail.full_body) end - + def download msg_id = msg_id_param imapmail = folder.message(msg_id) - mail = TMail::Mail.parse(imapmail.full_body) - + mail = TMail::Mail.parse(imapmail.full_body) + if mail.multipart? - get_parts(mail).each { |part| - return send_part(part) if part.header and part.header['content-type']['name'] == params['ctype'] + get_parts(mail).each { |part| + return send_part(part) if part.header and part.header['content-type']['name'] == params['ctype'] } render("webmail/noattachment") - else + else render("webmail/noattachment") - end + end end - + def prefs @customer = Customer.find(logged_customer) @mailpref = MailPref.find_or_create_by_customer_id logged_customer - + if params['op'] == _('Save') if params['customer'] @customer.fname = params['customer']['fname'] @customer.lname = params['customer']['lname'] @customer.save end - @mailpref.attributes = params["mailpref"] + @mailpref.attributes = params["mailpref"] @mailpref.save session["wmimapseskey"] = nil redirect_to(:action=>"messages") end end - + # Message filters management def filters end - + def filter if params['op'] @filter = Filter.new(params['filter']) @@ -209,7 +214,7 @@ class WebmailController < ApplicationController case params['op'] when _('Add') @filter.expressions << Expression.new - when _('Save') + when _('Save') if params['filter']['id'] and params['filter']['id'] != "" @sf = Filter.find(params['filter']['id']) @sf.name, @sf.destination_folder = @filter.name, @filter.destination_folder @@ -228,11 +233,11 @@ class WebmailController < ApplicationController @expressions = @filter.expressions else @filter = Filter.find(params["id"]) if params["id"] - @expressions = @filter.expressions + @expressions = @filter.expressions end @destfolders = get_to_folders end - + def filter_delete Filter.delete(params["id"]) # reindex other filters @@ -246,7 +251,7 @@ class WebmailController < ApplicationController @user.serialize_to_file redirect_to :action=>"filters" end - + def filter_up filt = @user.filters.find(params['id']) ufilt = @user.filters.find_all("order_num = #{filt.order_num - 1}").first @@ -257,7 +262,7 @@ class WebmailController < ApplicationController @user.serialize_to_file redirect_to :action=>"filters" end - + def filter_down filt = Filter.find(params["id"]) dfilt = @user.filters[filt.order_num] @@ -268,7 +273,7 @@ class WebmailController < ApplicationController @user.serialize_to_file redirect_to :action=>"filters" end - + def filter_add @filter = Filter.new @filter.expressions << Expression.new @@ -277,58 +282,58 @@ class WebmailController < ApplicationController render "filter" end # end of filters - + def view_source @msg_id = msg_id_param.to_i @imapmail = folder.message(@msg_id) @msg_source = CGI.escapeHTML(@imapmail.full_body).gsub("\n", "
") end - + def auto_complete_for_mail_to auto_complete_responder_for_contacts params[:mail][:to] end - + def auto_complete_for_mail_cc auto_complete_responder_for_contacts params[:mail][:cc] end - + def auto_complete_for_mail_bcc auto_complete_responder_for_contacts params[:mail][:bcc] end - + private - + def auto_complete_responder_for_contacts(value) # first split by "," and take last name searchName = value.split(',').last.strip - + # if there are 2 names search by them if searchName.split.size > 1 fname, lname = searchName.split.first, searchName.split.last conditions = ['customer_id = ? and LOWER(fname) LIKE ? and LOWER(lname) like ?', logged_customer, fname.downcase + '%', lname.downcase + '%'] else conditions = ['customer_id = ? and LOWER(fname) LIKE ?', logged_customer, searchName.downcase + '%'] - end + end @contacts = Contact.find(:all, :conditions => conditions, :order => 'fname ASC',:limit => 8) render :partial => 'contacts' end - + protected - + def additional_scripts() @additional_css = ["webmail/webmail"] @additional_js = ["webmail"] end - + private - + def get_to_folders res = Array.new @folders.each{|f| res << f unless f.name == CDF::CONFIG[:mail_sent] or f.name == CDF::CONFIG[:mail_inbox] } res end - - + + def create_mail m = CDF::Mail.new(user.mail_temporary_path) if params["mail"] @@ -343,24 +348,24 @@ class WebmailController < ApplicationController end else m.from, m.content_type = user.friendlly_local_email, get_mail_prefs.mail_type - end + end m.customer_id = logged_customer m end - + def prepare_mail m = CDF::Mail.new(user.mail_temporary_path) m.from, m.content_type = user.friendlly_local_email, get_mail_prefs.mail_type m end - - + + def send_part(part) if part.content_type == "text/html" disposition = "inline" elsif part.content_type.include?("image/") - disposition = "inline" - else + disposition = "inline" + else disposition = "attachment" end headers['Content-Length'] = part.body.size @@ -369,48 +374,48 @@ class WebmailController < ApplicationController headers['Content-Disposition'] = disposition << %(; filename="#{part.header['content-type']['name']}") render :text => part.body end - + def get_parts(mail) parts = Array.new parts << mail - mail.parts.each { |part| + mail.parts.each { |part| if part.multipart? - parts = parts.concat(get_parts(part)) + parts = parts.concat(get_parts(part)) elsif part.content_type and part.content_type.include?("rfc822") parts = parts.concat(get_parts(TMail::Mail.parse(part.body))) << part - else + else parts << part end - } - parts + } + parts end - + def obtain_cookies_for_search_and_nav @srch_class = ((cookies['_wmlms'] and cookies['_wmlms'] == 'closed') ? 'closed' : 'open') - @srch_img_src = ((cookies['_wmlms'] and cookies['_wmlms'] == 'closed') ? 'closed' : 'opened') + @srch_img_src = ((cookies['_wmlms'] and cookies['_wmlms'] == 'closed') ? 'closed' : 'opened') @ops_class = ((cookies['_wmlmo'] and cookies['_wmlmo'] == 'closed') ? 'closed' : 'open') - @ops_img_src = ((cookies['_wmlmo'] and cookies['_wmlmo'] == 'closed') ? 'closed' : 'opened') - end - + @ops_img_src = ((cookies['_wmlmo'] and cookies['_wmlmo'] == 'closed') ? 'closed' : 'opened') + end + ################################################################### ### Some fixed parameters and session variables ################################################################### def folder @folders[@folder_name] end - + def msg_id_param params["msg_id"] end - + def messages_param params["messages"] end - + def dst_folder params["cpdest"] end - + def operation_param params["op"] end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb old mode 100644 new mode 100755 diff --git a/app/helpers/contact_group_helper.rb b/app/helpers/contact_group_helper.rb old mode 100644 new mode 100755 diff --git a/app/helpers/contacts_helper.rb b/app/helpers/contacts_helper.rb old mode 100644 new mode 100755 diff --git a/app/helpers/folders_helper.rb b/app/helpers/folders_helper.rb old mode 100644 new mode 100755 diff --git a/app/helpers/navigation_helper.rb b/app/helpers/navigation_helper.rb old mode 100644 new mode 100755 diff --git a/app/helpers/webmail_helper.rb b/app/helpers/webmail_helper.rb old mode 100644 new mode 100755 index 447a04e..4204fbe --- a/app/helpers/webmail_helper.rb +++ b/app/helpers/webmail_helper.rb @@ -6,35 +6,35 @@ module WebmailHelper def link_compose_new link_to(t(:compose_txt), :controller=>"webmail", :action=>"compose") end - + def link_refresh link_to(t(:refresh), :controller=>"webmail", :action=>"refresh") end - + def link_message_list link_to(_('Message list'), :controller=>"webmail", :action=>"messages") end - + def link_reply_to_sender(msg_id) link_to(t(:reply), :controller=>"webmail", :action=>"reply", :params=>{"msg_id"=>msg_id}) end - + def link_forward_message(msg_id) link_to(t(:forward), :controller=>"webmail", :action=>"forward", :params=>{"msg_id"=>msg_id}) end - + def link_flag_for_deletion(msg_id) link_to(t(:delete), :controller=>"webmail", :action=>"delete", :params=>{"msg_id"=>msg_id}) end - + def link_view_source(msg_id) link_to(t(:view_source), {:controller=>"webmail", :action=>"view_source", :params=>{"msg_id"=>msg_id}}, {'target'=>"_blank"}) end - + def link_filter_add link_to(t(:add_filter), :controller=>'webmail', :action=>'filter_add') end - + def folder_link(folder) return folder.name if folder.attribs.include?(:Noselect) folder_name = short_fn(folder) @@ -42,7 +42,8 @@ module WebmailHelper title = folder.unseen > 0 ? "#{folder_name} (#{folder.unseen})" : "#{folder_name}" link = link_to title, :controller => 'webmail', :action => 'messages', :folder_name => folder.name link = content_tag('b', link) if folder.name == @folder_name - link += ' ' + empty_trash_link(folder.name) if folder.trash? + link += raw(' ' + empty_trash_link(folder.name)) if folder.trash? + logger.info link link end @@ -58,7 +59,7 @@ module WebmailHelper d.strftime("%H:%M") else d.strftime("%Y-%m-%d") - end + end rescue begin d = imap2time(datestr) @@ -66,43 +67,43 @@ module WebmailHelper d.strftime("%H:%M") else d.strftime("%Y-%m-%d") - end + end rescue datestr end end end - + def attachment(att, index) ret = "#{att.filename}" # todo: add link to delete attachment - #ret << + #ret << ret << "" ret << "" ret << "" end - + def link_filter_up(filter_id) link_to(_('Up'), :controller=>"webmail", :action=>"filter_up", :id=>filter_id) end - + def link_filter_down(filter_id) link_to(_('Down'), :controller=>"webmail", :action=>"filter_down", :id=>filter_id) end - + def link_filter_edit(filter_id) link_to(_('Edit'), :controller=>"webmail", :action=>"filter", :id=>filter_id) end - + def link_filter_delete(filter_id) link_to(_('Delete'), :controller=>"webmail", :action=>"filter_delete", :id=>filter_id) end - + def page_navigation_webmail(pages) nav = "

" - + nav << "(#{pages.length} #{t :pages})   " - + window_pages = pages.current.window.pages nav << "..." unless window_pages[0].first? for page in window_pages @@ -114,27 +115,27 @@ module WebmailHelper end nav << "..." unless window_pages[-1].last? nav << "   " - + nav << link_to(t(:first), :controller=>"webmail", :action=>'messages', :page=>@pages.first.number) << " | " unless @pages.current.first? nav << link_to(t(:prev), :controller=>"webmail", :action=>'messages', :page=>@pages.current.previous.number) << " | " if @pages.current.previous nav << link_to(t(:next), :controller=>"webmail", :action=>'messages', :page=>@pages.current.next.number) << " | " if @pages.current.next nav << link_to(t(:last), :controller=>"webmail", :action=>'messages', :page=>@pages.last.number) << " | " unless @pages.current.last? - + nav << "

" - + return nav end def parse_subject(subject) begin if mime_encoded?(subject) - if mime_decode(subject) == '' + if mime_decode(subject) == '' _('(No subject)') else mime_decode(subject) end else - if from_qp(subject) == '' + if from_qp(subject) == '' _('(No subject)') else from_qp(subject) @@ -143,17 +144,17 @@ module WebmailHelper rescue Exception => ex RAILS_DEFAULT_LOGGER.debug('Exception occured - #{ex}') return "" - end + end end - - def message_size(size) + + def message_size(size) if size / (1024*1024) > 0 return "#{(size / (1024*1024)).round} MB" - elsif size / 1024 > 0 + elsif size / 1024 > 0 return "#{(size / (1024)).round} KB" else return "#{size} B" - end + end end private @@ -161,6 +162,6 @@ module WebmailHelper def empty_trash_link(folder_name) link_to( "(#{t :empty})", { :controller => "webmail", :action => "empty", :params=>{"folder_name"=>folder_name}}, - :confirm => t(:want_to_empty_trash_message)) + :confirm => t(:want_to_empty_trash_message)) end end diff --git a/app/models/contact.rb b/app/models/contact.rb old mode 100644 new mode 100755 index a039675..97ffac8 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -1,34 +1,37 @@ require 'cdfutils' require_association 'contact_group' -class Contact < ActiveRecord::Base - +class Contact < ActiveRecord::Base + + validate :check_fname_and_lname, :check_mail_cannot_be_changed + validate :check_email, :on => :create + has_and_belongs_to_many :groups, :class_name => "ContactGroup", :join_table => "contact_contact_groups", :association_foreign_key => "contact_group_id", :foreign_key => "contact_id" - + # Finder methods follow def Contact.find_by_user(user_id) find(:all, :conditions => ["customer_id = ?", user_id], :order => "fname asc", :limit => 10) end - + def Contact.find_by_user_email(user_id, email) find(:first, :conditions => ["customer_id = #{user_id} and email = ?", email]) end - + def Contact.find_by_group_user(user_id, grp_id) result = Array.new find(:all, :conditions => ["customer_id = ?", user_id], :order => "fname asc").each { |c| - begin + begin c.groups.find(grp_id) - result << c + result << c rescue ActiveRecord::RecordNotFound end } result end - named_scope :for_customer, lambda{ |customer_id| {:conditions => {:customer_id => customer_id}} } - named_scope :letter, lambda{ |letter| {:conditions => ["contacts.fname LIKE ?", "#{letter}%"]} } - + scope :for_customer, lambda{ |customer_id| {:conditions => {:customer_id => customer_id}} } + scope :letter, lambda{ |letter| {:conditions => ["contacts.fname LIKE ?", "#{letter}%"]} } + def Contact.find_by_user_letter(user_id, letter) find_by_sql("select * from contacts where customer_id=#{user_id} and substr(UPPER(fname),1,1) = '#{letter}' order by fname") end @@ -36,36 +39,38 @@ class Contact < ActiveRecord::Base def full_name "#{fname} #{lname}" end - + def show_name "#{fname} #{lname}" end - + def full_address "#{fname} #{lname}<#{email}>" end - - protected - def validate - errors.add 'fname', I18n.t(:validate_fname_error) unless self.fname =~ /^.{2,20}$/i - errors.add 'lname', I18n.t(:validate_lname_error) unless self.lname =~ /^.{2,20}$/i - - # Contact e-mail cannot be changed - unless self.new_record? + + protected + def check_fname_and_lname + errors.add 'fname', t(:validate_fname_error) unless self.fname =~ /^.{2,20}$/i + errors.add 'lname', t(:validate_lname_error) unless self.lname =~ /^.{2,20}$/i + end + + def check_mail_cannot_be_changed + # Contact e-mail cannot be changed + unless self.new_record? old_record = Contact.find(self.id) - errors.add 'email', I18n.t(:contacto_cannot_be_changed) unless old_record.email == self.email + errors.add 'email', t(:contact_cannot_be_changed) unless old_record.email == self.email end + end + + def check_mail + # Contact e-mail cannot be changed, so we only need to validate it on create + errors.add 'email', t(:validate_email_error) unless valid_email?(self.email) + # Already existing e-mail in contacts for this user is not allowed + if self.new_record? + if Contact.find :first, :conditions => {:email => email, :customer_id => customer_id} + errors.add('email', I18n.t(:email_exists)) + end + end end - - def validate_on_create - # Contact e-mail cannot be changed, so we only need to validate it on create - errors.add 'email', I18n.t(:validate_email_error) unless valid_email?(self.email) - # Already existing e-mail in contacts for this user is not allowed - if self.new_record? - if Contact.find :first, :conditions => {:email => email, :customer_id => customer_id} - errors.add('email', I18n.t(:email_exists)) - end - end - end - + end diff --git a/app/models/contact_group.rb b/app/models/contact_group.rb old mode 100644 new mode 100755 index 628d69a..63da4c1 --- a/app/models/contact_group.rb +++ b/app/models/contact_group.rb @@ -1,25 +1,30 @@ class ContactGroup < ActiveRecord::Base - has_and_belongs_to_many :contacts, :class_name => "Contact", :join_table => "contact_contact_groups", :association_foreign_key => "contact_id", :foreign_key => "contact_group_id" + has_and_belongs_to_many :contacts, :class_name => "Contact", :join_table => "contact_contact_groups", :association_foreign_key => "contact_id", :foreign_key => "contact_group_id" + + validate :check_group_name + validate :check_group_id, :on => :create + validate :check_group_uniqness, :on => :update - def ContactGroup.find_by_user(user_id) - find_by_sql("select * from contact_groups where customer_id = #{user_id} order by name asc") - end - - protected - def validate - errors.add('name', :contactgroup_name_invalid) unless self.name =~ /^.{1,50}$/i + def ContactGroup.find_by_user(user_id) + find_by_sql("select * from contact_groups where customer_id = #{user_id} order by name asc") end - - def validate_on_create - if ContactGroup.find_first(["name = '#{name}' and customer_id = #{user_id}"]) - errors.add("name", _('Please enter group name (1 to 50 characters)')) - end + + protected + + def check_group_name + errors.add('name', t(:contactgroup_name_invalid)) unless self.name =~ /^.{1,50}$/i + end + + def check_group_id + if ContactGroup.find_first(["name = '#{name}' and customer_id = #{user_id}"]) + errors.add("name", _('Please enter group name (1 to 50 characters)')) + end end - - def validate_on_update - if ContactGroup.find_first(["name = '#{name}' and customer_id = #{user_id} and id <> #{id}"]) - errors.add("name", _('You already have contact group with this name')) - end + + def check_group_uniqness + if ContactGroup.find_first(["name = '#{name}' and customer_id = #{user_id} and id <> #{id}"]) + errors.add("name", _('You already have contact group with this name')) + end end - + end diff --git a/app/models/customer.rb b/app/models/customer.rb old mode 100644 new mode 100755 diff --git a/app/models/mail_pref.rb b/app/models/mail_pref.rb old mode 100644 new mode 100755 diff --git a/app/views/contact_groups/edit.rhtml b/app/views/contact_groups/edit.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/contact_groups/edit.rhtml rename to app/views/contact_groups/edit.html.erb diff --git a/app/views/contact_groups/index.html.erb b/app/views/contact_groups/index.html.erb old mode 100644 new mode 100755 diff --git a/app/views/contacts/add_multiple.rhtml b/app/views/contacts/add_multiple.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/contacts/add_multiple.rhtml rename to app/views/contacts/add_multiple.html.erb diff --git a/app/views/contacts/choose.rhtml b/app/views/contacts/choose.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/contacts/choose.rhtml rename to app/views/contacts/choose.html.erb diff --git a/app/views/contacts/import_preview.rhtml b/app/views/contacts/import_preview.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/contacts/import_preview.rhtml rename to app/views/contacts/import_preview.html.erb diff --git a/app/views/contacts/index.html.erb b/app/views/contacts/index.html.erb old mode 100644 new mode 100755 diff --git a/app/views/contacts/new.html.erb b/app/views/contacts/new.html.erb old mode 100644 new mode 100755 index 0b73341..dd19e45 --- a/app/views/contacts/new.html.erb +++ b/app/views/contacts/new.html.erb @@ -20,24 +20,24 @@
- <% form_tag( contacts_path, 'method' => 'post', 'class' => 'two_columns') do %> + <%= form_tag( contacts_path, 'method' => 'post', 'class' => 'two_columns') do %> <%= form_input(:hidden_field, 'contact', 'id') %> <%= form_input(:hidden_field, 'contact', 'customer_id') %> - + <%= form_input(:text_field, 'contact', 'fname', t(:first_name), 'class'=>'two_columns') %> <%= form_input(:text_field, 'contact', 'lname', t(:last_name), 'class'=>'two_columns') %> <%= form_input((@contact.new_record? ? :text_field : :read_only_field), 'contact', 'email', t(:email), 'class'=>'two_columns')%>
- + <% for group in @contactgroups %> - <% end %> + <% end %> <% if not(@contactgroups.empty?) %> <%=_('Contact belong to these groups')%>: - <% + <% end col = 1 for group in @contactgroups %> @@ -57,17 +57,17 @@ <% end %> <% if not(@contactgroups.empty?) %> -
+ <% end %> - - + +
- -
+ + <% end %>
diff --git a/app/views/folders/index.html.erb b/app/views/folders/index.html.erb old mode 100644 new mode 100755 index 599cbe8..530e2ab --- a/app/views/folders/index.html.erb +++ b/app/views/folders/index.html.erb @@ -15,18 +15,18 @@
-<% content_for('sidebar') { %> +<% content_for('sidebar') { %>

<%= t :add_folder %>


- <% form_tag folders_path, :id => 'new_folder' do %> + <%= form_tag folders_path, :id => 'new_folder' do %>
  • <%= text_field_tag 'folder', '', :size => 18 %>
  • <%= submit_tag t(:add_folder) %>
<% end %> -
+
<% } %>
@@ -45,4 +45,4 @@
- + diff --git a/app/views/layouts/chooser.html.erb b/app/views/layouts/chooser.html.erb old mode 100644 new mode 100755 diff --git a/app/views/layouts/login.html.erb b/app/views/layouts/login.html.erb old mode 100644 new mode 100755 diff --git a/app/views/layouts/public.html.erb b/app/views/layouts/public.html.erb old mode 100644 new mode 100755 index ccaf432..9aa6bbe --- a/app/views/layouts/public.html.erb +++ b/app/views/layouts/public.html.erb @@ -14,7 +14,10 @@
<%= yield %>

diff --git a/app/views/login/index.rhtml b/app/views/login/index.rhtml old mode 100644 new mode 100755 diff --git a/app/views/shared/_folders.html.erb b/app/views/shared/_folders.html.erb old mode 100644 new mode 100755 index 9b22322..cdb6633 --- a/app/views/shared/_folders.html.erb +++ b/app/views/shared/_folders.html.erb @@ -3,8 +3,8 @@
    <% @folders.each do |folder| -%> -
  • <%= folder_link(folder) %>
  • - <% end -%> +
  • <%= raw folder_link(folder) %>
  • + <% end -%>
diff --git a/app/views/webmail/_contacts.rhtml b/app/views/webmail/_contacts.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/_contacts.rhtml rename to app/views/webmail/_contacts.html.erb diff --git a/app/views/webmail/_expr.rhtml b/app/views/webmail/_expr.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/_expr.rhtml rename to app/views/webmail/_expr.html.erb diff --git a/app/views/webmail/_filter.rhtml b/app/views/webmail/_filter.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/_filter.rhtml rename to app/views/webmail/_filter.html.erb diff --git a/app/views/webmail/_message_row.rhtml b/app/views/webmail/_message_row.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/_message_row.rhtml rename to app/views/webmail/_message_row.html.erb diff --git a/app/views/webmail/_search.rhtml b/app/views/webmail/_search.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/_search.rhtml rename to app/views/webmail/_search.html.erb diff --git a/app/views/webmail/compose.rhtml b/app/views/webmail/compose.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/compose.rhtml rename to app/views/webmail/compose.html.erb diff --git a/app/views/webmail/error_connection.rhtml b/app/views/webmail/error_connection.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/error_connection.rhtml rename to app/views/webmail/error_connection.html.erb diff --git a/app/views/webmail/filter.rhtml b/app/views/webmail/filter.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/filter.rhtml rename to app/views/webmail/filter.html.erb diff --git a/app/views/webmail/filters.rhtml b/app/views/webmail/filters.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/filters.rhtml rename to app/views/webmail/filters.html.erb diff --git a/app/views/webmail/folders.rhtml b/app/views/webmail/folders.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/folders.rhtml rename to app/views/webmail/folders.html.erb diff --git a/app/views/webmail/mailsent.rhtml b/app/views/webmail/mailsent.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/mailsent.rhtml rename to app/views/webmail/mailsent.html.erb diff --git a/app/views/webmail/message.rhtml b/app/views/webmail/message.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/message.rhtml rename to app/views/webmail/message.html.erb diff --git a/app/views/webmail/messages.rhtml b/app/views/webmail/messages.html.erb old mode 100644 new mode 100755 similarity index 96% rename from app/views/webmail/messages.rhtml rename to app/views/webmail/messages.html.erb index 965fd37..b4b0314 --- a/app/views/webmail/messages.rhtml +++ b/app/views/webmail/messages.html.erb @@ -15,9 +15,9 @@
-<% content_for('sidebar') { %> - <%= render :partial => 'shared/folders' %> -<% } %> +<% content_for :sidebar do %> +<%= render :partial => 'shared/folders' %> +<% end %>
@@ -25,11 +25,11 @@ <%= form_tag({:controller=>'webmail', :action=>'messages'})%>
- + <%=t :operations%>open - +

<%= t :operations_txt %>

diff --git a/app/views/webmail/noattachment.rhtml b/app/views/webmail/noattachment.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/noattachment.rhtml rename to app/views/webmail/noattachment.html.erb diff --git a/app/views/webmail/prefs.rhtml b/app/views/webmail/prefs.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/prefs.rhtml rename to app/views/webmail/prefs.html.erb diff --git a/app/views/webmail/view_source.rhtml b/app/views/webmail/view_source.html.erb old mode 100644 new mode 100755 similarity index 100% rename from app/views/webmail/view_source.rhtml rename to app/views/webmail/view_source.html.erb diff --git a/arts/logo.png b/arts/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..0bf187deae6e23953a8804113d5c8eff73ff4cc4 GIT binary patch literal 61554 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 Q2*B5SDJ98jaigIB0a9)*LjV8( literal 0 HcmV?d00001 diff --git a/arts/logo.xcf b/arts/logo.xcf new file mode 100755 index 0000000000000000000000000000000000000000..7ff1b6c1e557c9d469feaa0785e5579447eb86ef GIT binary patch literal 254283 zcmeFa34B#WwlBPEpOX;6pdzB6wrLy~L{yw-gm%1+IH7IBjbbDX0wOjbNQ93`KxhUb zzyk!Kp%G+wfdGLBGD-vkVTLe6LI|1XbN1fv|6jHDIVZM#`}X(ly}$e2PrA#hU3;xn ztJYezYSpk$-cS6XPuzfa6XFsQd%kBFhWVLcs6V5?e^($Wh5uZM6w?9KO!(Ir$&Yjl zsfk-A+|{Vwft>%Mk?MDN?~}M*@t^b`c;h`%Y07^MBMP|>iAcMdcRc->(eVqEz(TF^ z7Q^T`S?X2CaM_F~M>KM`CLsUS?0b!*qfT{90kJ6>rdBx(_5b@bzEB;*WwTZ}4-77I zVWdoOFw63{Qg3$52c7X!RuSdMdb8smz|18o+6tE=>&=eqLGw$OPPiOdAJOT%gqSB; z>dfo(U!;-L#ou(C_}XhIn;j#|Yf-;ka8<`}*{oI0eeE?03jb8caM`R?&I8Oi7baYW zU_$j~$4qp3j_{x&%8~VEN2sXdG#4gZj;xR9bUSI#>vUs0d7b_jVKx=SCVoaBbULC; zX?mItm$hVdz1i_RU{(+noeq~H>&=d50rSOY8YWzhtT#LE1d?I`_IT;c{fX*|8D$+~>lC%aQe0p^2ve(cpc!$=lxT{lN$C z_3B3q`mIJC`@R?7@4aqu{S*6jk9+Ew=U?KR%LO#?gZTH~yY2nHiQQNSXl1ngsNcYz z@5O!8yJupzR9vK*fxlGg*4_4Tuf%?FiM`(K{@zE#@12nF(R=+u3=;cqt8`6m zRLa5q7d_7~8ajq?@)>j+G)6+1^v@z6o_Za5zW`^&X0>gJiD_CQ6N45cpQa3xX zj+2WY2~><2x6HS7-7+#GHlkcFqFg_s+#sTS8Ooq#Hbnj|Qk{r*jotELhC0cLQl67&-J2i)-5_|*_!5FB>8^#eP>2hNW zQjDYqvBn)vjUA{e%ZG~Zaq9j%Q&KF5#DWM@Oq@}E=J3vSf1UJ6mq)HOt~2U7HAPz| zc5aHWr-2i&f9iK70;9{FVAZ^KMkAw<6STg(+_>Cm>{z+47?&AWIhH-ZXlPvRSjj%4 zzHyCXCnIa>*dG}6kXeD>!DgE|R?g+H<4FGhZFaA78W@#P^_sPLrsvGVjzZ_IbFMOi zttM8Xuh%(O8+I!xG{?g~lYnRnViUuA&3q4jGWE7(GW zYkw`7Red!a(e;k~q0Y8TW?7fR1^&jdpV!$CWcG3AI>%m&lJ%QY4(R;=Q2QB{PJ@*F zozu**OIYg3QVmOOLZ!wmad6ntEM>EF4NE_<^eju?vNVIGBv7`lt7P#dwr8$mE7y~W zSuFjidF_wvIv9O($?b1|kN(+hB)1o$yD;{=CX(AP!uBx~reG*s<5i9rzVcQO2)R`37mrS!+t%)|0tPtp@EEXd$=Cz z<=4tkw`b`QZ`~%kw^NZpiNAw{k}hk%1u2G!m5mMiXotoXRmOj6#f|pkQ6)JNUA$}3sMXdborC1Rog`}>vRls4l^7enN@Tp7Irr{_C#cM zk#oIc)!c+>+WwORm~T+BVotI604v{SX$vdWE*3knvI9yK9g3@1*@N$I4U$w|L)Ok@ z?FiO3En{uPwX7Y=+BvMPpUYaSEoD8iJILv>OUKZy48<8OF8Q zhH*WDlHZgY#tm3$-EhG$;xY`Q`F)^=DDy@JFr3K4sX<-iX2(7S=W~l=-wfY_EKz4m zC9?`l7(ffhzDH*Rb+$n=t1<@usik8-p|j6*_9J{s?N%_Sr8_ra>bL4vNshVfW<~;I zbhaBAyu_8Zrj(}G!o&K4t!t=&pwzgTV%2M2!hKarwp(`&$3 z=%2xFY9!TbUpqzc6azt7RwH=wR*wCu&XRR@3|VW(z5(7HSvQ?6lFZ6e@b$Mk_8mIw zhwN&{E_E;~tkLCFC|l*xm;>sKvHbr?*)np8vE6-GK$KuZ%oms$jCjJm z=sx_050m9V8TJuk9rT{2^4+yEt>9fJK6Q1UtjjHeel3rtVejPAdGBc?L0ij2gm)eI z)XROc>QoSPr9Ao!dmWyvVop|9J9zvPVITCK+VN?K`(&wnVty}=aIfDGv!gkLBQeLz6Xt>wMBM8=%_O4T1XJJD4qm=N&^O&DtFcX3&Wl$&h$nvH(@F1XEJ1I^ zBq{Hn;!~pgWW`nybg4Wd@cE97U@*l17LS7fYu(cX)0RBm&&PppxsR5wh|n8m%QK>! z<$SC<=RNjxu5?HTZ(6#=x`urQG+2w`SK;E@;o>!J5n<{+5F{*$e-0O)3l*&f0q1go zKp?v%TpSuMJ`yTgQKg8CNv=Mp$x!jbaPc;`h?qCmY3M|Hhq{<>^D&wcP_%PeGW(Ox z)*-vnpnWih)wE(ZQfE7nH8N;*%wdbInN39pFgBX7ET)@+GU8$}>OQ*s4y1rUQ|kW$ zcq_-i0|IHqA!5zfPj*{?S^w%j^yR~K?!#(;1rK4Z-^97hu%gQNIK_Rm9|dIaCGTk% z-UWhK$P28!4UhH?EX1#N8X8u^03V0DkM;}XtG)L$3GXywNR!;0YOIu?(DNhKp~wMMURz<4_sv365R_(hRmk z#V6h3Wf*pKLuET%27at@nPYzvF5c@F5w{nbp)%GdTr$KWoVWiNF5co68*mv!C-<{i z%y+GE(tp#lJw|-BX2-$vMP=2t9jq=Z$jRQjb@g8+4vK&BmS}{F)#lwFe6_Czi<@fe z=<+|^>&IjfsQbp^OPD~dl5gO!gUzRwU{EwPf{msJoi;EVt82c~mb$I?wQ~oWwVGx* zcfwm(amSo?7{1nJ2c5g%n=G~3xtl)f9p@gnJgZT@t1O&v!080jtX zqKQ!+LgBP&Ux~`QxRR{v+-U@x^vOh_E#%c{MF7k7TaCb#UA`@cTWVp{)NP;ieGpc8 zqfv9+t6%J>ajtTHW7O1t?BgY8!FyAqI{NPJv$HHj@>dx(H~nF1MzwPzJWQZTm-)Hy zQw@zk!}rsJ&aH5T!Im@2An;ftc*9>TNIV9D_)|GV4G~|Fil8Q#J)#XbfruMtA}R`= z`}2Jm@39neogL0^of>P$r|lHRC#&pf&J9kWXmOXTVCW*cj*xudQt}gih}g!W9@C|z z_P`{98()itY1!DI;1v22g}(hk*aTM4QnQvqA8JyN*x=V z6Y_Y*#CBFw^g7_2`2>4VQZ}97*?%>SYvjT2Sm{?IY$Z?>e0Y0At1L$&1b6|#Da&;n ztD2E1%Q0B6H3jc1*QL+V#aISDjiff#u@3pbDk18zI#gU6Dq3)tmkUIF$L=|34;Qa@i&$SB#(pFLQ2a7nd^uEPs8nAd;0JbwizCCu4xu80u6hCt z7qKo}{8PBtE>vXr7AwGTwTr{WgmAIBTZCsg4&RX!`&p=e>?elGYcBrXg&0sWR z#jb_uQB#N-E3X0iWL>)xszcR5`syW^7L1_kQV4ycZY4c>3MYb~@5SAi6;YQ2$6r=H zy;EF$|CP7CJ@o>@F4R8kJc!Klop&DKR4`I9>*{jne$KQbF+JHAvDu6XJLWKg1Z&bC z@Pzs2t_s8s!C^*QJi;G$wh^FLSH|Ozs{)(Qn83PmscxOR3vs5MhAM;)Z&Y9^wB|L! zgk^V=t!nFzLrxrKk*5*wS#>X9&ld*R|%w}^1F zEo_?rDAM|M(W-8S0I?|yXk@KU{YN^#o z)E{XS(ln%nNU2EMkq#o|AXOShi#kYGBeg)f59ukSH;~>(>W?%EX&TZ(q*SEsNC%N} zkSYzMWgVoeky;?#hx8QE8%XaX^+y_oG!1DXQYzARq=QH~NR{Yw9i*#~S|Htr^c2z? zNbe){M;e7R4QU}#D$;hOgOpI@{QPVAS9$zu1OFeh0eHWp|HcV3NPD;$9B9bDukhb) zx@chY%xLG9TOx0&%bw4cspqm6diRfy>mT3uqkjG4Z@iBX|Cv*e!VFY_HtHZjsPeC| zTYlDkM%LQBBNSp4u&vMIKGFL~A0Z_njn(iTOdH$^YJ=myHm#8!L;}4wZz25==@XK##h=muui?NQzZ7NhZxrnthh_ki?%kY~GdlPGp3xNZ= zW(aDm>Nu>+gK=LJ02d9l7Y5`8Rq)2X=K+DrrUBwk#?%+^HJf`0jNf9|Ct0@vTM{)7 zFE7L53{7kx!L!(^HUe?+KLyD6N1E|wSn=8ktZ*CX1R2=nBr%1hL&V(UGww0$zp_}` z3`HwJkgZNEx2`1cWESglW5C`YNVl(72oF`m?os!G&t`P=*L%?1EoXebRjpktF2GF|> zM~}aD=D)LM0`+f*9}DBFjO#pY`?*TXHtsa4nzkR3mQ!uR9NQR`^;;+W^-xLB!iH!| zqY7ZV3oIKOd^Z}EO<$g}?NXIvV-xTC5TK3C!E5+#%<>}zc*nb$r8vB(s{iDOwTH?A zs8Duw#ql+tzrrzBS^uG4YmTB}Y!+79!SchYA3oLuW1zy*5Up`yN1Y1N$BI-NKzh!YJ6r@G+#@$H*pL#ed=_jx$>t30=z7;OwY z4r8gRefJ52;%{hxji=xviyk%}G^$6OcS@GD$7l}Jzh|3;>xKb4w_klM4}z_eFJYty ztRK79C;Y=3d8;;9@$Dm^9(@0>jSc4-J8#Af^^KNBu<5EQ+&>7O`=T}6P_TaIlaOn` zI{s->qd6#jQ3O=$KoEKe1owBYZ`@!6pWhz9&S!OS-`z8dY`h3oE_nn;Qo$xu30zse z;$eihODfSyu;_o?g*8g>rJpQvaK7)2*b)si=)Aj{X!f}gIG765@0VwTUcmYeqQ|s6yI?IfOV`7=NapZ627&| zzHA~~c0R(lXy_&OAuj%qv>QB_fD^bt(=X22?7LmIuw8xneY9Ei?W4x^6k#FS3|!oL z+7fy>0~JM_UIiG{pWk z^9I;#WzNG2=4_F9jBtPp1aQQBj)Eg*&Mj!>CY&>KaBu|*I(quY`MoaeO}}>i|F>GN zYVz2JBZhQhXi~oJSh;Om)rW@0;qEWaruV(1^WxqZ^woF0IWXbL`fx~iQ_>q_w=&_U z607V`ulmMsS$E(igp1Y}WsLa_KZH7XKRXA(CESTPM}$s+UZ_`?1!}6#E$b@L9sMNk zM*IaYYL2a$g1{8l5VW_n*P+rD7ea@L!>w&_#R&7@EpcwP#<4IrM+GOydLg7v<=nU+R<*i zrvauE>lvx90z6!N=@$rNtu9hkj;d%UNZ$srN{nq6qb^E2HQcBe!>$#f%11%Nqv6KP zV!=I*N?b|n5?miZRgGgE?aZ?~JAar0j|5#{cr& z6@2m&T7v$3`ROf9e_sF3K9kNr!tr2mtp<028q`W$6L{$^%nnIWCT#szzW<(nJXzlN z4`f80{QKo?e+>(_itBSV*NYCKHCJ8<*#bJ5#mXB9+et5E<5_N2 zLf{1~`ea}oA%$dCmZN0-fg{?o7-L$^^n&^$0X|ER0XwO5^EYtRz(xO$LTpo>SF?1E#(ghl0)FNETs|nwDdz(<~0uyw!P*@+Gr|m zh*#K7v|~gYPqa#+xod0dNtT=HHbxNS6oJ2EDV@Mrp#xxqFcgr5_LEvzve2$CtMbW& zJ_6{fAMq7C77NB5dTCx|S5%@O4xX(9-srm%Yx63d*FTE9onbBIM1uUK^OD!ZjXW8! z5xCdbPB2h{$h|!7&1uV1rhV9d?Tc9BPRD1L2g-|29NoHpT>K4yD7Kuc@`4jtn^Kbp zK65+oxHoeOY=^;5S?=MCEw1+YNouhjtSY>4_^0o``8@t{Ed8#B)=j(E3RV`M&-!8Q zk`eDdh%lk0QE@73+xE5dxq?lK`V*Ei|2X{CGr_+P&I{Fl35Q;;EfyEQeC_NSZ1P+Q z1u5owbl*c;^R`RVeKnYEF)SXX|ZGt zlS*!G+VfeNM^e7cEFOk`D96^(bd1!KlSQc4}H1rFPY&@Q`hX zOT}X2|L|buzwy~K&&B^k&!6RYJ)%LAgmKLXD+*oy5BUWMoIU?r=g&A>_5MB6L6^L< zW%Bb(0uIcB_&tjlq{c{bwPBteV;IlkeD~SKNI2hpb|(_fb)U^csxgdziA8FL)EenQ zq-T-dLi!`pCrD$EW*{v_T8Fd~=?GFDQjK9e7mL&ksWsArNY5g@h4e?HPmsnS%|Kd= zw9YV|$9Iaa;JVhUI75CFXUMPO4Efbuq$4)iA7dBz!Ar9Y-oavJJy-i1Ztzwn&dcPCp_YL&~R&{-KFS zeB1Xc?62}lx-1EkfbptNoF^bO&MX)l7NO3nDJe7xrLqAl z`{c9osSL+(k{Y~jlm-hlvy*9lc!CY zG6^W-#*G;>derb?6H<;~6C_xWwPB^X(gd2hlQ))nq-T@Oc?b51f|W-$ ztTES^scKbC%F2~1R)BAFY4JCUDG^Oz7CV{qC0R!EV@8i2!RC_&4;nbks5qFW($u=( znzS|R)H*YD+o}|hARFI!Bq%44a67Fz7(NUX1`irE@W_S@=^N70Hf&f&I&188sVeml z`2dZjOG#pZD>v#y#3mF*j~X^CNhQ^QiS!NWD&5|YZlu{2T;o*YFCqlOO`d}EN< zSRg-p_vX~43uY%zo-kgGFP|`F`n)BnTleP#Xk$71H!Y(SRI-|)Cg($v=*H)xMvkN) zk|rCFDd0(lo%vq%n*wm?0CQl~hST)uhSvqX!(4EHpx>C@}eB`0WO*_)OvS-NED;w6hA%mrV6Jr8Ztu&T)A6!54f z9!?{L4s_2<&mJAK*H^`=HR2gpwJ^RvHSj% zl+`dPD3o-T*()$a4vAeX_uWlNSUUc8Xq z5CX0wwdy=E^#AB1!8a1c#_(fDR$)~X7DN^Jg(#aQ+h|(3O%t-_#3>_KUZ@Jq0-M0xm0J&(}bmN&Z|~0^clbCyS=9iDuZ^gvf%XI?-q^k^Fk{H z)zsYAYi?!`XTCMT%(=bpqe9yCUsKMH5zE)~=MPH-e>eF!R{g=_lYd8Pw;Olbxy=cl z9@h>+wchz2-;`S4zeAxlPRhYIqcu53({TZOmtu_!I!VR`C#m5^!&*~}$xjWimKR|9 zQv*~#YekuHKT0(p_w74q1Fq9l3>?tEU*8XVkIlkjNN|=F5huY~z$sHDsCa8(DRB~N z-tF2oF@-qY6S~EB?eg~ET^>$BfH)_t`~Y!IsN+_CkT@sIcD|c;3-?Vwl766z#ahB26C@kHPp1yJO=B=pOnUS$;H#e$^x1<9# zuxaa7;@P`)tKGL5mx?z764(N{YuE1GnK(@SnjD+YcNX_2}}|Pv<@6NgiW}df>o*O($eIWOAq7@9+Gz(SEa65C-1gwM~8R0 zXh*P0KA*V~i0jfeY}yE#AW8i6u2}>AA@gDvS6&}Ef}^gp)oYfo zOhvQg2*QwV;Pt+P`t`2mKqqm{u)JpHNxZpn=KQzIm#<7&!^TBCA@ld`%jT-jZo}t{ zb1|qaUqOg81TaNZhu4ukSy?#yKUunH@i#8aIsieJqB1C0bV-n1ixzz&Ev;I$4w4q- zZQm-QCXDeL9C0BS%#p@cu3Y7Hdb3yx6ry(9ggTKqf01qtOp|AJeWP#$wV^@46nry( zA)ABrz&51^zN=mPQagj7hP}r#N9N53oaWq>VmfS!-P_7>unRz^R?Q`l%R8agK}=A_ z=1ma74h#bj%9}F>q+GUEKw-2c(Kw(m?sn|lf$Jn^cg&eHcb;w$A_p7|2N5Nysm+0{ zuyTN%S>%GTP0|0VRBD(6Ip8e}@@tLLr)JFxw@TTsSh-5<8%pH(H#c8r9NRo=)@(v8 z5Z**XDKt0D9!zHACem6sQ-~36v514rftqerrK^qhCR_?ByO2DC1m{8|P?h}+!V|T; zY6T(|_E@c}MrRP@0yIA(dB#k(jSfqXsSLHeX2q&i07c-NW^TCFIKMnOd8P)NALbD{ zTe(WDGS?tlPuq|NYI(`ilHI03Zh`1b=mpUBDugS6b&w<`tHSeBzMRIEAse>50Bjbc zM*yaPQc}>mO2u(&Q{()uDN{(*LCInO1lB}D}Y6H&{X z8kKqDCrp&KRdT7^tUqVEb=j=IZj+*D2Z!ct24!EX9>GCmS$Bjcjz~Pr%FU(Z4 z?Ade7ITpHtCF(*8t(%MRqkz{K!TDpxj8o&(1T|4jvDs}4R0SS%=i2k;oAd1j3w;Zl z8aXpZlkRvC5If{D;8FI^R|~KLnKXK|kgNpYB$2vDQ_c3xvFFY+=LP4_n~%10$BhE4 zN0OkT_nEWIS!%X9$2V8aYid-D8a_gxG?O&|gC(I;Gi(hQ1)3nHhFJhqqwTTiPBoc? z)YTN92K3LWnLP(K0>HAQVZ($ZTE;3%O{kox*(6na1{U|xvzi*^Lj`OU`(kQ(fWpda znm;)(V4Dr{Omldbx@76H74mL9L!)gj+I|KJKP&=DqX8$Qt30I&QSJns;ewYm^3lRq@1_|ZdCX&V$En4Dr8Xj0 zI>*5_1_?{15Xj}7PzbuHjI^~70w;G6%9%VFq+GTz*DRwgiN*niafgV4LBgiVlc!A8 zEkfjgqv2rYA~ls3NQad(NSNhgqdsTL z=nh++4mOL?BLGuCix;DHY)vj>kg#p!NK$pVgkDHiK-B`!6&|dmOBf_98z!)v5`-?c zTW6`S(D|>;1!|$}bYdz*kT7-Va6-z|>2kmcR>d@}gcPtgx>I0_x%OlVJ> zY)-b&6~+t}h?T0A<1NtY_ zOq>iG0bp6LzI}xxTE-@^8d^C_vq`EpQ4qsPt2kA@R8<7d(`IyC70t6Bv|FxF1jC^X~o<(x)1BFqNpOAI0s6K z{6(txZX9!?U>4&8Bb)$N0LEXeN>D75qFHi>QEinL78Vs1t73nNU5ZE`5G+B30=ik^ zD{YHiI3aGz<84MDP!xLYFU6@heuXQjt4z@Lm6~O!v5E^wLnBE|Nr9jd#w_)f;SyIX z!z$&znTe(}qAJG?)$#&X5|@x>nOTkx0je$)6q*8Qmz1(rmD?4V#{+>&0`AdJc%dp< z7*^4x0#)GA)(ENsH(Sdtc`qoHQYEBR1->q*%D+@#{te1a=t}|Kr~=)*=828qO=$ev6mrd66Kr6M7%xn#kGcAimh?%B@1~!c=GG&{2UY2ra=4hvF!}<*BVyNc^90``oT?|0(_`ZeeS$h zkNs}c`v8yn(sSp|3mvxVM}5>KtKbsmAG-h>*EVtdxqfLQ8f`Q)tP5wuFR;fAq!`!~ z{jz=5ePy~hQ5Wmv<13gN)SING>wS4q7o$*bSDeLO_c?W5S4ZW=TtsCFDt)N*35}?{ zXjT@U#ZERU_;R9hqb~T-DCp*&IU~SQ9}O<+obyxBQt)EU3f z_UF{etpjnQ^4uBoOq54E2DO+0&z?r5|EwQe_;X^=UQ@$7?Q?6Qa_Z&U7wElDDO5(C zjXD>d6PpVVJp1wNKNma?9Yp0sqY~Trr_D3b08-~;psl8cA7D|a@t^ad27b0dGQOX@ zA9sFE<5CdZ>||VTg_~`cfm?ZZ8`i(_TOC{@8!1;O?Z4ngC2m?a{?4iA+-_LSGx1eb zTf=H~6xRlCLw+2$@!O#OD86mFRenS8a^&(uv#kwaH^Q|@(7FHypXG!tx<}3K=rJKOrX~}Up_8NZd@)SP&LY9FHAK&!BS7g5hOupnGd#wYn z(3Ibc#qk#cuX8YR8wVuEZ&6*3N8E3{9=9{`Gm^hy_B}F;({?yHKsHWir;%as{0=`8 zg>16Ujw8cZXosIbMAlztYjjqQteIio=QL;5OJ{R+mWd2HRYA$^R`@w8sQm?<_0idQ zoh{PYcRJgvv(q{&&{?ImXLvS3_3{4fw0G8lV{+tqg8 z)*v?d(G4^GB6il;2RS_E5%|J|Kv#3l&(dAsjRM{ikOTZ7gSYS4j@*@ZnvY!Yq&D!R|Z^U&Ej zZYg-@-opC`;T>DVz6}4)47R+55=>90>{4;+?IMRej-!7OoX7XBI=fVcLd!wmvfmrj zy2ET2xN=}FdXsh`^T;kI?T*>4cJ0jAxnqYkyAdp>twF1rWmn@aCQs_+z5%s0WOrtC zrULSh89R6G*baGbN>7*W(q8189;(uUa!>i$+fgHiL(_Ze>`_3@*hO4)7v_Rn2VyDu zngOl|==&VW$zEsWmIY9=qO#0A+cS6XCi3>Jo3Skp)OFC%ik0Xs#Jq6+T;8*Qg?V=* z+#4EM`}Q4B2h=`0YmeHK0TLPLIP49qlSFC+=h{fAVNYISqd;GB@X)~n2lr)V?b(y5 zdDy<0_U>A`?)oBJNZ~b$S|&oV9mJ8xkwb?L9z3uwYfq*SfbgKR10sObRj%wf)Lb*4 zB37;AnRC@odq7*b$V70ZezLd*DgH8~346#LGfd;*q1E0AtvG=)gX01<=BF_#KE4 zw{1ehUwn>Ofrvmv2s0i^BUFdBX)D(9-wKbXO+fb_0(8f}c)LmTlj7-zaS-?pse{|d zJH<~6g!nlM>3it4TyLqxkGo$$AMg3;0|yTJ4q_ZKAGdh)5|O?ZZmwj$?G^y5b-~iX?ku~Pf_$7969bpfwt*7^dut_ zg=if&VBqY3*hQa5XAi$gbX_2)FDF^sFLTEM9CvO(!<^FT>gcLGXQyW>SJ_jr7o)~i zXrZC)t>)IE?Kly~VLnw&OT!lBesJ#2>`NDm=v;+I+-P&7iY;nO4g!*`n>WkE4nyNC z%b)@b;8x<&Z0&5sWM+xC(|6)HSTS1;8N8Wi5f%a~b5k+dr{LYlLM=b+O|}q$R=X!X zceo+2g0!Kr05e=|;PEA=YMF4w>ge&sTZQ79+7ZU!K{)5&jSOu10~?w%*Qr#MvQI}v zF1qNzoiZ3JaL%H;!QI9|Xi{zPr>hO-x*9YL*{KwB`9Ub&8|rgryQUMGav?vt(KisM z!oCePyp_0ajk%^8F=+}WN=0;W^thPGu__@MIxi89Zd(G=fos5SA^h4p1cNj=;Dd2q ztPHUA`D*@g2{$zFjIQ9TJlh5H1A&T$)w%$Vb=UCJcBQTH)#9UapOL!r>_>|(qWwVw za8y)A)YMhD9Gb$D)Edg2mqWA20mrNidUw=Hq@_8~;u|;sTjM}gDYi&Xw{Mex1p;bO zKGhc@!JC=rgc?^2Gse|SiLM6@7=VTYF#8nTYeffqawArKb3i!I`0NDcd{>GbMxGW1 z;jYq(s1<6tV4`W0yc1PlOm!8&TcO%~WeB2aEDeaeJa#$GapfkhT4>I%WQWB;tK{=v zdN?7e55`SW+>QD+`de%1w@ZCX&2RMHGOq<67F6mRgGG0hlZ&(`;{~X|U0M%~36@$| zA$NDBMO@6Jl=bCR9scv`sfURBSl`5a6Ijfy;rw}_Z$2(p&c&Jm+qW~YmwU1nq73mQ zVRk^jetm(n*jya5$U+2$v*CF)Y>_uJi`Zfqb1cp{i|83eIApeO-$k*~nyFj6$nFWB zAuLRvYV<{6)fFkOk$t#e{=x+d)k3wvn!jK^POj(8RddZbIP#sPX5a{R8jo2g;y$P= zA@{B@r90qbUOk&1J0Dk11;sb3gv!^Vp$V#S7pM?fp^(#oa$T)&@80w3%){|FTJq_Z zW~v!xaw$1wxCvbdt6DfNueiMVVeejZ=KAJZbLP&8nqz`Pb7qZ}i<(j)ajL8a(Mg&t zZB~qcz3dIty1?-R2Wl{rtKG)vtFbjb`T|xK+RmkG6ew_d&NgS;v+$of8V`r(Fl{x( zLTkVr58N^NqeqcZ*eN;Hy6CNXTRnTsikVe|GYhDJ-7}||Q`DqF+O{i8!Q+PZU^S>z ziw2DL?9pSUA56|PXPPsj+y>PoTenyQ*~p-BO>U4HWDcm%T?A&Lf33|UD_<&(npS4= zENAJGCEififdVSC%G0jXXLCyXPigEDC3 zhA-kNT&^8X3WIUI*uCDnK7D;!`ug>p;c#xAYOdamW!17}nu5Na%R9!CCqoK?4+8pn zGH>^O&;ti|m|%SAL7brTTFY6xoHsu zF8iILRvc!#z?JL7qBm(5GLP(XuN^Tv)V7@rf2G+}u)J~^R}a#vdl%ZpL|=JfZc{|KO(Z&v=Q=NyLz>Bm-ZsJn4u~yDEAIDd)xoxk8qJYqfUkba>h2|qPs8` z+{qS8Au7}~ov3Jc>{zd}at9r#yP|fP8QXu@v4hA6hH&N#)D_Us!bRvU#5@y0PzYD_ zBe;Ef@unPC{`M}!gBc)!l^>cX>m;!>f^%)8v=L8UVxvG`vNvmQ=3YkbpddVKOryQK zmae-#3)l5|30)hRYa%rAy|_=XKPzkRUM|~y5CRY$bap@luylzlJ6=L}&3xo=TDcx2 zeS2kP?f38B4i>-w(6@;Uw6$opK?J;i4iU&8(ar^u7ykFF{q~`Q>Y&=c6(q2NfEY!6 z=mL6xkp{(+g1!Vlk%wGj3cAknu^A6)A^mVNBVk%QnM6Ka4S zwFPqV4HCRYukFCoA~+c4ISOz7upRi?3ZR9J@H-G8zC{QPfAKkD1tJ3R zS1{u~G(wfNO+e>yy#HUZs#2+$q>m~-$M1qXpxVP6gcUzXatjl5I*v_OcTqmaIb zUd#2CTKxDjhWmD&pU%wO>)VTQjBQ7A$B!}sFoa=$;%p|A1}Y?b>yqVY)t< zPf_$7969bpfwt*77|c-Ykh^HTPait_AGXow z(b>aqQeAYqT4W)64SOv(9X&H{Gq>S_*fx7BR)PWS8PH?xOBJyW^L9*G+q>eC7>G_;*=rWbMLiJNj% zH7yMbnf>70o!RGUU*#%1;(H%As#veq=O7@#vRNi}7#e3;1{Gic-)zmx*3L#uW`e7A zs12hc@5Z7pIe3xSonwwUZw@NQ(G7992_TZllb-IJa>-0;N_qz#P)m|-!v!HrC0 z!WF9vIqXneBZlLRI0SdNO2+GsxcP*eMbMnN0#|bv@6%C{i!M5FrwqmloU`a|@a0z` znp7$N)mV0~s6j*q*{Q|mf`d@JH`FKdIE1|qO}UVteDBm9Yerv64Zqo1fiK6Z5tA;) zM5%}_jvk+_ajZ&Eht5lcquZ9iwEHr!TL`~~U{XvD_+Xr$odwuB)>X$P+|ayp(7;!D zwhQLF0~HOc6#?9tTE;6;i)@XrW*?QWy{J3SezfQ!+D}ZtLb;5nOPAo&xy6gIw5y@q z`RQC1IpCPpv63FO5@~4;wD`Iw;JO%4)nZ#Dr`xwlzybj^E1#21hy;a*PN+|dIb$%u zR62MOQWx&zqaOm zJ5 zBjW3(uVTIm%x2ec5o;!H9Z$8VV9kKrz~uF$Hc%H)hIlVwHX%N~D{!#fij0t zsWohoOD`_GgjKhjxIk1SiyknWn1GIU?K&$~S~GQP7uh}GGt?d&f*No!Ql$7OtIPD{ znbUF6SxvW+rzhiD*iVf-T#Wl+ zxKra&#>F8I)I6s@uO#7MaY=EBDp9zrRqQL)pGM+B628gAEu)`vuE4qPlzp;Q{k`lp$*(56!zI)ZO__(C>^&AS2`7yQI)2P z0lTB@y*4QOUt$YCu%;^QD*VSo#6>}fR^$DGXiW|sbxQD5714B;sKMGA(c>Z{1$A1m zqAOKIpF9SCu^|^D+$Xm2OBl7&fhl`)WscV3tx$ECC6=D)ZH&js&7o`hvpVXzO ze?K5J1Gp5;ll2Ot<=cJ!Xn^|L9}SRS0*Db9{$7DM{o;@MdWr!Ri%6VK(#&A@`RQIFGyR2uL*M1O7q+E|dzO{@nwgJKOVj4AhAl+@uCb zOz8I(LO+eb-&=s5_!|c1iP%eZgoO8t4|;%d;x+O1vixZG2N*&>s}SPDJkb!CxEBhM zM7*VTeL%I3=SSyT7xORH0R{hsC>hQse(WJ6S07+5HoO=mZ-oLIm)E*=b-V%S<0`49 zuitvCna35}3Z}%^yr>J&LY)HeYZD{~=J5u3b%5-bAF>EFtX~DQ^Dg8?pUT?jjnv&Xs_yGuyDo~H*UIwy6ibjLD1AEFZIA*pwRyQ}8lbf3ponxMl zI)@vyf~mV>W}C;Z1RCr8wd#Gx@RJBm8II0)a@M=&{4#uFs0Nnf{Em-32W8+}f)Y8n z0TaE>*k;f9yo9JK7|hmb9m&({R5YEERy28ba}IPj&X}|p2y;Dw_L`6 z_WR%WFEH?#pdg03()}IMeEZGLNqBh<_YvH4L}{=)s1ozd*C*g3!n67ij>mU+tGmFE z{>|54n}?4G&)_ZrPcFkOfpQlhcYdwY27EzqTHbTLBnNSj0El-b@z-DJ#2*VdEv>uy z1O0^eK%lG8f92)A060~v1p#=cOBVoi?)*xp7nAXw;7JV;k}{;v_0gN1Uw^IB%P+pL z310!8;L)XPC6qTn-syr)q89{-FU6O6xgf*iMs!7VLM0NUv+7*k>E)MScy1Daj@N37 zt2pT|+CqO`eBn9#G~M+AG-#l7T4cu7&}ne|+AC=7xqs;eplo!Uiq?YlD6zfQ1?ZV) zmg0-MW1_hT@#yw`-?{VaWc;~*c?LgZcdc>E)1jD?CI-u(2wv7;PtO9_QBBRYI)J?c z1A6<--@B4}?wMzvd^!&wwH12yB9Z`HyoxV?NVU9Pc;R0F_+&BwF&eb7vRy1{p}a2m z3&L*_@a0Y~ya0+%Klx+58sUQ!lgW zr=NVHVO1Nk)ujNV5vJ1#-KUC3R&~IytTZu>Y76rG0nLo+gb4vS#4dox z5m@}BC)fA7!FT+g@_NNH5s&iA0L}|b%o{Eowd(Z(u{)~uci^MLIfH z4N`u+6M5FUCC|af+s`31r9l}(8Za5kI5ZR^mtF?_ci>!*=b9^62pR zjOgqK4X#k^^ZVznB$ef!5U@uz39sX*~-RA4+j!rR`+($K#n*ENp=d?CP3 zi0jpgp{0jp?V204SVd0SKQ;v5`{9v3eS%?#J6drXI6{#+5)&y^n*sYtVGrqIb{sUG=E;!N(pw3iy3=Y_xyj zMmtFA{%2Bb|Jb9CY#{j$56}&24PgX=_YgNB<%1i5&ja`=k2riCN49{AdF!sKj;cc? zB?I`eB;WghJKKoSLhc+6uC;{v3h+lB=`Y|Vnsri#AmNnD;9)R)IC?2~82RJvRr?yy zeuzPIvkJ|)WeO902zYAI7e-fBX3}%16~8FeU-pJ{193=2Zp-26ACR; z9ISTPLSH?u+FQbr3G%9Y4g(GhR?bncQ92_1THI8+)Y*YDY_C&UZ@-yb%DAk1Iq)TR zNZiV}jE2kiZ@u}(Ycm;_C6A9~Mmx(r{IjMZ{`Og`bu{MGJg^j%0>BZ-tLqLSMOzJgrAp9!opG`c=xJ)*mW%H3O z%8O^aW-~6ssYgNrHi)^2D$N4tskgHkmtmWav1~K z6Hj!@XIv(T;jX;;JZV1Fu|qG$WinadWmnzct1mt$m>t^>Wn8AWX5F`%)2D&jvHhb{ z8JFRN2|a%|vggk}{lpU;J3RVO3ga?)-wixNJEK2prM%+nzZ(9=FFgCcl9gWW!Xahawjb}C@c!+@UZ_=GE|yYIZS?d>^? z%RGA#NznAwa|Oa2<#q49cLA{NSjJ_#4>G#mc;Z~3!eCyLk@57i=n7kwrf&z}LyXJZvE^Ep$WI%l7BX6H zb8Bn<(tt`l>JAMd8IrVCKH3(@Hw9899Mk6|Z^G6)Jx5ETsfn3*kgYQrY$YB?+(uD? zP4rxhE)ukD+cvFLYkRnc)k727fi%%|8DX#)Ci z&_B&H*br+Y&w%d0h^%X|D3Asx(!iux91;gcnh4KqWwx{foUgm8x6gz|IYbTHpuSyB z#5fdytriCXeS+>x1`^EPb&FJar1X5?#A=a3+Fed-2SUAI*n#a3BhpDqM72~c?5Ti0 z>5+yvrPCH@v1qrGA?U%R4X)i0O*4hCY5y{$*+&t!Nz&Z}xI{Be$`Bu%a49?rMhi!) z3$0q3E$rt2eF{C~zyi~NMhrr4tSO7IJwB{k9w4-4N9C)`V^$(CXDHs2t|> zGy|dbrQQ&a;M#0q-h!BmJir%Rq*5qnZ`49`+Ne#CCFEK9Om~)`(TUg8e%O<-22`(} z@5HHIPhXEx1|r>`wQZAA{*b7d9Xxg+hyaUwj@b%(X*jXtZ)lu6!QUR`?iv2J1Hvn8 zoa)Em(bJU-u25m(y*g$d#UCLisunh)vgL2J{>?jRl8Ch zwoXskva1n5aa+-2 zN*z&$%|q6S0K%hRs6TiL^}$mo*>P@TvIUS*hkb{vgJ%&m`Gg_;g0y`2>J1;?<8Q-h zq;NYX+EE9s1BFI&?_~r<{Z<{ok7VF?Fd}gwNj6AiygvT7uXPvr*4m$A;HNDjv6YBP z9Wwbj-G1og2K;fQlUi{;=t&(lMFK=u`>n%4L_Pw*E$M7(k`&mydC(+sw z@G&txMr}JHQyT0nz&ruCw(dJ*AH;XqS_B&EfIxYaw9R_jR9TgKGk?NYkK4)-8Pp!z z9FLwt0L7ck+j0Trxe-&wN2Fpah54P^vIR=F7#f4RNir{BJ9li`1u#3ZkJOGHZRS1- zRb|xh3V9i(e}Plk6n-s(B)#&zKk-9VK;{9GKF*{Q)kYO=wwww;vs*WxWIQ2i^7^1# z^^ur}gHQ(rN)wA5Wzq#LHQWtWoAI}PFsFqSrA>_bBw*=YG|CIqxWHTiIGGg49w~BQ zhX5%%aJOyqru0Gp`lJ&cl&8@WkP|T8tG~cGN6f<%Ctx155A4^?mawlPlFb{}pNW7A zyCZT}?2(g;!Y2U7(dIG7?}#r2~x3sv|ye zPM(wtJ-J9naBo%M*lMKOXnVyXW~yyHFZBX0cmjGWujDWx4G#Q~mef+?9J46Hx@K>7t6@kEI zjy)2yKmOS9Uohie;aJ}_#w6d!u`-)uTEEhJLc-`v3#H!~~H7+(5D$4=52 zehA*U$+6#o(?#|@vYQ>d9eg6PaXLGV>=wuV9h?@j$vQiZtOX&jV#dGvhir|`=(t)s z_I((w$a?8)uFklv+!9PFNV}C|Gx$XIg3kKrY`o4E>Fhh5?bX?7ofYV;QfJ)m1r?5Z zWbPB+{a61YJbsve)R3g4VQN_QaQ?h4e_huc&)>?Mq$ZhDf?wiCZljX%6L@0*H56bL zz|?4K41c#4zgDLvm=jF^;s<1X)1c&QjOvMlhYS(W%HbpA7jp?}j>p|n(yTKDP0koJ zcnCi0vq`X0fJToclp62H&*b?g1*c5n@84C-A2^7RLM=#Y=4dt69OnbE=!s2@f)xV< zKp^moccTap90OA3xWIT^YMkK55873393WtWlT6*BM`=uO?6|SxeB=D%@q<5maPd?P zRD&#!Gjo^=7Z@`Zy{&^^@~_V6*B?Lchc60)?4xwR1@nzI$N0cnQ=>T8PoM_6thtS< z;THJ!Lvo|Xs4@0fSaHqRzWqM#k9K_?JvG!fObu5f>`|kmM>jLd=YQB&K)^q~VjOI< zO*PaHnBb@pBSx8{?9rf8k=|RwXT7>Iz(g0#LAXmg z#FrEt3b95H!*3<^#mAV{q|mQFAnbvI%t1Z@i5`kTZ%WTzc<<{QWUtf!bD$3d%pq3N zkR*Q+eokynPh1Z*1wcBZ2Ks^S8xl+!G6Vy-`ectDJ$sRaO(s;o;K!gtMxxN8;Gn^S zG3f0fSvu5sihxD*K7_&|cJl>y4WJ2?St6!Ct+|k^0cz*Wb_A-x|;#j;Ll)LIOyr zM4xVo+(h@aKtuJr-UwvB(=Fluu=noKRaJSu@1Aq5y_0~bRb}<*KKI^JEl)uk+Y)&y zB8VdLC@2sR28cvNoc0NRN0HeY$@meXt&^hUlRQ z6p&0(vF+7#dVPQGz(LNS^1(xpPLiZbdi2#sk=v7B8aQa+pg|^k59v%N2l9Va!a$?}XLD4~Ka4=-BGdNE2(4mY$ zw{DF5ZQuR_Ut+3>`J?O1QZr4$%n-AFLk2TcUEa~BPv1U$f7^c`8Auibg+LARpkY7@ z7WZ-bl#^_-kZeQ=H82>&;1^8jt$I6sRNt!K_C=#~qkx*|+uc|)1 z$g4Mlaqznr)C>NLFZ6JE3^H5U8!tp(a9;F#yx2qcV7%c`;V@#pX*>kT?evi6+~>S* zFLZ;dC5?P&*XO!E7kw`1_MGDX81gF$Mn2o6t2~W82OwP8+g;o)37$OLRdpqnFuhB? zE}+IO?yNh~;obZr(G|XF&J-w_cr|(a!)wcYSsz-Kj$) zv14ebPMmGxuXr}{RD{#de@_pTcz4X$v9#{0iGqGA;H#Q`DwsY)&Cnluv;OdhxzV}w zcT=Dm519`c?HjOCH8sd!mAam;Ap~F4`2#&8W61Qk#*8tf6%*+V08|xHO`m4+O!*Lz z^WJ!C49zf*3@Z%LWJ9GgT!3Gl8QzC8K9n(Ju{8QnuqV0E_e{}KrGt!3XAJqm^a_YW z-h_!0P3Po^Ks_~)!8-V9?li`b4KyX`UB+rFF`3i*-ju0RraDvI491ZCv_@rGW2l*) z5Yi>ypMte1QyD`FX_zBN(#?2cqcI>Pb0+Ke9aLisNenksrbmM+6sjir=qe^lZo(@GI zJ&t2YV&fS@J{CP}utg@Y%dP|S-$Br56j%5t_cF@b}Wo-zIF=~_xyEDdP!-9+< zc>@LvdRejvLQZsM+KT$vu1a z?$fuQ?ich&OFc-x93A2eRV4WvdJv8DdiUwm&*>K>NxkeNI68zei)?%J*1dy1eRbbh zKgN)M?%MTv^}OnKyL&gHo#Za6>)z54dj0zLl`-Uc@2^k`4Ukdd7_cj?@P-i+)$q|*%s@_$v`39I(#A!EocdZ(Z>!Cl?8 z{P`|q^8E8c$UoJcF=TGXP8~aS?%XBXMRg6H@9K1oliaPFj3L+iKGmUP=S~F4iG5#Z zMvbs9k!|AU&v%tEWJ|kt9oltxs$*v|kSsb2f$HKxBV)+ic22u;l1&zpjVQs|g)TCN z3~Q^}I_*@4s;4?2zau&(M2?IhN87e0(QS8|%sX`Czo$Ctj*KB|TD5jt2W{KA?Sc;N z6uf@B4l;&(^mwb*(bi5|ev-x*GWoH`A8(~vrL?YU*P6WA$`~@@G4+`L_+zbH9y4H+ z_J1t;nDe;b>hV^(RnS_-ko@kCsz=j!$QY9Id`q{b_vmAfLd6)8)9sO#kF<=o3?6N% z_&*s#&h~xy;YZ|YtR-Ve=}_ig+=u-~9)3hU!Wc54MQRK6Fr&!a7HKUQL%!lSW5|&n zEtwAsIpzKP*GYH8X_x=g-L^Ul3DM z3S$@a#aI!boCW9d1rF5(4mI^c^de!wzXg%?oI1xERGy|5*1tfvTf~DHWYK~&$Y8s4 z_MAQ!g+!jjc;c0wJ$uf9%Q+t_Xix~xH6qH+xfEz(1%6>cVX8d5dDaOZrjR!oRh>Dj z&qfVd{Q}JsFF14Ntb5kwk#oL&0brs9#Mhj&v2&^U?)elR_?J$fVbLs4((+T!2Xd08 zclES9b9r_TR4`Q#+I7xEd2nw&J(om!y# zntRSk=#@?}s9=YFlxHbt>z@M#^<19APxs6{Xh(Nfa*E%v)3G!4&-&-i(zkgxPo2th zd6aUd-r4^n;+^GZG%w|J8krI@E;*%7rR1fau78HK3h?XXXWHr1Gjt;bge;=`yyvvy zr++Q?q&^utm6})Y^sge7r*jE+LLWVqMsCEnFB9r_p}#MW9|?jOKI!^o>Zy8pbRd^< zQ*#rBA@!7>cZvuQ592v1$Is1yR-X)nxc(_%rAu<0oR}fb1r0C8Bi}oj;9c?F|s@Qgb80(2vrl-Z zfVoRK(IAI5d_CLEPC4O|MM@5>wkSKAUGId%qyjnAD>ws;KuUJ~6U~4mKJFY(&5oad zH~WM>0Z4Ay@!0VO+2Dy6A3I(TGFoB5F?FooaRO=1aiDe29CMB};155McP#CgfBYDa zLEx>-J$BzQ8ev7wQTJ%tF)(^7a*w7S4UQcp{(X$bm#93Ib>wKhqcpt4>BH)&ULJBG{ zw^zAQ#{@B$o5c^daKh9nK^IPf4O5vu1ap`QWT1#cWa1E~I7BU`hAaldI0w8Lr@;^`V&f`2!tzHVDE{0zM0(;gX9$9j%BYZa z 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�y{QxRp6+Zhw8v2lLJMf2A@(K69SNq>Tz?T{z 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 GEE3vd0X2CXRH||c z)v>sl1R`RU1)aqcX+z+Vg`}n^8J9V68R9CcWb8N94j64lHXxEW(Z!taS8Z3k zoESWkiilH_(1OgkU#d3iF1LjzL8b{;2}@;!jL^8f-1c?Y2P6btopUy5XG2vYj1GAm z1FR2u%LDzoL4_mG*CPF>!6Kx&Hr4iZAX=On1V}q8lF?NWMfF%|uKtWzekKx4Xio5I zEy-1glokg-NPre1-L2NGK#*XKP)jjitsU=`f$~h*I#&;>yywbV(cTaN0b*3{qmjV~ zK05IIMM>Wt{8}Q~Mx9Q*_EAc^=RA|A^gp76|&qnIjEZwR4Qyu1ZfCyLoNVhJ&2FsXU;QRP4& zUnKf?R@kJvW|fi*6u7Nwj9A2|g0T;&=A+aZQSiuu$*wQOSnUFrOFY5roPeTd35Sm6t0=>pRZ`Jna!T z+A{xyKr?T9azKF-D#sN-sz(|;N8s8`VAe2A+{!X$^7fqJc>gx$?&qc9+!3i3hfVNBB8E8HnxKfh!|1|NMh@R}PN^sKrXhm2Z)P zK{xd1B|KjVk7ht^Kg6Pgr!DMfsq(NP;n_t58wg8OsE~b7flbuQFaFJF^q=+4U;d>~ zKC1A+o@p=So0Qn@#nxChe6fRwUCGPX!^NI5&YxyWrtQn*EoCqNk%difPkZ4-f%$Dm z0&8Wz@nSNmYu}OJR<2sPs>spRxQ3LUIrRmhdF9ntUzJ&J)*Gf_fwu1hUwGUn57-Q+H%}NvT|~-ldPTnP;5$#muD-M#~d7eWMT8WQ=XqX z4T{(zYkRX^XWy4L(y>W)v35flNQqThxAe%uhw~>-nd*zHv^MNQ5iE!#Hpg-Z@|#PO zrOr0Q9$DBq<+;g$9BQ{MyV_vQelE5(FXYr;&c|L7zu8XoDGw``V2VEYY~pjzO@<

3^}NYf)Y&d)kIQ5> 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񤿝+$gy@av^}|s9ikX~f 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%0DWx-|f(A4L+5dyKIkPG@ zUqCv?>NH8ZE=)yVZK}>xcW3qzPf=Kn3?FU^HW_|Ixpy~(o8Z6Yt&L`**@Og*Z*H_3 zk)ZJ{Qd~)b=65!{E(vn)ua^Wn$`ZUw)O&mbZ+d%E;TJdl;%4}6eeOEG)Ni=q#`KNx zO_HPW_McsQoj!Z6XMjd5zG`SQud-{d{n>Rl0D1illH|E-f@@m2BS^_IfDho{8gp&* zvuh>KXIEdvjqsZIT2;_1S6&rfRlNF|Yg9oquekE6^i@>Q$jh&|;!1O+xeDP1(U0*y zx$;U?P|a^H4=+c+eYadj-*!0ye))@jwjTn1dGn?HE|q|LZolLb30Tv=uLK-c7Vuw6 zT}vqb`BE27QP(}C&Lx=rIVX6WTfF6WZj27Wqrs4a1 zo}eS4DTGL9WqGP~v@Gl`kLcBOZA%iG(avGir z6P^W}FtKOiG4w_6_bLA#R<&j(KVKC)etW7kNT{uyO zhlcfr0fpEx#nDesnrtT{^At-4>?vve38qAor%VneS56Au(!^j~Fvg5FPsgJsfjv2% zG}-8nom`~jo74p;_!|H0xBxLAXGgPAZ`4y0CrZ z7%LF1GcjzFCb?yh_SrNbEK&3z_9-*cxFwHgP0Z3|A`@Xv;W({H6hpx%^OPM~c=GXa z<5&v`4b;9{8qiW?2{|1EOanIOi(qjUsg`F zgB#edTMXc-_#{gN&4_>^?NIwz$hOhX`K65lBL}!ZDt%GsLHlO&12;19-InO zQTCNlr;m!B8ugT5?2~~jD+D0cYP|}&y;(epNAjmQk^nQ7Kt9D1$o%6h`BZr!<%RId z+DSV&dh`*#MWVN!9odCdrz4*e74}xo z84h~^_wx@wBFs?h3J2MN@q_Hpng4p*vMGaE=_sT$LjfV4ISC2p}LjO|$e&i@w>_J!7s@^PQTE-0J4>0svit&5eP(%^adq zfhsS^HWwYG@PKfuA{n4sNui-8k@Rt~bz2v{Imj3q@jDGkcF@|K-kb&^WSWWZ6s7!B z5RbB#Xgl0(Tgd~uZEHxn5xbeG&44|aH zyn53QHdTnw>l@11L+#pv=GFL2BF*WhZ*J-Y2H9ZOi#cWURCZ2Hq^d3=^y@ zGRH^)&&=!0n!g^dM>XO4!n*ZL6o!;kT*G9ZCHW-j99{B==*w5g(D4lj#p~DEb?H|E zsD-44B*z3SEqA#hii=bGK|gg}^vXK&YTC6SAmuWY8iM2vsY3nRWZF0b)xEM-nKv`A z96Bm)Ed}Wo)XRNF9*xY}qH=O%*0Qk~sWr^%cn$k?DRE_y92aDqAnD^`yT~r2mpfFw zdQAX`z|0zQd9ESRrCpU4=yE_+wq0b1=8xy8m&<>$`t;S&D&@6IuVmvcS5^o>ykMT4 zM=y8uEgq3H)2`C4WQw3$wKB6ZPaer-DleqG5MCFU1(swDv(?M(-mtRE%4o&P6=p>a zC{00k01M{Db7$Mx^m6$>uOiI`WsopK2{6*GEb$i3W1|pKGR#yjm;G!dDJj{KY}wMv zrNQF#qWnUwPMa6bi)PQ|!>yp`clC0)FJ346WVCoG=_k{RBA~SRV4egqbCrM*IKHju z<@Ua{*e>q8C|GD0q{U7!TOU(=-Aq?6SNG`~i|nG1RX+FRz(={_t5h zjb85Pj*XJIf;<&WO{;KnXn=2~htufgYQKDYDeRHeQD2q9bl*(V>{OhI^l~*{eNa7b zcIc4O5Y>0fhWBSkDCMES8!7e_;|PFRAjmZ z6d@IFViGX8si^h8_6B>s`59vcCV$M;_NuSFi$p7Uanu3l{^<`$++y-WtDHFs8kOL= zve(60NgF`eUTN`bwD!YMrvl84IMQx}QbA?m!P8jB+!$Vun+!i09S6PHLSBNS;qe~b(UB{@3HP8&A z+>i;3fKk@Q$wokr7gzS(}}QgcZfPg8X9J^X58b6*FRi$w3QFmV)6PrRx3X{M65RHegniL`W#0-U>T_|xQ*%+!D|)U^-*fs_ z^~t#Fuvf8XYE_@GT*K7IRC^{Gm32R%(H+VRUif5n{)h+(e~51o47F?}xXbGj>1 zPwYh*p4c9Ao9nN-_&XO@awpv@-81MBcUNCpKl0+!nJ~P#w;ojV$^aU4rwiSDbMLdb z6ZN{NSEg45-~padb(C{2>D`5y=iV3Di;BH2DnAXo2N%*i)=%htQJPto@S@HRDZ}mf z0(FRo#`NxWTCXZ5+j{meJ<|AcyI*K8v=^L`Dju712{f3l?CBrd9#Qum-NWu7kL~&N zd`oZcc}mYrj|_K$3&Qiikt%L~`qG}ZXQv(&-O~VN@OGY+DsCRuuZQi?6_Viv>GQ*G zbZQ??yR}#MN(WTQ9ay0!dw1r*E4yD90+l&G-K}uRUC+OzPOSLZD>H`OdBf!w_w0Vb z`4?Q+v-hRf-7#d^noo+Z6B`x|XB*#ApHeY(Td~x;g!a3=Q@W@W$O+J^geHH!r_`gA z#zpXase1_x{>wY13rba~XyCC@w-UPP`c$#>Po*xY;@M*hrT#`;d*6^Bx%PM;~Gxjo1O4#a$H7 z$2$Bdzlo*v`Y2HrQ3O`SC~&S?zl#zOlN z#>+*!GdGw{Cq-eTiu5_&mJh&(BQw7kd+ZD?ax z`a>ONKy=^B>^2<%%ixX?u#y2$GkGtY8C)mf9JEr=+&7;cs`DCft6cKp02&XYWDV8G zAoHNIyijgo;DGz4v8Qz+zX#M9HG%^(xW*M)F7>|q#x(%zH04ISW_T{CYBM-5P-(Zt z>EOQmMjm17Y{#c8$P?Gd(t*m3*j{Ro8EEf|9zU4+Zc1ZRS(?VjZD3j*mvEYc)B8pq z#IobZ8Dz8dDJz1OvFTumTPt#Ip^{Y7e`*7pen(WZ z9eU849lXo%+Ck>0zMl$)wr3t{^(FYKF!x3MU#3BowWRTCBjZqK>Q4LSzWA-wxv5rP z`d|jCIscq|F0B%z|HM71zezc5xY4dthpQ1%zuYGRFQwRMa&S(Zd0pLa2PMyjeUSRQ zR6CmCi5ZwvsY_c@KT5g8M-P(rN7-YDQn;_!f8r-8b}94)70F~n%_n6&TCEM6TxHxJ zB*hGPxrL3Hl(fbU%1UGR4O~^n7EDDoWs}?*`f3B7S)t?scO#0|&ABpNBL=`xl1StYO^#gS=9gE*rj%sv4mWrE9f>$XYS6p$*vb?&O zjf}`N8gk_;%+e(@Q3$FCBvF~T0;f#gr!K|=6Gy!E&>A0S9zR<4}>$JMyfLXmGG)@#LArzqdnOj1TT)_*q=RxW+8a zd)dsqx;AJym@@etbur~~BY0o{vzU@KPO`J{#_GFYOH!vy-mEUh%kKd-KqP}aVWu^% z&?It{m5u9L)y1?8HQCxAsR=VLFHmW>#pz)3W&Q78O-TM#A8bmQ9*zxv7&UPh8)qE=B~E zGmycT)$;8`2B~J^=2mqvSg9qWq%%8sCzpf|kaZyMsEb*YON`RYZuKRIhss3;7j3&eq-PVm$slMu|E9e43rsDnTZ0tWg&u0o+j2sl&+`@mK^tR2MTZ zC(gXCTylN)Z1G-oF&d$^Juy>rD)ocBx)?W_WVUTO)WmIZ;>JVjVtheGJnM*&(3$(C zx)@g()0sna#Z1|eR~N%@(oV}toXJx^Zc!KGwd`*#`m|MD3@CX3s&}i4k>{JMr61R* zive@xM~BtLZ2NPK>tb46tOElGg#-jdEtF^8HPNkkbf&J)TTjPQp5)fNwPwVVFo3q% zXnQ`h(F4_`xQX-f^tOsC&sm!b3_!*6des9~RFvk)P=2~!^Xulkcm=%&pYWDpf(R;( zhVODdmD^^&0eXNwBXF!cmOL@j-THa=0OtFtn}BJ{u)#6ip%5`$Jg?h(fP_x^1i(wB z4`eG&=F%xBl))9?r}oS0vEA%>OlN&775BN=dbI>Dq~!#F+iCi3=%R1oP}&Vt{55Lr z9@n;s=!x6&qP|CXEb&#Y#t*8O0LFOM`%5)wje8W75wty4!92d`6I!vQ2K*DJl;lzG zPtgAt_9T5~e#eeGirJAc7@(`2|B#c^~Tz!OQ8u#j1F3*bqrGL6ztrPklUhD@=cpqzpR^Qr z)m+++Q%0}B@2TN*JMX;S551;_bHjx9T*G17{$FSoKPfS%eMaiXrD#uAcaDFK+5Wwv zF3wE-s1(10Y5g5R3EkW|z70$ITZTFq%nwWW^S+(>n^OD+6?|?f`tVH7KPW|CoJ*yC zzZ8A-V`}evT>qG=`fHw_OSPO+irzSrO86^be?RqImGy(v*-*F*wSK!4z0(a%eoOTK zHuX)o`Z*dqvlKnw6*Zl~<9|UrriexBDM>_*Z{(p#U-*2%IW$ zR3^U#T9y3fM0k#e(eKV3es}5cyK9Hvr}De9R3aXrR64-#iVn}tOn(26v;Qyn@6-K{ zHdez_@ZVog1%IBz@q3OX9RGd-OmOwrso?7R6yX&dr*r&(%y;S2^D1_&gQd_faZ%WkDBam?jd#Zk?%onsG2LyCPWIL_cWm!liUKXY8q z@oSEM<9M87631MQRUFkE+d1}dG@t{^aR$e^9Njqnnd5qnUvvB$$K%q`|Km-#>m@0I z$S!6l_g00O6mzYubWu@UXtk|9*)%-Y%AK5oR0^%RFn3|97;!6|yC4-6TXPk;^HaqF z02MjHP4ca#wKDflsRF-RbCtO`Plp%*Z(1|CAU{mBBGJm$idL?^wpO&F=2}||Ew1Zo zYwKLZQf*yW2dzSbe#G_kqfu*ZT~HU)L$C!XQy1394GPR@tTnZU2etvqQ3KCxov9BS z*oMAP@19w%QjLy$R^-2YRpbv=uU#YZ+3l~|S0TTD!&>%)TPO0{UtJfjgZ!~A+W9Sd zZG-6V(r>#VuBIX8J^^ywYvjT&ZmixSF5Yn)#pzDGk-5r$N;NlcT|)-_*Iom_Zi%;| zipIL?wQIrKz^yH;l}x?qc2`8OZ7!FRmK+!pqiOwNJ3YT7n2%ZQR zUxfmDo+7XZy)Puphu|M#ayplgni!ofrD2`VN;St(F`sMAW?NdC)6LnIY_>IDD8{_* z3dKUMwIyt+YOZW5G-q=~I+T1=$N^f#%}i6+SZv`gUzx>xYc`#&YN_OIMPsokTOho( z7;(2#wlcYE8j6is#UK{3m+UFo3U@!#7&b)BIh?*Sr=ayzcRx)j>4rjMihEV9ohhTj zm7H$iMptfR+HRcYt}2^_5;lCJwaPv7S79!0&6!+hZl)cAsCCM9O0LsQy6%#zYOMq* zeNPq$_qp%AjR!Q{exms~o*6P#`6l&^Ak(ynCP z>5{KF>5eL(DavP?8fuRpWw)z?!NHb8hmRhwZD`I#R6#D+Tz{PXv)EMYP;k&32=?23 zW^dupv4*TFBi~%d-dy1kdpP8=Wn(3~FW8&kv-faatEwf}SaURelzp{8XRj)U9_-cb zTg83HnpH*lrrKlnSjAD5Q6{17y(}c*BsZ5WFbXs7c<)iEpAnG6`)aV&GED=(>j^V!Qg;#dJzK#s4f&1 zLEN-KS*IP_fwJ92kD?AFU2Dsf4V3LklqI~~ZFY64%QzM#i(tGgMYA*o#wTxSAAW5raoO~Yg=oOsOGqoZyj`S$RN3|YfnGkRo}Uuevd*eLUk;( zBMb4ahKhy&z=%H7);e_>pruZ)0x62ky2 zdIh;CiMtD?woaKuOxoCIMiV_Xvh|4(Bc?9dvQsVN$o6#$=gl#5?5zAuJR};Q7X(X= zc{{psayFrdE7V$UJ3mo%MoK+)*^GN|D}N5kr3W;DgAJhYPn? zOT0!Kove=5tR_@}%|VtlBt=lKz6kR6vCV`TeYC8GA#fov`oH?>T3*G`+E-l>X61*( zJ1EqFEn38cEW>Nk*Iii;zhi>K;q!iuUnP`;-B)3uu#&w>5Tl_iL|Fzi>2M-LxgHWd zuB&2~SIBFxm6b{l;j5C0{L~S5wTPi1zq0_W2Hss2yvCkB8(w>D11y+V?b`RzBiUUY zzSo~;Ju#qBpnLm~{s#?UQ=E-vW3Zvf=K}oOwGFG$pXf_=SBEnrr~d&v%1=+O+0SdzA7A zQ<_!1s1z~DI?P6;VO@svL91_J(-37NKK)FCsn@Tb{Ic~?Lu;xBzry;cF)!Z%zlwD& z5#OQuY3ibeJfESqAx+O4x9|a~pY;BX1tQu5e)EpY@yY3bMzt-ee{{doydaw7zM+(K zovDo)qts85D_a{i6mf1i=8hM{+*i@jyqNpS?2L{T#TIc`Jq2cp#J7=dxyELsAcZv=6Ic?;$DNJqMJA0bln^z zJ5I;xk#BQ1e}4TlNOx3s9S^R^n|^-%b-z1?fJfTy-}bKp=l)Oo?=6do-|6C1p(IDt zMRGUEHPtf}I$u?fRL1$P2$FEVtn*V<&bP%%9J#vA!-FNy*MCcOb)K;QnmSdEv46zV zg`4cZq)vBUv!BQTh8GPRIqm<2vFQJ#Oh1maZXEfKZDY!G{=c~2wl$s0=Jur=h$7JkGhE<+@NCYKDI++{i+6#kB4 zvL+j}YWy4Ibn9CTM18$T+FBDt8V;y5?q{r?XM3RHa*S zuGus*YH}rT+2Ss%xJ>8pi5Ht~bEbvCn!n672V7QWD_f0*SGZ(B2%0N^sA{E?`i?Ld zp#dTim8}5exlsWD-KfxwY%`<8mQIlPF6)_^+~clPhLD>~Q$=$n4^gP$4sU3JmY6mU`1(m4xQ+!Qu-;-X3y#in#qRdZ*^o{j6Eu_@!O(p)jx@|Rs( ztS(#KWvAv-TR_V;+Qv*%m*y_IXlV?%=-S*#7tLH$a#5*^rp9z*MbjxradxVrv8w6x zX2Y*40M2MWJJpHv>73(+#>&P{O%kySm!_dJSNatj#PF#c>j zqlqY-Z$qacXz1E_dJ|C14QYO!s-GBa zR9~Yp9ss<`8cowrQpLvOHAxw^A>bBF|2?0+$B(VyU#))Z9$dkE5dj#ac$mP90KjqC5J9#v|H{yZqF;+R#(*3P%hZZyPrIE;7z^ zRUwu_adY##UqwyLbXm5%Y%RiQKNPc_fN76U%_%(4I2zk zi|hyP3Qd#{x=IQgV$EMi&4<{9n?W(f240o`Zo>v9u8;diUQEW%)S^6k>TB3W+wXPG zCg)VJt(6xrYH+jW^@l7E#gBg&@UXz}+C4myJPe^1f*I60S0dB$S+_&DO7)1AXX!e+ zt~$2vR*C+B>8!P+D|gKRb2nS%7$H#0!rX@D$Xjb8BUXZ9PG(be9wgwIqnTseJ+yB>gL79%Kp~l<5!49>BE+r(f^J14TJ$%BkF+(F2vS zhubQ?f>LxF$i2HQw*ny3`#Q5>I$+VhUEE~f@jaEGciN9g2X<+TaG^$f_v}sY&Fsr? zJ3hS2?h1emfvnnxI*xtCoe;n@G>ZH7?%fx1yIA{`_VNxL6cudT(6U0BDqvG}m#t*pWM$5dm@I_I^PBU@f;^Je@uQ=iA` z)~#8C7yPx2+~2zO%{SkE`yIYe>ziL&DIYi6yb7EW>^uLEI$FJQ%~}D=^)1+U-g)l> zJ|mC3xneaB1fCSa{f~Gf9R6s<3S1I;P{!cFcBWtt?OeVBM}_yJJHnLp5s&^Zb>ztM z|C@&o1VgpSy!Lnz756gJ9aQnyf3?Ap|BGvyefG7LGpO(LeN#X=hq1- z*;V+tsl8v%U$}6|GWMEX?NsTR7COc2`I>n=hjX-)C<*RRw7A1zmfb#Y-uy+2mMzEU z!$KA~Y@p`K3Pva2Pko(bAT1)2-)Yp(KBx|)>hGr--=0G$3n>M~vfD0&c%?%LR^Q`I zvAb^8oH+^1N`QP-y83l60@*ri7Uej0SE6ZGcN;f2RSQO84~=-k4mx5>&}kwx#-@T~ zDa`f%b!y++(R#56oh^j956-uk|ms+lu=rl?9-KOr!Ve$XnliI0D`B)NL*6E1oltP_BioiG{Fde=w3OvHjou0T< z{er7FS6~tH%Y)_4oyXg+RP$EBmKh~7 za5}r;$|E{27OMrIRrGgKO)Ew^NJ^FP@ibh})|HAAn0`$DbJ=m*IGu zKNtbV3S|+^i8+*PMzf=>pu$P{DFnYxRecV6@IhA~tEGpt7}-3L9qAdA%&|7p%}m1P z?sss%lN8n$2o#!rCLCK}^IK7dH$2w&t2n~rhibL)6ZQ!h3`SeP%y@PphGP6XJnQzs z+(TYeGu%Qn9!Wet>%gDM;O2>k0ukT;poI7xWtpMGp^v~)>_`hx_zVec__!E3pbVCO z=n)krI6DH8Dy(8Op9|yr4=Tv$!IHXzzz+D7e+9J^F;Ur=J)E|4yKJ>Qj8rM4Ier@7#@y5 zu6ORnP4`=E8S1&R4<=B-(8}SE*?Y%bcinxr+f#H17u8CqC6qx54W4hH{+Wn+&+^_ zXO(dE{Jiw75-uK6Z0JnJjc=D2)%{E9Y@OcW#3*iH={uz#0CUWpDfYW1Mrdaj-8mjx z`l}Kns51-h91km3WY zTj>WnJ?u}f_){|{Mg%=d=jwEyKh5!{4>{4Hn4&w!KQ8?Zm+?>iX`nxi_oqev^oBoe z_oqGnRO3%se=7P@e8N@oEP+h$l2Vc~6AB5vg!)f?DdMbaGOvz5syTFX@2BMPt}z?0 zJDQC*4X5TqH*b&ctixT4N3T;plM5ZJA^-$iQK$r8v-!BRl6zH!3g7~FF9Vf|#<-zS zRmcG7kwqvCa_2(Y6^O4anfM2=6M!KlmT!7M-BT=qZKJOHK_M;{GL)i{J%WVN15-Tl zzSyO7krcm@Ofs~Welo@Xgf$5!Pl#ga+S&z3AH|YssA|RI+?ws&2A*lK zy21b1)@;`#M5eMa({L8QtElqI#)^hB36oJ+j_$|x*)xd8(PagXxI8V}sqNC#pOWp& zRRs?#nN#Y*RcCiq!MxJ9TRJ6AZ2ejMu5?gA{h7d2I!a;vX)UL?-<3=eozikD@Hi=% zQL1c-np>JrPp&id-)ZgyMrA_U^Zmx$tcG| zxJU;o9LHcC?kZv(PJ~lLgb&>?yJJyGJK#KSui9GqA&HGp@J7ejh%&szGigB}iU>CF z>$R2M5nAyxhVYdNV1tB{_Sg)2BtDD_%tup{gEP$Ts%8UlxnKo{#K-Uhp3H~hJ>uQX zg0^i%|D}-a%D{)w9JGYZ_^Yie9(S*cJ?T(9UM?3XqR0;WbzygNOAC&7(-JtIG?Pg@ zUO613%u`1sNo!idEE56NafX|;KI=8=qG41~C#$IN_3qs*Op!Pw$DSzR@2thSSq`D; zh@@IL8Ob0MPG)Zss_HU(W&L`Yin|dh;SW;65-DlI$HKI;C)EXeTk$IGMiET#bP&ob z;(x(jGgCKlmOoM--eUNZP)Rh+|A;>(Wh~WHHUeSfapN9qH-eKD-YKaa%SDwE>HkZET~F-6`WgZ&A(Dpb&6qNq0ZeTx&cOr`_0nnsYAyP8IOL$XQX z?V(5*3zHP;x#N0#)QW}jt@K1|FSnyE&d?Jb`eyF|%Ni*Iw)YPm3sekNyM3#B@F7l4 zYc68V^$`CVZQOde!PU|F*4~kL*}yz;ySuZiXN7C|_N87&W%}T^cHtrK;;?+*3)sZ_(xOGZ%l$A93oV z(8|zdPRk))!R~lhT_-xxfZoUuCaBJ~U7HeIQF>-qk)mM0O~}-yYjg5zyB7RE4#J~5 zsjIDYad?UnEGtSXXb)>MyE@aww#Wa4t`9jm@{k|_{PKBbE@~7`SS0rGs7eg5yAxp* zcgS3ht;xCx5@rI3mBdS*#6L<`<&Z|jN!neSWzmbKCPOSEPJ1W+e^TaG$2%QQyLd}O zc&Be0>P38Xp4}CFrFkMv2OSfbR^}oDsxQJPDce2 zxHwR+vobM(oX)e*8D8M@i6h-b?CDv&^Jv$j8HXAY&=>MH^p7R4)#J`Yp@#4mI(3xA z&|`&soOUFAIE{!w5~1pOSIKtg|J~l%$5?e83I3h?@m_z>%|~~eHYS7+7=}R%7Q-?u zy{Ok>Xd!|S0$HeqKny|_2zeNm#fco&<0y)($d(m(M$TGMHXCIWMM;!ww2Cr`5y1wV zwYr=B{_ck6qiI8bchg_*y?edCs&nt_hZBvo|BPm(VBdc4ol{k(PMx~v+*_xr&e9y7 zr<17ES+Y)lF?dO(8P|!6sl^NX9+hgP5OtNG#Y)px{3!KlQX7oxFr#aOrf)el9=#AY zU2V>#7vh;x`e^|jV4nbbag8wP_7#0vq&O}(&OHqBP;=B>CF~tqK|?-F_*9v@o(e@g zSxj%~5PJ!bV?RI}@{|Q}f$@hz+4m`Un2ZqF49Fq6y`>Ke20cY{D7R=XzA!}(i+~UA zKVYXr_`v25Nmt!w%D_m{kOxLw>h~@kWYgfj2dtE0?58)l*z^p#gXsr@5BR_EK?*GP z4x;wmKEK!WEPYT+3qs4g<02gotTc`{5AHumDg(vZln>Fk+Vq(23Yubf0VENR2PyH^ z>AJuCz7H|>8MNH(OTq#^JBhCF<|oNd*df3L?BR#k@O@*aLH*8tAwFy30EXL~7$e^q z#p^ETclPSnUcqy$E>*|DY&Yfjq@fS-0mFL`7e;m3Q`{foZwT&VoYn-_dhDsoCb$iL zgHw0+lbbg``sl`uYge(8{#K3z#P#eaKNZh2X&K~CW8`m%%Vp&6+0fY7%xQRyVMCqa zP)?-*1H!!?E11XpA3Cq8!yxER%SX*EjSUS#KzX=^vG%u--`r1a=YOD4$Kt7q!=-Yd zZmJhAu%%(z+?J{4#s<#05`3g57HbuN`9*&uJ?lPa{qEinpF``hcW*^i0*-oWP%hfnM9*k;auPX`<{GY--R zRYDvmg@kpzT*Oxnz7_jzUc8|A{es`tf()WzK#b};8Ta6G_>mCt+`T{##6hm-qb|!p zZX8t=fB8%G+qCyU+yS&e)PPZxJD^QO@V{aa)TtWieUKA@x^Bk(&l>{#mO=06>gwsz z5l}sn?tgdrh`c{l33LqA z^A%Uji=u=MN|+mey%DVf*xqv=Miao8I-b5Ex1lN_I-IgMfJk1H?<%Z!a07@JD2}H& zuhpE#G6u-l?UemOw}pGS!PGf7>valHC(_@j(`(+`gYT(08w=msvijS`6M&!xv~E7i zL^oi&+<;d7BH6$9$K6-iSaTa(xq0>OR~J@pKb?WB*zy(UbH1;i)Ftb}PuMV%xsM|Z z?YwCnj;+hB_`mAC`)TZP9{YP=yufZ8|8bCErUZ#pB+beuALWr>bIO>`7V&(ggKa0> zsLzbH^>HQ}ql=fZ`LOBg@0jex<5#4mV;$?caGXEeD=yaRLeS>$6P7U+@9u6p%`LWS zZ!j5XohIXXj&w12CZk-=hj-aCyh6jj!>?MVIGN+(NzN`(bFrdferG2EEw%3b?$wEF zY%8-NF3rmR|)APsu>e(-r&^mUF**#>~Y~sgW>z6JQM2>g6PQbjbR5Hmh1TWhh zjUHJc9m#X{>VHY@A;h3HxjTO!_ z=Rl-YBY86!FF5~c7-RQpM1%}ltU2~RQ_Znq1uvfk<%y!QtI3+gHY6L2;?FOmPC$!_ zPM(lPtZTlk(=iWLdf9Vle-7Ku&qGaCY1Tge zR4kZ`(D3U1;Sxo1$!6)k>%0>Re-EujMZL1~m@;_wv^i~l7|Kp?!4F6uE_&HbsccS^8#97sH)RXHGnhhDqh2AbfLqIA4S>;mrQM_rCumUZ_J83Hj z^X*xE_S6}Xj)_)^a_BfKb0<%{TL=!x(!Yb$owpXEW@H+c{9_ZmFIa_&Mp(EDP8^q1 zOIa-u6ZCf*9HsLrKJDE-y$tlSLl?4U>1Vm3x*(klYMFS zY%iy+SlFsn`GX*WSx}7HH{CajzwNwXzQrc-HzI_raAq!P*04Mr=cG9vN|ZwpePN^c z4HCe)NKjgFF9%34!U@l_Ve6a?r6G}q#5NEcar6!Mjr6zR?Tv3a-%5Uy?AK+~yhPNO0!7;)p^?Gf2SHrU{~;@5yiK zPW0;@IMPalyO+aPUoo#ZA^^6^r8ASr`Ao!` z^v0>pyhupK>&378fSXqXL`>>C5}heHJKASM(S`8TNpmthPLf$LI4ShdK>{j1^E7V9 z9S?Sy3M_9@z~;pqu2J~~!B~LjQp})_NfRcXQxI<=1yyg9 zQ*Tz~`mO~tPZjv1WE*%kf)GZMLIY>dsMkqo1S8^6YonnA#K&+6FO@lM|ZVS<3imX3CFZZ;;{;pX>SB!kPJzsXK7J1twlo1GC|Q8 zMJC6okG+r zv4i1R3Pmj}b80@Eii$+5EIBP6r&wB%mXi>4hDjw+mRICs(}wG^gtU-EB*F(!^I9a@ zkyJ#WW+`%%mW85d`l+HMW?#BimM}mSsw`7dG)@uQ0>XvGq-@NVS(yuG{%|--nGBT$ zqF_V|WK@K!1q&$c?nFIRsFc4|0$46p~k(tjE36gF1@NsXr>^x*L@Fpjp6q&_tq zJeDRFOOhDGwN;ZtOG%M(E7on1qHtm!2alv%g*k3A_|;3_g+EJNN<=`?AzNY|XCDpC zP-LYl9Hs#p6k*3j(jI==gEA&!pA}1`OR${j3i{`mbJ7EMB$7|;p{_O3QPVev+if^- z$J_}&SC#GTTVOWQIvd}Y!!n)0?KIO-UY$hcIbGS#j)BE;r{7>(6b78mpyL5ER)i2& zI9;aGbcCNWdCAtn=UQ>73);t-%4}tfCFC$qwR67{NhPeuh+?O-G^y>UHlJ#KWzhDJ zNiV;aSj6rwrz`9f%U3%lun7sGh>5!r+bCwun7U~Tx-(3KLP8AXeH#5J5QaWE9gdI~ zi~wTxl!C1{?M_?JI>kgOnGIC*W^q)6f`yP=V|hZ0Mj+)ad%&pr+X^Yc(@#?PctDe>Sk0gN+1Gr zTTKhf5JOnyvE*%awxzi}ulf(9;kIU4nwv+M&h7q0P8u}sIjtf0) z!HA1`G2zE!<4LsY(@<#$H4Oq}6;O0!N?^LXx;i^MI@;UYq&cTKXll;^eU2jsH9+># zoM~bLB>nQ@Et=P$?S2e*e-Tb(G$W06bxNb{qBRl!5Nro97rmRid!0zT+*ah-++>=9 zMp+64eT^E8Zc|k$D?9)n0chvE_*S=fk;fP~O#lo4VAv(m$YZ(N?JbgPPJucUD35hJ z*+^5$lhfoj^60@*wK$K)q7vC#QMrx5Em`$6PWoxKWz3@?k_NN48e}<;y_>uN7m0Ga zNZ%r$Pi0mIh+I_4cWBis0&#`T{RqVAcI`waYLlblHkt;G?}KruM3WhEjAi7afo@~w zRzpKKFkxS>%U+S4yY1bXM@XRBW2oG`7*mSGgurh#&}1usQG>3|_fH7`VJej5+s;YA z)%o4c7ZXr!1B-IZxs1vmBNWs(Kq)s{$6$HPBdCUYQ;)77OPQQxwiao-R!f8(hiVfy zWjbA*jsK8FC~XD3@xtIPawHn(Ho6U_K5Wc``6KLT_nrE%888*42uVbl*L|jW~ z_>P`2wpJtE{GpAg1a(~zjGa^SlqeFkQ*Y|RK7eGUa-)XwdKM7^=$1H2-Chz7LIBZ0|P&}}I z|Cz@;piC)ZuF}++!}HW0*jICb+J&f=1CXQF*ck{5^1i*_QjwnG1uo4P*L>PBwt3?R_JRyYLVoWH)e`%2PdSM4 z6!3=25xf8#*tc&l$AF)f2b&9Hc`YcwVdcQoWL~J={gyo4T(~D7A^^=N027d)i+lG} zSMRR+9nUv+#L^Ohh>!p|e1Lw^jDQ@PkOvqno#yPA=17QOL=^jKOpQ~Wt=jd5!VKg! zmFq7}(VyK_yLR4?2OS9AJExsiD}*#gr#ZHSJ_*nXfcmXyMKbcr9Z61_vy^u1_z{mg zeV-RkB;T5vy~6jdojYETcuotJ8)YSi0AdLMw*4KzdKal#O_8&e5A53?32N7l9ox4L z@mw>maFDZB2Ncm98bhL1Tvb&&1@J8Z#pGp8G^ifdi7cbX;7sp}A%&#b&U?qRiJlnt zBvuLOaNa;yOHX!e-}d~w0Fs2~<;eJki3+MSqI6a#I8KC<=;_Y(ZCk4?tc<)^eC~^W zS^bODN97}sTO^RhyxbezB`8UrysZX^hy?PuLYlLER+tKTNYn{oqSIF93c0yio^@Uh z&Pnr`Q$p0#KE%-ShrnC5YZ&RcE6i@*wCO`0d^&SupzMmW$)JiNsbDR;n>M{JPgAkDtY{y+cmxgDF9HL2 zQD9K62Kwt_b<3tr8#l;9&ZiN0tkCcwl=teWP1zCN3h9j- z-UT|)K}K?_I`>{wzH_%^JRk~w0`OTY520;pftFcp|Ngx)C{`d=A{#eu*bH=g{$z<| zN|e{?d8EGE5HyTzSoeuMb;%fZM^l`LL}*9%nAP^@w`|_5;NJ)Qp3dG@jYQ*f;H;jcJ~~{zd$&$fIq|PYKC4%47lw{c z*crugZ#DkYSp0gQqG`&_s*M7Vy>wn?3eiflZ`MvM_I`Sz_chWK@tf7bs?~~MYUic5 zqH3ICwf8}88dwykrC+%U_>9gk=5Vi!7P^+Zxn+`zMoZLT_3FyXmB2f-=E#hS#ww=F zvRONKKe56TndG&i;}ap68~ms=hi_Gggf9;Snls$IDo zTy;kV*R0O0s$97NjHz0rV>Q_dGacVqBeAmSXsrgmVvBTGCjJA?fd|rAs|vcBZhhpV1uU8zj5HlCq$W11x)K9T~^YI}cV(k@9f79?MIV-$SLz>WPJ}e*^h(vnx`GQd0Qvb$&8AxqPZnzGnDZHkF!wE>Sr7>=dbyo=i*@ zPCg^w<|jxTTF$pHgRgZ77}x-(NTFOT$y26E6ENlOeWTKR>;XH|DmQ55*Vho+cMSS^0O1{pG zC&!Q5X34mESE>8AnJ=m+pznloB z#>Ol84AVGaKQoSTc!n<(d;yx+n>6`nNYAo#96R&Em@mI67%v{jCOtEj8k>`P{m&oA zggrU7d@Lg%VzbVSRg97UYkqXBY>eX$$UsCb5uwwg-e}1f5u%f$g`+9H(A4Ns($$dj zBFK*ORT3eMkCu)~hNSV)lF_ZCQ=S+d!Ka%f%)#V{Hxls69VIjK^hnXjU%|^r;Rpw> z&y5s}ki|JOj>|Slou_f`Cdc#q*oZswAHkd+aYm|0i#yf;hm1HL_#o6&bDfe#s zcM1jy?}|cUkH#Muz=DC)UDQMj)GiPOca{vGKZCve_Vjm={2uM?!=o33B3J-?uGjSX z6!^DG?w~(+Fb4U+`?rHTx9=24(W73kH`$l$Pu>=bB}qysd(xYvEY)9h8*RGX!>?3d zAxPvId)(90ThLq3SKR-FL}s?TyQjCXx3I6E9}T-FM)RKH-X(oTevWrzmFX$zE$TzP z`no-SltPCe!`Nv3Zl`BOFF!I}E9eqpqaZERi4SP7F3(McrOcviD1g?4!=k zF25^_g|xc>_-t=a4^wWC>F#to3%W|X*O6qUqtojw>G3<0>1l88NKs_i1L^9Nt&WLyuRYZf zKq=LUNFBq-VQY zT3cF+TDKPCqsk*qUX$C5GS753 zC7V#@`%QimM_Y`yH8wd-XmjRXqtl2sPjodliZ(xL5pB*y+C05*S_8PxX|T9wV zFAyFO*;l{zwO5^2!^?8p{N|)UWnUs(TnL%-{sjjp?-l5GojiF;YQvY#Iz*d0TARIi z;o_y_B{clB?9rb(?VJwJP#>Oq*?HLoJ$aGLP2WC#f?DsiIpdsl&I#S33*02XJbuEQ za3~LyadXZCB}vUf-?3xIPY4baUCWQO>BD#S<@4uRsKb|W2QbIoljf9rIs?9N%uDh) z7b>e0!S`#AImfb=h&e^mFF9x2v-7-`BE@q;paK5_At5Z7Q%RK#{r1mtubnx{YlTB) z_QXkH!<;HS?VjOHk|&1j4~`zKb!$2JR;UXD#izLkyAB^YTI*39O0PVM3r?>|EL=W( z_{fVE-Z}1^@K3s@4CTRZ5Am*@J@VpZ3^hh;Ug?X!B1;AzBSy>%O}{v(ZNFk;2-`n zZ`OM`)^#7xs?ZMQ{Z#)f9ON1Q&>@)<{lXq4AVj2TPM6&$)5+=GX18Cx@Ip1s?tw3PrKq7I+p@cgs)Fh? z&;OjB>+E4&{MD{1uPWSKy`-AO@!g%fs{AT_Q5edb$p5_qPW-wgbcj)OBFn z_HEmXwle|sAANr7Hu;s@&II)M)E2YF*_xs3`E6z!lhCCt1zXHkrlGesZ8n>eTbPJ` zzRBC zi2qI|ia0Svl&6BxmaG*~4vRRYMU>$p%6AcEzld^SFhrUfBTkhOr_P8|X~gGB#OF*z z$4>BYBZpALXHvvxR76Ks#3xuV2zsIggPS7CyEGGomw?j ztY4k6%Bd3l=8lz5EuAcyD8@-?+0^pM;t4q~KtjLWsS5p-9Q(p#3Frl5&rU9#D8aeo znaO~}{v|*bjg?O>qfA^tQe)xh&r=oa-WP*g3TBjWVo}qBbNH{$9 zCH>+Ie?g-qmyDL;mGj)#GAjMyXU57#OYlNjI`+)yQk+Qeni?B@Zgkm5;qY2LDWY^_ z$?%%d6(c3X&+)eumy(LnXGWG1?zn99*^y;9%aG=AR3$r6U|C%e&3+ zb2#q|lgQG?S7wMriSS|@ar*3DCePzfMuy82%)wnp&haoqo&|K^Mgg5}TrWI1?`F7^ zAWC1lAt9XRo;wiU=J{H-PlK^pIX)mgJxct35ga)~zR-C<_CKNH;IWb&Cf_%S#uuhX z$-bF-lpT7ci6|vE0klZ$*SEkH|1fF8S0pm&nepLA1a!u9h)TR|pp&^b{zSYhI9z0M z^wFTF*uHS$^<_pUII4v+n@Nv6Gd(d*Q0&lyfqR3)!=qypQ!{g!F!2wGrbNm8)V<_g zUqk#PnlK9GW1okjn2yXJ0q?{4Yc zP< z7Zag-=XQZs7D%OZ#$^w9zMU5x`M>yffg%de(pZMq1#!J7xgGT1?)UoxLeKoZLc#Ue zt*5iRk~kf1yXnV~VR=7qMR4y$WZm|#t$!JX#aiffdBEz{cAt6=@MlS1(A&owlQfuO zd)S4R+g9FJ(i?R5@V+ECvPT`XwM+C~D+t-%zP{cPrRZy|)1INWjkgGfwXb&tRepDX zvx@W}pa%w`glx4|_BuUDB}=P~z*G5Iz%rrw?}?TfNJA-JXK(qyl(Uc&!`vsBc8NPrh5C6{Uis{0x6d`i4_zb&bb72PYk3n7(^igc^lbcbEM9r8zZ z>P>eM<4^#A*OtQ1!fk#A8uHtZeuqt6rSksO)tQ8l-=5TR56^}fUfk40hQGy~g>X_3 z;kZpJpiuygLh-k7o4qEyB0PO@!_N)D6m=xqQ*o`|6gGC0b);0*f@50zW|zJGVtmy) z+Kbu?qcWeeXWEORUtUwPv4nv}ON!fyTOE+3D7+=()!tU#RzjKA>{BNG32iIHv#YIj z3FK2+sypsW@EL1sU9RXUMaL;(4KP7-3-5DMWNvv4VSVeft!_&}bJCK#)!^XKP|@l` zE7g>0bbxW|mogBoElx`jWd)SE4axdtElZjUnhM1y!)x&Bow~~AB7T}%K9%?ce9~Oj zT-;QYE65V!#=B$C)ZA36#mNRAEQvp>Y$^dP#czqDt0SN-`1nTC@+LxSn;MH~uKT7|6L2 z*2{V^+{JLLfD){_Hw~=1*YzlCbJe*Lv^|pb;>rD%`Vts%KJkUh$Jbq@;#@UXvJC^% zvRX{sZLN3eQ*~MLZxZk)lpH9T54>v&1j99QjsvU3^uz9kI3G+j4>$+pYUW1A z;Iyn3Q=j&?)!pF)7Vy0D(p~IH%{dIg1j2qP`=tUwHA7cgeXZApyaKix;p(oX5B!aR+ee+Moz! z)2$7KOFT{vvd3H_@dg(!lqh5Fxu_BLMo+RkdYsq`-usW5!wdR;Dti^BK>BpSv%RMa zM6E=GWyeRlAkHY`Y_gm`Pc#i)9^&Y6{^g`%nKLe1ug=Nz2?8#J{J0?L&XwH+-1BlN z!EF*};+~a}aZfwSO(-&Ub-UKKF{fMPd-v=)hd}A7SZdA%XU}1kaL)KN;zo>lwF~SY z%T}6fcjN1VOUSF|T%l z5D>P=*pt#7!Tkcgr`o9wcb{HnA%hbqk2}X*C|iEQLt+iszt3TRQk-#Q|Mrw~Dm;D4 z$RGDqO5|#}@gf}WpmTtC_?noPaCeodT6WSsfr;fK8= zY&)`1iB%xGy|xyWSXP_HN`oNH;W@F5M17cr9Wi4lKW4Y7!ejuF*}kmSJ?cUmV5`)0 zIKU6VsR@v%Q!TK{2Udk(+l#d+Mzt0bQ3fF$IqV+}VBVEoO8hzCA8Uu;8Ago`q<7Kl z9orqjJW_Ndc{o7t%pr5olZ{p}xd5Nt^FoB+L|i%Bv)i_Ag*c|F@_dA z)y{5bQ5=uA38%PgY(j2gZ{jb&SdeH+F0~k;qRt+@VK~RUio>yYcu{-d=1pc(xREwQ zi2GDWMJv3$3&=&}>BFYO208LKpot5Nwztu24ENP|HNk!{Sf#m>>6X9O>Inq>nt!P9NCpw&$O>%nGantXY@E zZKA5Q$^}G4=xf7fs~a&GQ)ItBiP>$JyDQkai=)PqJCfTuh8;L}lMAhIy*R+ES?%B? zv16y%8SdEW?95`;+fle9C0uTOev2z|asanP%^DZr${nRUiXeqaZi|T0Y<7`Lj=427 z9ImP~l@-7^&->JSTJI?HYoy++GL>fK((QAY`RL--ty{b;4rE+}Ci2Lx1Plf<$W{qb-g&M$1Xe->Z z+1c!G@;7=Lvg_B0D4vFL%ZoP$n>KGsZb|_XQ!%UD$^Z|7WO>P^VB@BZsf|ha^%U39 zKADPSxhX>_u|sYwMsDH84ekcl_G#^EpRPNV&dN||IAybVCWx;JmqHfMl5czOt#*Jk zD@{eJ+$$^H5Uk&@UMiinDQI}qKqFP2EHmrFb<||np_dHk`gO^5={5KwtXZ9egok`8 zgsH-^l6Aq_b!*Mq40TUc7M2&41#hfh22~KC5e)xBPElbK4YPA&_ga4cleho= z;3lJtc$gI9aIN&Cp}`^XSRmpPo1#ZW0byh2afXUfyd*e~P0Lf5_-y2s86*NkDi*1j zM;YvDGn86G-y)d>$P7Nv7(cN`3YCK4c|yX51|K}eK_f+xG&rY4gZIWM6EMrf{G%b@ z?mf{$;jCbI*5ck9NK@!3WC82~IXH-|4u23gS4fJ$!3>tUsa$Cai`|^EG;n*KQiuK) zM*W%>P6q~t@iW2LC@cu!Sm3VZ#hy+OJFq?SkQH z;h1g=VDp=$)T6Wz%1Qz52Kt84CwH_++cS@5fu*>wPhNanB_Y6Oa87`4_YKHF$qwvU zA~VwBy@A`e`=)TMAr)I(@kIKg7=03?8aK+}u7hH##QZqThMg^*5)NS;@_mm3ic=#+ z)`lunYAO>d}YRYG;Q02nV#->%3a7fk0*1~DeswNx6RRV^GIYa z%wr7Ab`MJkuhE(b9V2NMhPu1wa62kikqP(V0|boSvYS}rwFzk;0Nf1DM11yik8%@O z=?MIjh)z#;PnrtR0rO}=IE}=E)pC}NG6{M_&S0c%1@_8rgha?PHO`|vfl4R^p?B*O zoa;jknG)|Y=F$zxHa5mC7zYedVdW9=1&$nG$o7bsb)83PWr4nA=%i2#hBIu1Nya{{ z5U>`+n+G<-?321X_NtEh8PbeD?GO7wjO|hLL8O}EeA7MP6jk_xCWIM;Q zvSTJf6UNihzB14`!8v zAwf_MMlp>564R5Z8Ei>Iz(^F$QxN8s&{&|En;%QCvTek- z(NRye0*R07nZCr7DZwaeM9i@&e54_Aqf0?-yvoxcZvDKZZTk4eARuDpjN(t`+V*FU&Ry;&517Xz5OIc4wqHJx?a@FKD8M-ZM4IQ*OI z1P@jwRD?24S|73h$-J=e!8JL9Ndws=a4G_jfF7Elf7h=y$aHFLs=5A4{VeqWT)TEZ z1~7Ee!&)d&PNFMwg8#v_>k9y6Tgl*N0Z_Ksl3`RE)z|S1na4h*3`*}OJ6ZlX0J3z z%&|zy#X38osv^u_=)7`egt=VMq#Fp4?1|yWjH7eSTp{dlZ9?xx!3)4MH)o<=T)ooD z+>Oyygd1Z%iKud{%`~-I=RtKsx)DhhBjY0`ccEyTOWO)LW;ndda7`>+UrT!e(SVM z?N$VE1=H`}mZ{xZmHF8)EK|GoC;NVXMy7VigE%HryJCFuP^R`P!QG5Z?N_c2%*)h% zpGRY+_HpZsp6C0GZ*%1RExzkHUv8&dV5aGc+Hc&HP*;xfro{8Y#8eL&FhZ3x>f#qir8%n0Ms zP0Ue-H*Yw{gz}VNaC3KfU*ya+mK)(){r?Fb$?vAR=&#C(*p>E1Sz8E2FjxSD@?;Dg zNpMl*P(Clfm~tXN{z+^{D!-_UW_4PE1tKYs7^K9MF`d(?N~P(Rg_kU(*yQl@S0Tt)F9Iq_06ziniC7;|In^PvX+DOF zVibf;Agft;#1J+oeNkn=j$wzu4zSCsb@+Xt=!mcLl^f+fG8HZUnvR) zrMmz18$jlL!^ z7Y&^XXjMjaOvq+etR9oM5$r43b(k}vMnQGTQRxm!hnIMemRkopa(aU z9c8r&m}Ee%@GWLFOHm|dj}j~&TZSm2i^{2%tm|S?(&i$NHFCNktqTn>*0r$s_!w^l zyNd-!z}ywV?jhC~;Se*+QCU{_>Ir9C5{2^RJ=PEf+GuV4LJsdnTK|B_sEJMkG;LG)b^3Zw6QB#QFB7w3InlJ~tN z@B31|3$6HHiZ9ZJ{43{@?_ZD~`p@mXXusqb_Q*Z*-GoapjeB<^*I#i}KLz9Vy-ymK zI<8)>VXjQV?Jwp6r++h771vj|j&Ysi`a0K}T;JpR8Q1$vR5>+4)^a($2MXI$@d)p7N54Rd7@?ww+;=eRa=RdIcV>loKLuCH^w$@M+1 zpK-m load_error - $stderr.puts %(Missing the Rails #{version} gem. Please `gem install -v=#{version} rails`, update your RAILS_GEM_VERSION setting in config/environment.rb for the Rails version you do have installed, or comment out RAILS_GEM_VERSION to use the latest version installed.) - exit 1 - end - - class << self - def rubygems_version - Gem::RubyGemsVersion rescue nil - end - - def gem_version - if defined? RAILS_GEM_VERSION - RAILS_GEM_VERSION - elsif ENV.include?('RAILS_GEM_VERSION') - ENV['RAILS_GEM_VERSION'] - else - parse_gem_version(read_environment_rb) - end - end - - def load_rubygems - require 'rubygems' - min_version = '1.3.1' - unless rubygems_version >= min_version - $stderr.puts %Q(Rails requires RubyGems >= #{min_version} (you have #{rubygems_version}). Please `gem update --system` and try again.) - exit 1 - end - - rescue LoadError - $stderr.puts %Q(Rails requires RubyGems >= #{min_version}. Please install RubyGems and try again: http://rubygems.rubyforge.org) - exit 1 - end - - def parse_gem_version(text) - $1 if text =~ /^[^#]*RAILS_GEM_VERSION\s*=\s*["']([!~<>=]*\s*[\d.]+)["']/ - end - - private - def read_environment_rb - File.read("#{RAILS_ROOT}/config/environment.rb") - end - end - end -end - -# All that for this: -Rails.boot! +require 'bundler/setup' if File.exists?(ENV['BUNDLE_GEMFILE']) diff --git a/config/default_site.rb b/config/default_site.rb old mode 100644 new mode 100755 diff --git a/config/environment.rb b/config/environment.rb old mode 100644 new mode 100755 index 7390e53..4317a43 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,81 +1,5 @@ -# Be sure to restart your webserver when you modify this file. +# Load the rails application +require File.expand_path('../application', __FILE__) -# Uncomment below to force Rails into production mode -# (Use only when you can't set environment variables through your web/app server) -# ENV['RAILS_ENV'] = 'production' - -#RAILS_GEM_VERSION = '2.3.3' unless defined? RAILS_GEM_VERSION - -# Bootstrap the Rails environment, frameworks, and default configuration -require File.join(File.dirname(__FILE__), 'boot') - -Rails::Initializer.run do |config| - # Skip frameworks you're not going to use - # config.frameworks -= [ :action_web_service, :action_mailer ] - - # Add additional load paths for your own custom dirs - config.load_paths += %W( #{RAILS_ROOT}/vendor/ezcrypto-0.1.1/lib ) - config.load_paths += %W( #{RAILS_ROOT}/lib/webmail ) - # Force all environments to use the same logger level - # (by default production uses :info, the others :debug) - # config.log_level = :debug - - # Use the database for sessions instead of the file system - # (create the session table with 'rake create_sessions_table') - #config.action_controller.session_store = :active_record_store - - # Enable page/fragment caching by setting a file-based store - # (remember to create the caching directory and make it readable to the application) - # config.action_controller.fragment_cache_store = :file_store, "#{RAILS_ROOT}/cache" - - # Activate observers that should always be running - # config.active_record.observers = :cacher, :garbage_collector - - # Make Active Record use UTC-base instead of local time - config.active_record.default_timezone = :utc - - config.i18n.default_locale = "en" - - # Use Active Record's schema dumper instead of SQL when creating the test database - # (enables use of different database adapters for development and test environments) - # config.active_record.schema_format = :ruby - - # See Rails::Configuration for more options - config.action_controller.session = { :session_key => "_mailr_session", :secret => "123456789012345678901234567890" } -end - -# Add new inflection rules using the following format -# (all these examples are active by default): -# Inflector.inflections do |inflect| -# inflect.plural /^(ox)$/i, '\1en' -# inflect.singular /^(ox)en/i, '\1' -# inflect.irregular 'person', 'people' -# inflect.uncountable %w( fish sheep ) -# end - -# Include your application configuration below - -default_config_path = 'config/default_site' -default_config = File.join(RAILS_ROOT, default_config_path) -require default_config -begin - require File.join(RAILS_ROOT, 'config/site') - CDF::CONFIG.update(CDF::LOCALCONFIG) if CDF::LOCALCONFIG -rescue LoadError - STDERR.puts 'WARNING: config/site.rb not found, using default settings from ' + default_config_path -end - -#if CONFIG[:locale] is nil then I18n.default_locale will be used -I18n.default_locale = CDF::CONFIG[:locale] - -require 'tmail_patch' -$KCODE = 'u' -require 'jcode' - -# set UTF8 as a client interface to Database -RAILS_DEFAULT_LOGGER.debug("Using MySQL Version #{CDF::CONFIG[:mysql_version]}") -ActiveRecord::Base.connection.execute("SET NAMES utf8", 'Set Client encoding to UTF8') if CDF::CONFIG[:mysql_version] == '4.1' -ActiveRecord::Base.connection.execute("set character set utf8", 'Set Connection encoding to UTF8') if CDF::CONFIG[:mysql_version] == '4.1' - -require 'imapmailbox' -[IMAPMailbox, IMAPFolderList, IMAPFolder].each { |mod| mod.logger ||= RAILS_DEFAULT_LOGGER } +# Initialize the rails application +Rails3::Application.initialize! diff --git a/config/environments/development.rb b/config/environments/development.rb old mode 100644 new mode 100755 index 01c8978..787a9e7 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,14 +1,26 @@ -# In the development environment your application's code is reloaded on -# every request. This slows down response time but is perfect for development -# since you don't have to restart the webserver when you make code changes. -config.cache_classes = false +Rails3::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# Log error messages when you accidentally call methods on nil. -config.whiny_nils = true + # In the development environment your application's code is reloaded on + # every request. This slows down response time but is perfect for development + # since you don't have to restart the webserver when you make code changes. + config.cache_classes = false -# Show full error reports and disable caching -config.action_controller.consider_all_requests_local = true -config.action_controller.perform_caching = false + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true + + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_view.debug_rjs = true + config.action_controller.perform_caching = false + + # Don't care if the mailer can't send + config.action_mailer.raise_delivery_errors = false + + # Print deprecation notices to the Rails logger + config.active_support.deprecation = :log + + # Only use best-standards-support built into browsers + config.action_dispatch.best_standards_support = :builtin +end -# Don't care if the mailer can't send -config.action_mailer.raise_delivery_errors = false diff --git a/config/environments/production.rb b/config/environments/production.rb old mode 100644 new mode 100755 index f2b9ed6..baa574b --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,17 +1,49 @@ -# The production environment is meant for finished, "live" apps. -# Code is not reloaded between requests -config.cache_classes = true +Rails3::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# Use a different logger for distributed setups -# config.logger = SyslogLogger.new + # The production environment is meant for finished, "live" apps. + # Code is not reloaded between requests + config.cache_classes = true + # Full error reports are disabled and caching is turned on + config.consider_all_requests_local = false + config.action_controller.perform_caching = true -# Full error reports are disabled and caching is turned on -config.action_controller.consider_all_requests_local = false -config.action_controller.perform_caching = true + # Specifies the header that your server uses for sending files + config.action_dispatch.x_sendfile_header = "X-Sendfile" -# Enable serving of images, stylesheets, and javascripts from an asset server -# config.action_controller.asset_host = "http://assets.example.com" + # For nginx: + # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' -# Disable delivery errors if you bad email addresses should just be ignored -# config.action_mailer.raise_delivery_errors = false + # If you have no front-end server that supports something like X-Sendfile, + # just comment this out and Rails will serve the files + + # See everything in the log (default is :info) + # config.log_level = :debug + + # Use a different logger for distributed setups + # config.logger = SyslogLogger.new + + # Use a different cache store in production + # config.cache_store = :mem_cache_store + + # Disable Rails's static asset server + # In production, Apache or nginx will already do this + config.serve_static_assets = false + + # Enable serving of images, stylesheets, and javascripts from an asset server + # config.action_controller.asset_host = "http://assets.example.com" + + # Disable delivery errors, bad email addresses will be ignored + # config.action_mailer.raise_delivery_errors = false + + # Enable threaded mode + # config.threadsafe! + + # Enable locale fallbacks for I18n (makes lookups for any locale fall back to + # the I18n.default_locale when a translation can not be found) + config.i18n.fallbacks = true + + # Send deprecation notices to registered listeners + config.active_support.deprecation = :notify +end diff --git a/config/environments/test.rb b/config/environments/test.rb old mode 100644 new mode 100755 index 66b823d..8065328 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,23 +1,35 @@ -# The test environment is used exclusively to run your application's -# test suite. You never need to work with it otherwise. Remember that -# your test database is "scratch space" for the test suite and is wiped -# and recreated between test runs. Don't rely on the data there! -config.cache_classes = true +Rails3::Application.configure do + # Settings specified here will take precedence over those in config/application.rb -# Log error messages when you accidentally call methods on nil. -config.whiny_nils = true + # The test environment is used exclusively to run your application's + # test suite. You never need to work with it otherwise. Remember that + # your test database is "scratch space" for the test suite and is wiped + # and recreated between test runs. Don't rely on the data there! + config.cache_classes = true -# Show full error reports and disable caching -config.action_controller.consider_all_requests_local = true -config.action_controller.perform_caching = false + # Log error messages when you accidentally call methods on nil. + config.whiny_nils = true -# Tell ActionMailer not to deliver emails to the real world. -# The :test delivery method accumulates sent emails in the -# ActionMailer::Base.deliveries array. -config.action_mailer.delivery_method = :test + # Show full error reports and disable caching + config.consider_all_requests_local = true + config.action_controller.perform_caching = false -# Overwrite the default settings for fixtures in tests. See Fixtures -# for more details about these settings. -# config.transactional_fixtures = true -# config.instantiated_fixtures = false -# config.pre_loaded_fixtures = false \ No newline at end of file + # Raise exceptions instead of rendering exception templates + config.action_dispatch.show_exceptions = false + + # Disable request forgery protection in test environment + config.action_controller.allow_forgery_protection = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Use SQL instead of Active Record's schema dumper when creating the test database. + # This is necessary if your schema can't be completely dumped by the schema dumper, + # like if you have constraints or database-specific column types + # config.active_record.schema_format = :sql + + # Print deprecation notices to the stderr + config.active_support.deprecation = :stderr +end diff --git a/config/initializers/backtrace_silencers.rb b/config/initializers/backtrace_silencers.rb new file mode 100755 index 0000000..59385cd --- /dev/null +++ b/config/initializers/backtrace_silencers.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. +# Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } + +# You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. +# Rails.backtrace_cleaner.remove_silencers! diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb new file mode 100755 index 0000000..9e8b013 --- /dev/null +++ b/config/initializers/inflections.rb @@ -0,0 +1,10 @@ +# Be sure to restart your server when you modify this file. + +# Add new inflection rules using the following format +# (all these examples are active by default): +# ActiveSupport::Inflector.inflections do |inflect| +# inflect.plural /^(ox)$/i, '\1en' +# inflect.singular /^(ox)en/i, '\1' +# inflect.irregular 'person', 'people' +# inflect.uncountable %w( fish sheep ) +# end diff --git a/config/initializers/mime_types.rb b/config/initializers/mime_types.rb new file mode 100755 index 0000000..72aca7e --- /dev/null +++ b/config/initializers/mime_types.rb @@ -0,0 +1,5 @@ +# Be sure to restart your server when you modify this file. + +# Add new mime types for use in respond_to blocks: +# Mime::Type.register "text/richtext", :rtf +# Mime::Type.register_alias "text/html", :iphone diff --git a/config/initializers/pluralization.rb b/config/initializers/pluralization.rb new file mode 100755 index 0000000..a119797 --- /dev/null +++ b/config/initializers/pluralization.rb @@ -0,0 +1,36 @@ +# config/initializers/pluralization.rb +module I18n::Backend::Pluralization + # rules taken from : http://www.gnu.org/software/hello/manual/gettext/Plural-forms.html + def pluralize(locale, entry, n) + return entry unless entry.is_a?(Hash) && n + if n == 0 && entry.has_key?(:zero) + key = :zero + else + key = case locale + when :pl # Polish + n==1 ? :one : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? :few : :other + when :cs, :sk # Czech, Slovak + n==1 ? :one : (n>=2 && n<=4) ? :few : :other + when lt # Lithuanian + n%10==1 && n%100!=11 ? :one : n%10>=2 && (n%100<10 || n%100>=20) ? :few : :other + when :lv # Latvian + n%10==1 && n%100!=11 ? :one : n != 0 ? :few : :other + when :ru, :uk, :sr, :hr # Russian, Ukrainian, Serbian, Croatian + n%10==1 && n%100!=11 ? :one : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? :few : :other + when :sl # Slovenian + n%100==1 ? :one : n%100==2 ? :few : n%100==3 || n%100==4 ? :many : :other + when :ro # Romanian + n==1 ? :one : (n==0 || (n%100 > 0 && n%100 < 20)) ? :few : :other + when :gd # Gaeilge + n==1 ? :one : n==2 ? :two : :other; + # add another language if you like... + else + n==1 ? :one : :other # default :en + end + end + raise InvalidPluralizationData.new(entry, n) unless entry.has_key?(key) + entry[key] + end +end + +I18n::Backend::Simple.send(:include, I18n::Backend::Pluralization) diff --git a/config/initializers/secret_token.rb b/config/initializers/secret_token.rb new file mode 100755 index 0000000..4beb550 --- /dev/null +++ b/config/initializers/secret_token.rb @@ -0,0 +1,7 @@ +# Be sure to restart your server when you modify this file. + +# Your secret key for verifying the integrity of signed cookies. +# If you change this key, all old signed cookies will become invalid! +# Make sure the secret is at least 30 characters and all random, +# no regular words or you'll be exposed to dictionary attacks. +Rails3::Application.config.secret_token = 'ade84d567b0c637fd3547fd18b97d1677fd6ca3c5331e6ed1a1b13bb6a7823cc367cbe317caf102f29f8c35eb487ff3ca33e6321d037c14ebb055eb530841ff6' diff --git a/config/initializers/session_store.rb b/config/initializers/session_store.rb new file mode 100755 index 0000000..a3c4157 --- /dev/null +++ b/config/initializers/session_store.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +Rails3::Application.config.session_store :cookie_store, :key => '_rails3_session' + +# Use the database for sessions instead of the cookie-based default, +# which shouldn't be used to store highly confidential information +# (create the session table with "rails generate session_migration") +# Rails3::Application.config.session_store :active_record_store diff --git a/config/lighttpd.conf b/config/lighttpd.conf deleted file mode 100644 index 380d9e1..0000000 --- a/config/lighttpd.conf +++ /dev/null @@ -1,79 +0,0 @@ -server.port = 80 -server.bind = "127.0.0.1" -#server.event-handler = "freebsd-kqueue" - -server.modules = ( "mod_rewrite", "mod_fastcgi", ) -server.indexfiles = ( "dispatch.fcgi" ) -server.document-root = "public/" -server.error-handler-404 = "/dispatch.fcgi" -server.errorlog = "log/error.log" - -url.rewrite = ( "^/$" => "/login", "^([^.]+)$" => "$1.html" ) - -#### fastcgi module -fastcgi.server = ( - ".fcgi" => ( - "mailr" => ( - "min-procs" => 2, - "max-procs" => 2, - "socket" => "/tmp/mailr1.socket", - "bin-path" => "public/dispatch.fcgi", - "idle-timeout" => 120, - "bin-environment" => ( "RAILS_ENV" => "production" ) - ) - ) -) - - -mimetype.assign = ( - ".rpm" => "application/x-rpm", - ".pdf" => "application/pdf", - ".sig" => "application/pgp-signature", - ".spl" => "application/futuresplash", - ".class" => "application/octet-stream", - ".ps" => "application/postscript", - ".torrent" => "application/x-bittorrent", - ".dvi" => "application/x-dvi", - ".gz" => "application/x-gzip", - ".pac" => "application/x-ns-proxy-autoconfig", - ".swf" => "application/x-shockwave-flash", - ".tar.gz" => "application/x-tgz", - ".tgz" => "application/x-tgz", - ".tar" => "application/x-tar", - ".zip" => "application/zip", - ".mp3" => "audio/mpeg", - ".m3u" => "audio/x-mpegurl", - ".wma" => "audio/x-ms-wma", - ".wax" => "audio/x-ms-wax", - ".ogg" => "audio/x-wav", - ".wav" => "audio/x-wav", - ".gif" => "image/gif", - ".jpg" => "image/jpeg", - ".jpeg" => "image/jpeg", - ".png" => "image/png", - ".xbm" => "image/x-xbitmap", - ".xpm" => "image/x-xpixmap", - ".xwd" => "image/x-xwindowdump", - ".css" => "text/css", - ".html" => "text/html", - ".htm" => "text/html", - ".js" => "text/javascript", - ".asc" => "text/plain", - ".c" => "text/plain", - ".conf" => "text/plain", - ".text" => "text/plain", - ".txt" => "text/plain", - ".dtd" => "text/xml", - ".xml" => "text/xml", - ".mpeg" => "video/mpeg", - ".mpg" => "video/mpeg", - ".mov" => "video/quicktime", - ".qt" => "video/quicktime", - ".avi" => "video/x-msvideo", - ".asf" => "video/x-ms-asf", - ".asx" => "video/x-ms-asf", - ".wmv" => "video/x-ms-wmv", - ".bz2" => "application/x-bzip", - ".tbz" => "application/x-bzip-compressed-tar", - ".tar.bz2" => "application/x-bzip-compressed-tar" - ) diff --git a/config/locales/en.yml b/config/locales/en.yml old mode 100644 new mode 100755 index 57f3a7a..0411e8b --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1,7 +1,7 @@ en: mailr: Mailr email: Email - password: Password + password: Password log_in: Log In wrong_email_or_password: Wrong email or password specified. mailbox: Mailbox @@ -46,7 +46,7 @@ en: cc: CC bcc: BCC send: Send - choose_address: Choose addresses from contacts + choose_address: Choose addresses from contacts compose_txt: Compose new mail attachment: Attachment add: Add @@ -59,8 +59,9 @@ en: save: Save cancel: Cancel add_one_contact: Add one contact - add_multiple: Add multiple + add_multiple: Add multiple name: name add_folder: Add folder total_messages: Total messages unseen: Unseen + please_login: Log in diff --git a/config/locales/es-ES.yml b/config/locales/es-ES.yml old mode 100644 new mode 100755 diff --git a/config/locales/pl-PL.yml b/config/locales/pl.yml old mode 100644 new mode 100755 similarity index 96% rename from config/locales/pl-PL.yml rename to config/locales/pl.yml index dd7f194..9cf4ef9 --- a/config/locales/pl-PL.yml +++ b/config/locales/pl.yml @@ -1,4 +1,4 @@ -pl-PL: +pl: mailr: Mailr email: E-mail password: Hasło @@ -7,7 +7,7 @@ pl-PL: mailbox: Poczta folders: Foldery folder: Folder - empty: Pusty + empty: Opróżnij logout: Wyloguj compose: Nowa wiadomość preferences: Ustawienia @@ -68,3 +68,5 @@ pl-PL: user_logged_out: Użytkownik został wylogowany please_login: Logowanie add_to_contacts: Dodaj do kontaktów + want_to_empty_trash_message: Czy chcesz opróznic kosz? + diff --git a/config/routes.rb b/config/routes.rb old mode 100644 new mode 100755 index 36fed1f..289e679 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,27 +1,78 @@ -ActionController::Routing::Routes.draw do |map| - map.resources :folders, :requirements => {:id => /[^\/]+/} - map.resources :contacts, :member => {:add_from_mail => :get}, :collection => {:add_multiple => :get} - map.resources :contact_groups +Rails3::Application.routes.draw do + resources :folders + resources :contacts do + collection do + get :add_multiple + end + member do + get :add_from_mail + end + end - # Add your own custom routes here. - # The priority is based upon order of creation: first created -> highest priority. - - # Here's a sample route: - # map.connect 'products/:id', :controller => 'catalog', :action => 'view' - # Keep in mind you can assign values other than :controller and :action - map.root :controller=>'webmail', :action=>'index' + resources :contact_groups + match '/' => 'webmail#index' + match 'webmail' => 'webmail#index' + match 'webmail/:action' => 'webmail#index' + match '/contact/:action' => 'contacts#index' + match 'admin/main' => 'login#logout' + match ':controller/service.wsdl' => '#wsdl' + match '/:controller(/:action(/:id))' - map.connect 'webmail', :controller=>'webmail', :action=>'index' - - map.connect 'webmail/:action', :controller=>'webmail' - - map.connect '/contact/:action', :controller=>'contacts' - - map.connect 'admin/main', :controller=> 'login', :action=>'logout' - # Allow downloading Web Service WSDL as a file with an extension - # instead of a file named 'wsdl' - map.connect ':controller/service.wsdl', :action => 'wsdl' - - # Install the default route as the lowest priority. - map.connect ':controller/:action/:id' end + + # The priority is based upon order of creation: + # first created -> highest priority. + + # Sample of regular route: + # match 'products/:id' => 'catalog#view' + # Keep in mind you can assign values other than :controller and :action + + # Sample of named route: + # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase + # This route can be invoked with purchase_url(:id => product.id) + + # Sample resource route (maps HTTP verbs to controller actions automatically): + # resources :products + + # Sample resource route with options: + # resources :products do + # member do + # get 'short' + # post 'toggle' + # end + # + # collection do + # get 'sold' + # end + # end + + # Sample resource route with sub-resources: + # resources :products do + # resources :comments, :sales + # resource :seller + # end + + # Sample resource route with more complex sub-resources + # resources :products do + # resources :comments + # resources :sales do + # get 'recent', :on => :collection + # end + # end + + # Sample resource route within a namespace: + # namespace :admin do + # # Directs /admin/products/* to Admin::ProductsController + # # (app/controllers/admin/products_controller.rb) + # resources :products + # end + + # You can have the root of your site routed with "root" + # just remember to delete public/index.html. + # root :to => "welcome#index" + + # See how all your routes lay out with "rake routes" + + # This is a legacy wild controller route that's not recommended for RESTful applications. + # Note: This route will make all actions in every controller accessible via GET requests. + # match ':controller(/:action(/:id(.:format)))' diff --git a/db/migrate/20090107193228_init.rb b/db/migrate/20090107193228_init.rb old mode 100644 new mode 100755 diff --git a/db/schema.mysql.sql b/db/schema.mysql.sql deleted file mode 100644 index 081577d..0000000 --- a/db/schema.mysql.sql +++ /dev/null @@ -1,111 +0,0 @@ -CREATE TABLE customers ( - id bigint(20) NOT NULL auto_increment, - fname varchar(50) default NULL, - lname varchar(50) default NULL, - email varchar(100) NOT NULL, - PRIMARY KEY (id), - UNIQUE INDEX (email) -) TYPE=MyISAM; - -CREATE TABLE filters ( - id bigint(20) NOT NULL auto_increment, - name varchar(50) default NULL, - destination_folder varchar(50) default NULL, - customer_id bigint(20) NOT NULL, - order_num int default 1, - PRIMARY KEY (id), - INDEX (customer_id), - FOREIGN KEY (customer_id) REFERENCES customers(id) -) TYPE=MyISAM; - -CREATE TABLE expressions ( - id bigint(20) NOT NULL auto_increment, - field_name varchar(20) default '^Subject' NOT NULL, - operator varchar(20) default 'contains' NOT NULL, - expr_value varchar(100) default '' NOT NULL, - case_sensitive bool default 0, - filter_id bigint(20) NOT NULL, - PRIMARY KEY (id), - INDEX (filter_id), - FOREIGN KEY (filter_id) REFERENCES filters(id) -) TYPE=MyISAM; - -CREATE TABLE `mail_prefs` ( - `id` int(11) NOT NULL auto_increment, - `mail_type` varchar(10) default 'text/plain', - `wm_rows` int(11) default '20', - `customer_id` bigint(20) default NULL, - `check_external_mail` tinyint(1) default '0', - PRIMARY KEY (`id`), - UNIQUE KEY `customer_id` (`customer_id`) -) TYPE=MyISAM; - -CREATE TABLE contacts ( - id bigint(20) NOT NULL auto_increment, - fname varchar(50) default NULL, - lname varchar(50) default NULL, - email varchar(100) default NULL, - hphone varchar(20) default NULL, - wphone varchar(20) default NULL, - mobile varchar(20) default NULL, - fax varchar(20) default NULL, - notes text, - create_date datetime default NULL, - delete_date datetime default NULL, - customer_id bigint(20) default NULL, - PRIMARY KEY (id), - INDEX (customer_id), - INDEX (customer_id, email), - INDEX (email), - FOREIGN KEY (customer_id) REFERENCES customers(id) -) TYPE=MyISAM; - -CREATE TABLE contact_groups ( - id bigint(20) NOT NULL auto_increment, - name varchar(50) default NULL, - customer_id bigint(20) default NULL, - PRIMARY KEY (id), - INDEX (customer_id), - FOREIGN KEY (customer_id) REFERENCES customers(id) -) TYPE=MyISAM; - -CREATE TABLE contact_contact_groups ( - contact_id bigint(20) NOT NULL, - contact_group_id bigint(20) NOT NULL, - PRIMARY KEY (contact_id, contact_group_id), - INDEX (contact_id), - INDEX (contact_group_id), - FOREIGN KEY (contact_id) REFERENCES contacts(id), - FOREIGN KEY (contact_group_id) REFERENCES contact_groups(id) -) TYPE=MyISAM; - --- Mysql Sessions -create table sessions ( - id bigint(20) NOT NULL auto_increment, - session_id varchar(255), - data text, - updated_at timestamp, - primary key(id), - index(session_id) -); - --- Cache -CREATE TABLE imap_messages ( - id bigint(20) NOT NULL auto_increment, - folder_name varchar(100) NOT NULL, - username varchar(100) NOT NULL, - msg_id varchar(100), - uid bigint(20) NOT NULL, - `from` varchar(255), - `from_flat` varchar(255), - `to` varchar(255), - `to_flat` varchar(255), - `subject` varchar(255), - `content_type` varchar(30), - `date` timestamp, - `unread` tinyint(1), - `size` bigint(20), - PRIMARY KEY (id), - INDEX (folder_name, username), - INDEX (folder_name, username,uid) -) TYPE=MyISAM; \ No newline at end of file diff --git a/db/schema.pgsql.sql b/db/schema.pgsql.sql deleted file mode 100644 index 8601175..0000000 --- a/db/schema.pgsql.sql +++ /dev/null @@ -1,111 +0,0 @@ -CREATE TABLE customers ( - id bigserial NOT NULL, - fname varchar(50) default NULL, - lname varchar(50) default NULL, - email varchar(100) NOT NULL, - PRIMARY KEY (id) -); -CREATE UNIQUE INDEX customers_email_idx ON customers(email); - -CREATE TABLE filters ( - id bigserial NOT NULL, - name varchar(50) default NULL, - destination_folder varchar(50) default NULL, - customer_id bigint NOT NULL, - order_num int default 1, - PRIMARY KEY (id), - FOREIGN KEY (customer_id) REFERENCES customers(id) -); -CREATE INDEX filters_customer_id_idx ON filters(customer_id); - -CREATE TABLE expressions ( - id bigserial NOT NULL, - field_name varchar(20) default '^Subject' NOT NULL, - operator varchar(20) default 'contains' NOT NULL, - expr_value varchar(100) default '' NOT NULL, - case_sensitive bool default FALSE, - filter_id bigint NOT NULL, - PRIMARY KEY (id), - FOREIGN KEY (filter_id) REFERENCES filters(id) -); -CREATE INDEX expressions_filter_id_idx ON expressions(filter_id); - -CREATE TABLE mail_prefs ( - id serial NOT NULL, - mail_type varchar(10) default 'text/plain', - wm_rows int default '20', - customer_id bigint default NULL, - check_external_mail bool default false, - PRIMARY KEY (id) -); -CREATE UNIQUE INDEX mail_prefs_customer_id_idx ON mail_prefs(customer_id); - -CREATE TABLE contacts ( - id bigserial NOT NULL, - fname varchar(50) default NULL, - lname varchar(50) default NULL, - email varchar(100) default NULL, - hphone varchar(20) default NULL, - wphone varchar(20) default NULL, - mobile varchar(20) default NULL, - fax varchar(20) default NULL, - notes text, - create_date timestamp default NULL, - delete_date timestamp default NULL, - customer_id bigint default NULL, - PRIMARY KEY (id), - FOREIGN KEY (customer_id) REFERENCES customers(id) -); -CREATE INDEX contacts_customer_id_idx ON contacts(customer_id); -CREATE INDEX contacts_customer_id_email_idx ON contacts(customer_id,email); -CREATE INDEX contacts_email_idx ON contacts(email); - - -CREATE TABLE contact_groups ( - id bigserial NOT NULL, - name varchar(50) default NULL, - customer_id bigint default NULL, - PRIMARY KEY (id), - FOREIGN KEY (customer_id) REFERENCES customers(id) -); -CREATE INDEX contact_groups_customer_id_idx ON contact_groups(customer_id); - -CREATE TABLE contact_contact_groups ( - contact_id bigint NOT NULL, - contact_group_id bigint NOT NULL, - PRIMARY KEY (contact_id, contact_group_id), - FOREIGN KEY (contact_id) REFERENCES contacts(id), - FOREIGN KEY (contact_group_id) REFERENCES contact_groups(id) -); -CREATE INDEX contact_contact_groups_contact_id_idx ON contact_contact_groups(contact_id); -CREATE INDEX contact_contact_groups_contact_group_id_idx ON contact_contact_groups(contact_group_id); - -create table sessions ( - id BIGSERIAL NOT NULL, - session_id VARCHAR(255) NULL, - data TEXT NULL, - updated_at TIMESTAMP default null, - PRIMARY KEY (id) -); -CREATE INDEX session_idx ON sessions(session_id); - -CREATE TABLE imap_messages ( - id BIGSERIAL NOT NULL, - folder_name VARCHAR(100) NOT NULL, - username VARCHAR(100) NOT NULL, - msg_id VARCHAR(100), - uid BIGINT NOT NULL, - "from" TEXT, - "from_flat" TEXT, - "to" TEXT, - "to_flat" TEXT, - "subject" TEXT, - "content_type" VARCHAR(30), - "date" TIMESTAMP, - "unread" BOOL default false, - "size" BIGINT, - PRIMARY KEY (id) -); - -CREATE INDEX msg_cache_fu_idx ON imap_messages(folder_name, username); -CREATE INDEX msg_cache_fuui_idx ON imap_messages(folder_name, username, uid); diff --git a/db/schema.rb b/db/schema.rb old mode 100644 new mode 100755 index 5bc7b90..16e407a --- a/db/schema.rb +++ b/db/schema.rb @@ -1,10 +1,11 @@ -# This file is auto-generated from the current state of the database. Instead of editing this file, -# please use the migrations feature of Active Record to incrementally modify your database, and -# then regenerate this schema definition. +# This file is auto-generated from the current state of the database. Instead +# of editing this file, please use the migrations feature of Active Record to +# incrementally modify your database, and then regenerate this schema definition. # -# Note that this schema.rb definition is the authoritative source for your database schema. If you need -# to create the application database on another system, you should be using db:schema:load, not running -# all the migrations from scratch. The latter is a flawed and unsustainable approach (the more migrations +# Note that this schema.rb definition is the authoritative source for your +# database schema. If you need to create the application database on another +# system, you should be using db:schema:load, not running all the migrations +# from scratch. The latter is a flawed and unsustainable approach (the more migrations # you'll amass, the slower it'll run and the greater likelihood for issues). # # It's strongly recommended to check this file into your version control system. diff --git a/db/seeds.rb b/db/seeds.rb new file mode 100755 index 0000000..664d8c7 --- /dev/null +++ b/db/seeds.rb @@ -0,0 +1,7 @@ +# This file should contain all the record creation needed to seed the database with its default values. +# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup). +# +# Examples: +# +# cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }]) +# Mayor.create(:name => 'Daley', :city => cities.first) diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP old mode 100644 new mode 100755 index ac6c149..fe41f5c --- a/doc/README_FOR_APP +++ b/doc/README_FOR_APP @@ -1,2 +1,2 @@ Use this README file to introduce your application and point to useful places in the API for learning more. -Run "rake appdoc" to generate API documentation for your models and controllers. \ No newline at end of file +Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries. diff --git a/lib/cdfutils.rb b/lib/cdfutils.rb old mode 100644 new mode 100755 diff --git a/lib/imap_utils.rb b/lib/imap_utils.rb old mode 100644 new mode 100755 index 8cdf4fe..d38fb20 --- a/lib/imap_utils.rb +++ b/lib/imap_utils.rb @@ -1,5 +1,5 @@ module ImapUtils - private + private def load_imap_session return if ['error_connection'].include?(action_name) @@ -8,7 +8,7 @@ module ImapUtils def get_imap_session begin - @mailbox = IMAPMailbox.new + @mailbox = IMAPMailbox.new(self.logger) uname = (get_mail_prefs.check_external_mail == 1 ? user.email : user.local_email) upass = get_upass @mailbox.connect(uname, upass) @@ -17,7 +17,7 @@ module ImapUtils # logger.error("Exception on loggin webmail session - #{ex} - #{ex.backtrace.join("\t\n")}") # render :action => "error_connection" render :text => ex.inspect, :content_type => 'text/plain' - end + end end def close_imap_session @@ -31,7 +31,7 @@ module ImapUtils if not(@mailprefs = MailPref.find_by_customer_id(logged_customer)) @mailprefs = MailPref.create("customer_id"=>logged_customer) end - end + end @mailprefs end @@ -41,8 +41,8 @@ module ImapUtils else # retrun it plain session["wmp"] - end - end + end + end def load_folders if have_to_load_folders?() @@ -53,7 +53,7 @@ module ImapUtils end session["folder_name"] = @folder_name @folders = @mailbox.folders if @folders.nil? - end + end end def user diff --git a/lib/tasks/.gitkeep b/lib/tasks/.gitkeep new file mode 100755 index 0000000..e69de29 diff --git a/lib/tmail_patch.rb b/lib/tmail_patch.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/bounced_mail.rb b/lib/webmail/bounced_mail.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/cdfmail.rb b/lib/webmail/cdfmail.rb old mode 100644 new mode 100755 index b3cbe73..28ad051 --- a/lib/webmail/cdfmail.rb +++ b/lib/webmail/cdfmail.rb @@ -6,35 +6,35 @@ module CDF end class CDF::Mail - include ActionMailer::Quoting - + #include ActionMailer::Quoting #upgrade to Rails3 + def initialize(senderTempLocation) @attachments = Array.new @sender_temp_location = senderTempLocation @to_contacts = Array.new end - + def customer_id() @customer_id end - + def customer_id=(arg) @customer_id = arg end - + def from() @from end - + def from=(arg) @from = arg end - + def to() @to end - + def to=(arg) @to = arg end - + def to_contacts() @to_contacts end - + def to_contacts=(arg) @to_contacts = arg end - + def toc=(arg) @to_contacts = Array.new arg.split(",").each { |token| @to_contacts << token.to_i unless token == "" or token.strip() == "undefined"} unless arg.nil? or arg == "undefined" end - + def toc ret = String.new @to_contacts.each { |contact| @@ -47,60 +47,60 @@ class CDF::Mail } ret end - + def bcc() @bcc end - + def bcc=(arg) @bcc = arg end - + def cc() @cc end - + def cc=(arg) @cc = arg end - + def subject() @subject end - + def subject=(arg) @subject = arg end - + def attachments @attachments end - + def add_attachment(attachment) @attachments << attachment end - + def multipart? @attachments && @attachments.size > 0 end - + def delete_attachment(att_filename) @attachments.each { |att| att.delete_temp_data() if arr.filename == att_filename } @attachments.delete_if() { |att| att.filename == att_filename } end - + def delete_attachments() @attachments.each { |att| att.delete_temp_data() } @attachments = Array.new end - + def body() @body end - + def body=(arg) @body = arg end - + def content_type() @content_type end - + def content_type=(arg) @content_type = arg end - + def temp_location() @sender_temp_location end - + def send_mail(db_msg_id = 0) m = TMail::Mail.new m.from, m.body = self.from, self.body m.date = Time.now - m.subject, = quote_any_if_necessary("UTF-8", self.subject) + m.subject, = quote_any_if_necessary("UTF-8", self.subject) m.to = decode_addresses(self.to) - + m.cc, m.bcc = decode_addresses(self.cc), decode_addresses(self.bcc) - + if multipart? m.set_content_type("multipart/mixed") p = TMail::Mail.new(TMail::StringPort.new("")) @@ -127,21 +127,21 @@ class CDF::Mail } encmail = m.encoded RAILS_DEFAULT_LOGGER.debug("Sending message \n #{encmail}") - Net::SMTP.start(ActionMailer::Base.smtp_settings[:address], ActionMailer::Base.smtp_settings[:port], - ActionMailer::Base.smtp_settings[:domain], ActionMailer::Base.smtp_settings[:user_name], + Net::SMTP.start(ActionMailer::Base.smtp_settings[:address], ActionMailer::Base.smtp_settings[:port], + ActionMailer::Base.smtp_settings[:domain], ActionMailer::Base.smtp_settings[:user_name], ActionMailer::Base.smtp_settings[:password], ActionMailer::Base.smtp_settings[:authentication]) do |smtp| smtp.sendmail(encmail, m.from, m.destinations) end return encmail end - + def forward(tmail, fb) decoded_subject = mime_encoded?(tmail.subject) ? mime_decode(tmail.subject) : tmail.subject self.subject = "[Fwd: #{decoded_subject}]" attachment = CDF::Attachment.new(self) attachment.body(tmail, fb) end - + def reply(tmail, fb, type) decoded_subject = mime_encoded?(tmail.subject) ? mime_decode(tmail.subject) : tmail.subject self.subject = "Re: #{decoded_subject}" @@ -152,9 +152,9 @@ class CDF::Mail mt = MailTransform.new self.body = mt.get_body(tmail, type) end - - private - + + private + def delimeter if self.content_type == "text/plain" "\n" @@ -162,41 +162,41 @@ class CDF::Mail "
" end end - + def text2html(str) CGI.escapeHTML(str).gsub("\n", "
") end - + def html2text(txt) clear_html(txt) end - + def prepare_text(msg, ctype, bdy) msg.set_content_type(ctype, nil, {"charset"=>"utf-8"}) msg.transfer_encoding = "8bit" msg.body = bdy end - + def prepare_html(msg, ctype, bdy) msg.set_content_type(ctype, nil, {"charset"=>"utf8"}) msg.transfer_encoding = "8bit" msg.body = bdy end - + def prepare_alternative(msg, bdy) bound = ::TMail.new_boundary - + msg.set_content_type("multipart/alternative", nil, {"charset"=>"utf8", "boundary"=>bound}) msg.transfer_encoding = "8bit" - + ptext = TMail::Mail.new(TMail::StringPort.new("")) phtml = TMail::Mail.new(TMail::StringPort.new("")) - + prepare_text(ptext, "text/plain", html2text(bdy)) prepare_html(phtml, "text/html", bdy) - + msg.parts << ptext msg.parts << phtml end - + def decode_addresses(str) ret = String.new str.split(",").each { |addr| @@ -218,37 +218,37 @@ class CDF::Mail ret end end - + class CDF::Attachment - + def initialize(arg) @mail = arg @mail.add_attachment(self) @index = @mail.attachments.size - 1 end - + def filename=(arg) @filename = arg.tr('\\/:*?"\'<>|', '__________') end - + def filename() @filename end - + def temp_filename=(arg) @temp_filename = arg end - + def temp_filename() @temp_filename end - + def content_type=(arg) @content_type = arg end - + def content_type() @content_type end - + def delete_temp_data() File.delete(self.temp_filename) end - + def file File.open(self.temp_filename, "rb") { |fp| fp.read } end - + def file=(data) return if data.size == 0 @content_type = data.content_type @@ -258,7 +258,7 @@ class CDF::Attachment data.rewind File.open(@temp_filename, "wb") { |f| f.write(data.read) } end - + def body(data, fb) @content_type = "message/rfc822" filename = data.content_type['filename'] @@ -267,7 +267,7 @@ class CDF::Attachment check_store_path File.open(@temp_filename, "wb") { |f| f.write(fb) } end - + def check_store_path() path = "" "#{@mail.temp_location}".split(File::SEPARATOR).each { |p| @@ -275,11 +275,11 @@ class CDF::Attachment begin Dir.mkdir(path) rescue - end + end path << File::SEPARATOR - } + } end - + def encoded p = TMail::Mail.new(TMail::StringPort.new("")) data = self.file @@ -294,13 +294,13 @@ class CDF::Attachment p.set_content_type(@content_type, nil, {"charset"=>"utf8"}) p.set_disposition("inline;") p.transfer_encoding = "8bit" - else + else p.set_content_type(@content_type, nil, {"name"=>@filename}) p.set_disposition("inline; filename=#{@filename}") unless @filename.nil? p.set_disposition("inline;") if @filename.nil? p.transfer_encoding='Base64' p.body = TMail::Base64.folding_encode(data) end - return p + return p end end diff --git a/lib/webmail/environment.rb b/lib/webmail/environment.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/expression.rb b/lib/webmail/expression.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/filter.rb b/lib/webmail/filter.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/imap_message.rb b/lib/webmail/imap_message.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/imapmailbox.rb b/lib/webmail/imapmailbox.rb old mode 100644 new mode 100755 index e688d8e..24d7345 --- a/lib/webmail/imapmailbox.rb +++ b/lib/webmail/imapmailbox.rb @@ -22,9 +22,9 @@ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -# +# # Modifications (c) 2005 by littlegreen -# +# require 'net/imap' Net::IMAP.debug = true if CDF::CONFIG[:debug_imap] @@ -34,8 +34,8 @@ class Net::IMAP def process(data) return "\0#{@user}\0#{@password}" end - - private + + private def initialize(user, password) @user = user @password = password @@ -61,17 +61,20 @@ class IMAPMailbox attr_reader :connected attr_accessor :selected_mailbox cattr_accessor :logger - - def initialize + + def initialize(logger) @selected_mailbox = '' @folders = {} @connected = false + @logger = logger end - + def connect(username, password) + #logger.debug "*** connect: @connected" unless @connected use_ssl = CDF::CONFIG[:imap_use_ssl] ? true : false port = CDF::CONFIG[:imap_port] || (use_ssl ? 993 : 143) + # logger.debug "*** IMAP params: use_ssl => #{use_ssl}, port => #{port}" begin @imap = Net::IMAP.new(CDF::CONFIG[:imap_server], port, use_ssl) rescue Net::IMAP::ByeResponseError => bye @@ -80,26 +83,26 @@ class IMAPMailbox System.sleep(CDF::CONFIG[:imap_bye_timeout_retry_seconds]) @imap = Net::IMAP.new(CDF::CONFIG[:imap_server], port, use_ssl) rescue Error => ex - logger.error "Error on authentication!" - logger.error bye.backtrace.join("\n") + # logger.error "Error on authentication!" + # logger.error bye.backtrace.join("\n") raise AuthenticationError.new - end + end rescue Net::IMAP::NoResponseError => noresp - logger.error "Error on authentication!" - logger.error noresp.backtrace.join("\n") + # logger.error "Error on authentication!" + # logger.error noresp.backtrace.join("\n") raise AuthenticationError.new rescue Net::IMAP::BadResponseError => bad - logger.error "Error on authentication!" - logger.error bad.backtrace.join("\n") + # logger.error "Error on authentication!" + # logger.error bad.backtrace.join("\n") raise AuthenticationError.new rescue Net::IMAP::ResponseError => resp - logger.error "Error on authentication!" - logger.error resp.backtrace.join("\n") + # logger.error "Error on authentication!" + # logger.error resp.backtrace.join("\n") raise AuthenticationError.new - end + end @username = username begin - logger.error "IMAP authentication - #{CDF::CONFIG[:imap_auth]}." + # logger.error "IMAP authentication - #{CDF::CONFIG[:imap_auth]}." if CDF::CONFIG[:imap_auth] == 'NOAUTH' @imap.login(username, password) else @@ -107,17 +110,17 @@ class IMAPMailbox end @connected = true rescue Exception => ex - logger.error "Error on authentication!" - logger.error ex.backtrace.join("\n") + # logger.error "Error on authentication!" + # logger.error ex.backtrace.join("\n") raise AuthenticationError.new end end end - + def imap @imap end - + # Function chnage password works only if root has run imap_backend # and users courier-authlib utility authtest - from courier-imap version 4.0.1 def change_password(username, password, new_password) @@ -127,34 +130,34 @@ class IMAPMailbox if ret.include?("Password change succeeded.") return true else - logger.error "[!] Error on change password! - #{ret}" + logger.error "[!] Error on change password! - #{ret}" return false - end + end end - + def disconnect if @connected @imap.logout #@imap.disconnect @imap = nil @connected = false - end + end end - + def [](mailboxname) @last_folder = IMAPFolderList.new(self, @username)[mailboxname] end - + def folders # reference just to stop GC @folder_list ||= IMAPFolderList.new(self, @username) @folder_list end - + def reload @folder_list.reload if @folder_list end - + def create_folder(name) # begin @imap.create(Net::IMAP.encode_utf7(name)) @@ -162,16 +165,16 @@ class IMAPMailbox # rescue Exception=>e # end end - + def delete_folder(name) begin @imap.delete(folders[name].utf7_name) reload rescue Exception=>e - logger.error("Exception on delete #{name} folder #{e}") + logger.error("Exception on delete #{name} folder #{e}") end end - + def message_sent(message) # ensure we have sent folder begin @@ -179,14 +182,14 @@ class IMAPMailbox rescue Exception=>e end begin - @imap.append(CDF::CONFIG[:mail_sent], message) + @imap.append(CDF::CONFIG[:mail_sent], message) folders[CDF::CONFIG[:mail_sent]].cached = false if folders[CDF::CONFIG[:mail_sent]] rescue Exception=>e - logger.error("Error on append - #{e}") + logger.error("Error on append - #{e}") end - + end - + def message_bulk(message) # ensure we have sent folder begin @@ -194,24 +197,24 @@ class IMAPMailbox rescue Exception=>e end begin - @imap.append(CDF::CONFIG[:mail_bulk_sent], message) + @imap.append(CDF::CONFIG[:mail_bulk_sent], message) folders[CDF::CONFIG[:mail_sent]].cached = false if folders[CDF::CONFIG[:mail_bulk_sent]] rescue Exception=>e - logger.error("Error on bulk - #{e}") - end + logger.error("Error on bulk - #{e}") + end end end class IMAPFolderList include Enumerable cattr_accessor :logger - + def initialize(mailbox, username) @mailbox = mailbox @folders = Hash.new @username = username end - + def each refresh if @folders.empty? #@folders.each_value { |folder| yield folder } @@ -219,11 +222,11 @@ class IMAPFolderList @folders.sort.each { |pair| yield pair.last } end - + def reload refresh end - + def [](name) refresh if @folders.empty? @folders[name] @@ -233,7 +236,7 @@ class IMAPFolderList def refresh @folders = {} result = @mailbox.imap.list('', '*') - if result + if result result.each do |info| folder = IMAPFolder.new(@mailbox, info.name, @username, info.attr, info.delim) @folders[folder.name] = folder @@ -257,14 +260,14 @@ class IMAPFolder attr_reader :username attr_reader :delim attr_reader :attribs - + attr_writer :cached attr_writer :mcached - + cattr_accessor :logger - + @@fetch_attr = ['ENVELOPE','BODYSTRUCTURE', 'FLAGS', 'UID', 'RFC822.SIZE'] - + def initialize(mailbox, utf7_name, username, attribs, delim) @mailbox = mailbox @utf7_name = utf7_name @@ -276,7 +279,7 @@ class IMAPFolder @cached = false @mcached = false end - + def activate if(@mailbox.selected_mailbox != @name) @mailbox.selected_mailbox = @name @@ -284,7 +287,7 @@ class IMAPFolder load_total_unseen if !@cached end end - + # Just delete message without interaction with Trash folder def delete(message) activate @@ -295,17 +298,17 @@ class IMAPFolder ImapMessage.delete_all(["username = ? and folder_name = ? and uid = ?", @username, @name, uid]) @cached = false end - + # Deleted messages - move to trash folder def delete_multiple(uids) # ensure we have trash folder begin @mailbox.imap.create(CDF::CONFIG[:mail_trash]) - rescue + rescue end move_multiple(uids, CDF::CONFIG[:mail_trash]) end - + def copy(message, dst_folder) uid = (message.kind_of?(Integer) ? message : message.uid) activate @@ -313,14 +316,14 @@ class IMAPFolder @mailbox.folders[dst_folder].cached = false if @mailbox.folders[dst_folder] @mailbox.folders[dst_folder].mcached = false if @mailbox.folders[dst_folder] end - + def copy_multiple(message_uids, dst_folder) activate @mailbox.imap.uid_copy(message_uids, dst_folder) @mailbox.folders[dst_folder].cached = false if @mailbox.folders[dst_folder] @mailbox.folders[dst_folder].mcached = false if @mailbox.folders[dst_folder] end - + def move(message, dst_folder) uid = (message.kind_of?(Integer) ? message : message.uid) activate @@ -333,7 +336,7 @@ class IMAPFolder @cached = false @mcached = false end - + def move_multiple(message_uids, dst_folder) activate @mailbox.imap.uid_copy(message_uids, @mailbox.folders[dst_folder].utf7_name) @@ -345,7 +348,7 @@ class IMAPFolder @cached = false @mcached = false end - + def mark_read(message_uid) activate cached = ImapMessage.find(:first, :conditions => ["username = ? and folder_name = ? and uid = ?", @username, @name, message_uid]) @@ -357,7 +360,7 @@ class IMAPFolder @unseen_messages = @unseen_messages - 1 end end - + def mark_unread(message_uid) activate cached = ImapMessage.find(:first, :conditions => ["username = ? and folder_name = ? and uid = ?", @username, @name, message_uid]) @@ -369,7 +372,7 @@ class IMAPFolder @unseen_messages = @unseen_messages + 1 end end - + def expunge activate @mailbox.imap.expunge @@ -385,33 +388,33 @@ class IMAPFolder count = @mailbox.imap.fetch(1..-1, "UID") to = count.size if count.size < to - + range = (offset..to) - logger.info range.inspect + #logger.info range.inspect server_messages = @mailbox.imap.fetch(range, "(UID FLAGS)") #server_messages = @mailbox.imap.uid_fetch(sequence_uids, ["UID", "FLAGS"]) - + startDbFetch = Time.now cached_messages = ImapMessage.find(:all, :conditions => ["username = ? and folder_name = ?", @username, @name]) - + cached_unread_uids = Array.new cached_read_uids = Array.new uids_to_be_deleted = Array.new - - cached_messages.each { |msg| + + cached_messages.each { |msg| cached_unread_uids << msg.uid if msg.unread cached_read_uids << msg.uid unless msg.unread uids_to_be_deleted << msg.uid } - + uids_to_be_fetched = Array.new server_msg_uids = Array.new - + uids_unread = Array.new uids_read = Array.new - - server_messages.each { |server_msg| + + server_messages.each { |server_msg| uid, flags = server_msg.attr['UID'], server_msg.attr['FLAGS'] server_msg_uids << uid unless uids_to_be_deleted.include?(uid) @@ -421,32 +424,32 @@ class IMAPFolder uids_read << uid elsif !flags.member?(:Seen) && cached_read_uids.include?(uid) uids_unread << uid - end + end end uids_to_be_deleted.delete(uid) } unless server_messages.nil? - + ImapMessage.delete_all(["username = ? and folder_name = ? and uid in ( ? )", @username, @name, uids_to_be_deleted]) unless uids_to_be_deleted.empty? ImapMessage.update_all('unread = 0', ["username = ? and folder_name = ? and uid in ( ? )", @username, @name, uids_read]) unless uids_read.empty? ImapMessage.update_all('unread = 1', ["username = ? and folder_name = ? and uid in ( ? )", @username, @name, uids_unread]) unless uids_unread.empty? - - + + # fetch and store not cached messages - unless uids_to_be_fetched.empty? - logger.debug("About to fetch #{uids_to_be_fetched.join(",")}") + unless uids_to_be_fetched.empty? + # logger.debug("About to fetch #{uids_to_be_fetched.join(",")}") uids_to_be_fetched.each_slice(20) do |slice| fetch_uids(slice) end - end + end #FIX: @mcached = true - logger.debug("Synchonization done for folder #{@name} in #{Time.now - startSync} ms.") + # logger.debug("Synchonization done for folder #{@name} in #{Time.now - startSync} ms.") end - + def fetch_uids(uids) imapres = @mailbox.imap.uid_fetch(uids, @@fetch_attr) - imapres.each { |cache| + imapres.each { |cache| envelope = cache.attr['ENVELOPE']; - message = ImapMessage.create( :folder_name => @name, + message = ImapMessage.create( :folder_name => @name, :username => @username, :msg_id => envelope.message_id, :uid => cache.attr['UID'], @@ -459,18 +462,18 @@ class IMAPFolder :size => cache.attr['RFC822.SIZE']) } end - + def messages(offset = 0, limit = 10, sort = 'date desc') # Synchronize first retrieval time synchronize_cache(offset+1, limit) #unless @mcached - + if limit == -1 @messages = ImapMessage.find(:all, :conditions => ["username = ? and folder_name = ?", @username, @name], :order => sort) else @messages = ImapMessage.find(:all, :conditions => ["username = ? and folder_name = ?", @username, @name], :order => sort ) - end + end end - + def messages_search(query = ["ALL"], sort = 'date desc') activate uids = @mailbox.imap.uid_search(query) @@ -481,38 +484,38 @@ class IMAPFolder else return Array.new end - + end - + def message(uid) activate message = ImapMessage.find(:first, :conditions => ["username = ? and folder_name = ? and uid = ?", @username, @name, uid]) message.set_folder(self) message end - + def unseen activate load_total_unseen if !@cached - @unseen_messages + @unseen_messages end - + def total activate load_total_unseen if !@cached @total_messages end - + def load_total_unseen stat = @mailbox.imap.status(@utf7_name, ["MESSAGES", "UNSEEN"]) @total_messages, @unseen_messages = stat["MESSAGES"], stat['UNSEEN'] @cached = true end - + def update_status @status ||= @mailbox.imap.status(@utf7_name, ["MESSAGES"]) end - + def subscribe @mailbox.imap.subscribe(@utf7_name) end diff --git a/lib/webmail/mail2screen.rb b/lib/webmail/mail2screen.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/mail_transform.rb b/lib/webmail/mail_transform.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/maildropserializator.rb b/lib/webmail/maildropserializator.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/routes.rb b/lib/webmail/routes.rb old mode 100644 new mode 100755 diff --git a/lib/webmail/virtual_email.rb b/lib/webmail/virtual_email.rb old mode 100644 new mode 100755 diff --git a/public/404.html b/public/404.html old mode 100644 new mode 100755 index 0e18456..9a48320 --- a/public/404.html +++ b/public/404.html @@ -1,8 +1,26 @@ - + + + The page you were looking for doesn't exist (404) + + + -

File not found

-

Change this error message for pages not found in public/404.html

+ +
+

The page you were looking for doesn't exist.

+

You may have mistyped the address or the page may have moved.

+
- \ No newline at end of file + diff --git a/public/422.html b/public/422.html new file mode 100755 index 0000000..83660ab --- /dev/null +++ b/public/422.html @@ -0,0 +1,26 @@ + + + + The change you wanted was rejected (422) + + + + + +
+

The change you wanted was rejected.

+

Maybe you tried to change something you didn't have access to.

+
+ + diff --git a/public/500.html b/public/500.html old mode 100644 new mode 100755 index a1001a0..b80307f --- a/public/500.html +++ b/public/500.html @@ -1,8 +1,26 @@ - + + + We're sorry, but something went wrong (500) + + + -

Application error (Apache)

-

Change this error message for exceptions thrown outside of an action (like in Dispatcher setups or broken Ruby code) in public/500.html

+ +
+

We're sorry, but something went wrong.

+

We've been notified about this issue and we'll take a look at it shortly.

+
- \ No newline at end of file + diff --git a/public/favicon.ico b/public/favicon.ico old mode 100644 new mode 100755 diff --git a/public/images/attachment.png b/public/images/attachment.png old mode 100644 new mode 100755 diff --git a/public/images/d6deec.gif b/public/images/d6deec.gif old mode 100644 new mode 100755 diff --git a/public/images/deselect.png b/public/images/deselect.png old mode 100644 new mode 100755 diff --git a/public/images/list_closed.gif b/public/images/list_closed.gif old mode 100644 new mode 100755 diff --git a/public/images/list_opened.gif b/public/images/list_opened.gif old mode 100644 new mode 100755 diff --git a/public/images/noprogress.gif b/public/images/noprogress.gif old mode 100644 new mode 100755 diff --git a/public/images/rails.png b/public/images/rails.png new file mode 100755 index 0000000000000000000000000000000000000000..d5edc04e65f555e3ba4dcdaad39dc352e75b575e GIT binary patch literal 6646 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 AQ~&?~ literal 0 HcmV?d00001 diff --git a/public/images/select.png b/public/images/select.png old mode 100644 new mode 100755 diff --git a/public/images/white.gif b/public/images/white.gif old mode 100644 new mode 100755 diff --git a/public/images/white.png b/public/images/white.png old mode 100644 new mode 100755 diff --git a/public/javascripts/application.js b/public/javascripts/application.js old mode 100644 new mode 100755 diff --git a/public/javascripts/controls.js b/public/javascripts/controls.js old mode 100644 new mode 100755 index ca29aef..7392fb6 --- a/public/javascripts/controls.js +++ b/public/javascripts/controls.js @@ -1,6 +1,8 @@ -// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005-2008 Ivan Krstic (http://blogs.law.harvard.edu/ivan) -// (c) 2005-2008 Jon Tirsen (http://www.tirsen.com) +// script.aculo.us controls.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// (c) 2005-2009 Ivan Krstic (http://blogs.law.harvard.edu/ivan) +// (c) 2005-2009 Jon Tirsen (http://www.tirsen.com) // Contributors: // Richard Livsey // Rahul Bhargava diff --git a/public/javascripts/dragdrop.js b/public/javascripts/dragdrop.js old mode 100644 new mode 100755 index 07229f9..15c6dbc --- a/public/javascripts/dragdrop.js +++ b/public/javascripts/dragdrop.js @@ -1,5 +1,6 @@ -// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) -// (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz) +// script.aculo.us dragdrop.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // // script.aculo.us is freely distributable under the terms of an MIT-style license. // For details, see the script.aculo.us web site: http://script.aculo.us/ @@ -311,7 +312,7 @@ var Draggable = Class.create({ tag_name=='TEXTAREA')) return; var pointer = [Event.pointerX(event), Event.pointerY(event)]; - var pos = Position.cumulativeOffset(this.element); + var pos = this.element.cumulativeOffset(); this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) }); Draggables.activate(this); @@ -454,7 +455,7 @@ var Draggable = Class.create({ }, draw: function(point) { - var pos = Position.cumulativeOffset(this.element); + var pos = this.element.cumulativeOffset(); if(this.options.ghosting) { var r = Position.realOffset(this.element); pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY; @@ -730,7 +731,7 @@ var Sortable = { } // keep reference - this.sortables[element.id] = options; + this.sortables[element.identify()] = options; // for onupdate Draggables.addObserver(new SortableObserver(element, options.onUpdate)); @@ -825,7 +826,7 @@ var Sortable = { hide().addClassName('dropmarker').setStyle({position:'absolute'}); document.getElementsByTagName("body").item(0).appendChild(Sortable._marker); } - var offsets = Position.cumulativeOffset(dropon); + var offsets = dropon.cumulativeOffset(); Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'}); if(position=='after') diff --git a/public/javascripts/effects.js b/public/javascripts/effects.js old mode 100644 new mode 100755 index 5a639d2..c81e6c7 --- a/public/javascripts/effects.js +++ b/public/javascripts/effects.js @@ -1,4 +1,6 @@ -// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) +// script.aculo.us effects.js v1.8.3, Thu Oct 08 11:23:33 +0200 2009 + +// Copyright (c) 2005-2009 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) // Contributors: // Justin Palmer (http://encytemedia.com/) // Mark Pilgrim (http://diveintomark.org/) @@ -145,14 +147,13 @@ var Effect = { 'blind': ['BlindDown','BlindUp'], 'appear': ['Appear','Fade'] }, - toggle: function(element, effect) { + toggle: function(element, effect, options) { element = $(element); - effect = (effect || 'appear').toLowerCase(); - var options = Object.extend({ + effect = (effect || 'appear').toLowerCase(); + + return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({ queue: { position:'end', scope:(element.id || 'global'), limit: 1 } - }, arguments[2] || { }); - Effect[element.visible() ? - Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); + }, options || {})); } }; @@ -228,12 +229,6 @@ Effect.Queue = Effect.Queues.get('global'); Effect.Base = Class.create({ position: null, start: function(options) { - function codeForEvent(options,eventName){ - return ( - (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') + - (options[eventName] ? 'this.options.'+eventName+'(this);' : '') - ); - } if (options && options.transition === false) options.transition = Effect.Transitions.linear; this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { }); this.currentFrame = 0; diff --git a/public/javascripts/effects2.js b/public/javascripts/effects2.js old mode 100644 new mode 100755 diff --git a/public/javascripts/global.js b/public/javascripts/global.js old mode 100644 new mode 100755 diff --git a/public/javascripts/global_src.js b/public/javascripts/global_src.js old mode 100644 new mode 100755 diff --git a/public/javascripts/prototype.js b/public/javascripts/prototype.js old mode 100644 new mode 100755 index dfe8ab4..06249a6 --- a/public/javascripts/prototype.js +++ b/public/javascripts/prototype.js @@ -1,5 +1,5 @@ -/* Prototype JavaScript framework, version 1.6.0.3 - * (c) 2005-2008 Sam Stephenson +/* Prototype JavaScript framework, version 1.7_rc2 + * (c) 2005-2010 Sam Stephenson * * Prototype is freely distributable under the terms of an MIT-style license. * For details, see the Prototype web site: http://www.prototypejs.org/ @@ -7,32 +7,53 @@ *--------------------------------------------------------------------------*/ var Prototype = { - Version: '1.6.0.3', - Browser: { - IE: !!(window.attachEvent && - navigator.userAgent.indexOf('Opera') === -1), - Opera: navigator.userAgent.indexOf('Opera') > -1, - WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, - Gecko: navigator.userAgent.indexOf('Gecko') > -1 && - navigator.userAgent.indexOf('KHTML') === -1, - MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) - }, + Version: '1.7_rc2', + + Browser: (function(){ + var ua = navigator.userAgent; + var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]'; + return { + IE: !!window.attachEvent && !isOpera, + Opera: isOpera, + WebKit: ua.indexOf('AppleWebKit/') > -1, + Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1, + MobileSafari: /Apple.*Mobile/.test(ua) + } + })(), BrowserFeatures: { XPath: !!document.evaluate, + SelectorsAPI: !!document.querySelector, - ElementExtensions: !!window.HTMLElement, - SpecificElementExtensions: - document.createElement('div')['__proto__'] && - document.createElement('div')['__proto__'] !== - document.createElement('form')['__proto__'] + + ElementExtensions: (function() { + var constructor = window.Element || window.HTMLElement; + return !!(constructor && constructor.prototype); + })(), + SpecificElementExtensions: (function() { + if (typeof window.HTMLDivElement !== 'undefined') + return true; + + var div = document.createElement('div'), + form = document.createElement('form'), + isSupported = false; + + if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) { + isSupported = true; + } + + div = form = null; + + return isSupported; + })() }, ScriptFragment: ']*>([\\S\\s]*?)<\/script>', JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, emptyFunction: function() { }, + K: function(x) { return x } }; @@ -40,232 +61,8 @@ if (Prototype.Browser.MobileSafari) Prototype.BrowserFeatures.SpecificElementExtensions = false; -/* Based on Alex Arnell's inheritance implementation. */ -var Class = { - create: function() { - var parent = null, properties = $A(arguments); - if (Object.isFunction(properties[0])) - parent = properties.shift(); - - function klass() { - this.initialize.apply(this, arguments); - } - - Object.extend(klass, Class.Methods); - klass.superclass = parent; - klass.subclasses = []; - - if (parent) { - var subclass = function() { }; - subclass.prototype = parent.prototype; - klass.prototype = new subclass; - parent.subclasses.push(klass); - } - - for (var i = 0; i < properties.length; i++) - klass.addMethods(properties[i]); - - if (!klass.prototype.initialize) - klass.prototype.initialize = Prototype.emptyFunction; - - klass.prototype.constructor = klass; - - return klass; - } -}; - -Class.Methods = { - addMethods: function(source) { - var ancestor = this.superclass && this.superclass.prototype; - var properties = Object.keys(source); - - if (!Object.keys({ toString: true }).length) - properties.push("toString", "valueOf"); - - for (var i = 0, length = properties.length; i < length; i++) { - var property = properties[i], value = source[property]; - if (ancestor && Object.isFunction(value) && - value.argumentNames().first() == "$super") { - var method = value; - value = (function(m) { - return function() { return ancestor[m].apply(this, arguments) }; - })(property).wrap(method); - - value.valueOf = method.valueOf.bind(method); - value.toString = method.toString.bind(method); - } - this.prototype[property] = value; - } - - return this; - } -}; - var Abstract = { }; -Object.extend = function(destination, source) { - for (var property in source) - destination[property] = source[property]; - return destination; -}; - -Object.extend(Object, { - inspect: function(object) { - try { - if (Object.isUndefined(object)) return 'undefined'; - if (object === null) return 'null'; - return object.inspect ? object.inspect() : String(object); - } catch (e) { - if (e instanceof RangeError) return '...'; - throw e; - } - }, - - toJSON: function(object) { - var type = typeof object; - switch (type) { - case 'undefined': - case 'function': - case 'unknown': return; - case 'boolean': return object.toString(); - } - - if (object === null) return 'null'; - if (object.toJSON) return object.toJSON(); - if (Object.isElement(object)) return; - - var results = []; - for (var property in object) { - var value = Object.toJSON(object[property]); - if (!Object.isUndefined(value)) - results.push(property.toJSON() + ': ' + value); - } - - return '{' + results.join(', ') + '}'; - }, - - toQueryString: function(object) { - return $H(object).toQueryString(); - }, - - toHTML: function(object) { - return object && object.toHTML ? object.toHTML() : String.interpret(object); - }, - - keys: function(object) { - var keys = []; - for (var property in object) - keys.push(property); - return keys; - }, - - values: function(object) { - var values = []; - for (var property in object) - values.push(object[property]); - return values; - }, - - clone: function(object) { - return Object.extend({ }, object); - }, - - isElement: function(object) { - return !!(object && object.nodeType == 1); - }, - - isArray: function(object) { - return object != null && typeof object == "object" && - 'splice' in object && 'join' in object; - }, - - isHash: function(object) { - return object instanceof Hash; - }, - - isFunction: function(object) { - return typeof object == "function"; - }, - - isString: function(object) { - return typeof object == "string"; - }, - - isNumber: function(object) { - return typeof object == "number"; - }, - - isUndefined: function(object) { - return typeof object == "undefined"; - } -}); - -Object.extend(Function.prototype, { - argumentNames: function() { - var names = this.toString().match(/^[\s\(]*function[^(]*\(([^\)]*)\)/)[1] - .replace(/\s+/g, '').split(','); - return names.length == 1 && !names[0] ? [] : names; - }, - - bind: function() { - if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; - var __method = this, args = $A(arguments), object = args.shift(); - return function() { - return __method.apply(object, args.concat($A(arguments))); - } - }, - - bindAsEventListener: function() { - var __method = this, args = $A(arguments), object = args.shift(); - return function(event) { - return __method.apply(object, [event || window.event].concat(args)); - } - }, - - curry: function() { - if (!arguments.length) return this; - var __method = this, args = $A(arguments); - return function() { - return __method.apply(this, args.concat($A(arguments))); - } - }, - - delay: function() { - var __method = this, args = $A(arguments), timeout = args.shift() * 1000; - return window.setTimeout(function() { - return __method.apply(__method, args); - }, timeout); - }, - - defer: function() { - var args = [0.01].concat($A(arguments)); - return this.delay.apply(this, args); - }, - - wrap: function(wrapper) { - var __method = this; - return function() { - return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); - } - }, - - methodize: function() { - if (this._methodized) return this._methodized; - var __method = this; - return this._methodized = function() { - return __method.apply(null, [this].concat($A(arguments))); - }; - } -}); - -Date.prototype.toJSON = function() { - return '"' + this.getUTCFullYear() + '-' + - (this.getUTCMonth() + 1).toPaddedString(2) + '-' + - this.getUTCDate().toPaddedString(2) + 'T' + - this.getUTCHours().toPaddedString(2) + ':' + - this.getUTCMinutes().toPaddedString(2) + ':' + - this.getUTCSeconds().toPaddedString(2) + 'Z"'; -}; var Try = { these: function() { @@ -283,14 +80,400 @@ var Try = { } }; +/* Based on Alex Arnell's inheritance implementation. */ + +var Class = (function() { + + var IS_DONTENUM_BUGGY = (function(){ + for (var p in { toString: 1 }) { + if (p === 'toString') return false; + } + return true; + })(); + + function subclass() {}; + function create() { + var parent = null, properties = $A(arguments); + if (Object.isFunction(properties[0])) + parent = properties.shift(); + + function klass() { + this.initialize.apply(this, arguments); + } + + Object.extend(klass, Class.Methods); + klass.superclass = parent; + klass.subclasses = []; + + if (parent) { + subclass.prototype = parent.prototype; + klass.prototype = new subclass; + parent.subclasses.push(klass); + } + + for (var i = 0, length = properties.length; i < length; i++) + klass.addMethods(properties[i]); + + if (!klass.prototype.initialize) + klass.prototype.initialize = Prototype.emptyFunction; + + klass.prototype.constructor = klass; + return klass; + } + + function addMethods(source) { + var ancestor = this.superclass && this.superclass.prototype, + properties = Object.keys(source); + + if (IS_DONTENUM_BUGGY) { + if (source.toString != Object.prototype.toString) + properties.push("toString"); + if (source.valueOf != Object.prototype.valueOf) + properties.push("valueOf"); + } + + for (var i = 0, length = properties.length; i < length; i++) { + var property = properties[i], value = source[property]; + if (ancestor && Object.isFunction(value) && + value.argumentNames()[0] == "$super") { + var method = value; + value = (function(m) { + return function() { return ancestor[m].apply(this, arguments); }; + })(property).wrap(method); + + value.valueOf = method.valueOf.bind(method); + value.toString = method.toString.bind(method); + } + this.prototype[property] = value; + } + + return this; + } + + return { + create: create, + Methods: { + addMethods: addMethods + } + }; +})(); +(function() { + + var _toString = Object.prototype.toString, + NULL_TYPE = 'Null', + UNDEFINED_TYPE = 'Undefined', + BOOLEAN_TYPE = 'Boolean', + NUMBER_TYPE = 'Number', + STRING_TYPE = 'String', + OBJECT_TYPE = 'Object', + BOOLEAN_CLASS = '[object Boolean]', + NUMBER_CLASS = '[object Number]', + STRING_CLASS = '[object String]', + ARRAY_CLASS = '[object Array]', + NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON && + typeof JSON.stringify === 'function' && + JSON.stringify(0) === '0' && + typeof JSON.stringify(Prototype.K) === 'undefined'; + + function Type(o) { + switch(o) { + case null: return NULL_TYPE; + case (void 0): return UNDEFINED_TYPE; + } + var type = typeof o; + switch(type) { + case 'boolean': return BOOLEAN_TYPE; + case 'number': return NUMBER_TYPE; + case 'string': return STRING_TYPE; + } + return OBJECT_TYPE; + } + + function extend(destination, source) { + for (var property in source) + destination[property] = source[property]; + return destination; + } + + function inspect(object) { + try { + if (isUndefined(object)) return 'undefined'; + if (object === null) return 'null'; + return object.inspect ? object.inspect() : String(object); + } catch (e) { + if (e instanceof RangeError) return '...'; + throw e; + } + } + + function toJSON(value) { + return Str('', { '': value }, []); + } + + function Str(key, holder, stack) { + var value = holder[key], + type = typeof value; + + if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') { + value = value.toJSON(key); + } + + var _class = _toString.call(value); + + switch (_class) { + case NUMBER_CLASS: + case BOOLEAN_CLASS: + case STRING_CLASS: + value = value.valueOf(); + } + + switch (value) { + case null: return 'null'; + case true: return 'true'; + case false: return 'false'; + } + + type = typeof value; + switch (type) { + case 'string': + return value.inspect(true); + case 'number': + return isFinite(value) ? String(value) : 'null'; + case 'object': + + for (var i = 0, length = stack.length; i < length; i++) { + if (stack[i] === value) { throw new TypeError(); } + } + stack.push(value); + + var partial = []; + if (_class === ARRAY_CLASS) { + for (var i = 0, length = value.length; i < length; i++) { + var str = Str(i, value, stack); + partial.push(typeof str === 'undefined' ? 'null' : str); + } + partial = '[' + partial.join(',') + ']'; + } else { + var keys = Object.keys(value); + for (var i = 0, length = keys.length; i < length; i++) { + var key = keys[i], str = Str(key, value, stack); + if (typeof str !== "undefined") { + partial.push(key.inspect(true)+ ':' + str); + } + } + partial = '{' + partial.join(',') + '}'; + } + stack.pop(); + return partial; + } + } + + function stringify(object) { + return JSON.stringify(object); + } + + function toQueryString(object) { + return $H(object).toQueryString(); + } + + function toHTML(object) { + return object && object.toHTML ? object.toHTML() : String.interpret(object); + } + + function keys(object) { + if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); } + var results = []; + for (var property in object) { + if (object.hasOwnProperty(property)) { + results.push(property); + } + } + return results; + } + + function values(object) { + var results = []; + for (var property in object) + results.push(object[property]); + return results; + } + + function clone(object) { + return extend({ }, object); + } + + function isElement(object) { + return !!(object && object.nodeType == 1); + } + + function isArray(object) { + return _toString.call(object) === ARRAY_CLASS; + } + + var hasNativeIsArray = (typeof Array.isArray == 'function') + && Array.isArray([]) && !Array.isArray({}); + + if (hasNativeIsArray) { + isArray = Array.isArray; + } + + function isHash(object) { + return object instanceof Hash; + } + + function isFunction(object) { + return typeof object === "function"; + } + + function isString(object) { + return _toString.call(object) === STRING_CLASS; + } + + function isNumber(object) { + return _toString.call(object) === NUMBER_CLASS; + } + + function isUndefined(object) { + return typeof object === "undefined"; + } + + extend(Object, { + extend: extend, + inspect: inspect, + toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON, + toQueryString: toQueryString, + toHTML: toHTML, + keys: Object.keys || keys, + values: values, + clone: clone, + isElement: isElement, + isArray: isArray, + isHash: isHash, + isFunction: isFunction, + isString: isString, + isNumber: isNumber, + isUndefined: isUndefined + }); +})(); +Object.extend(Function.prototype, (function() { + var slice = Array.prototype.slice; + + function update(array, args) { + var arrayLength = array.length, length = args.length; + while (length--) array[arrayLength + length] = args[length]; + return array; + } + + function merge(array, args) { + array = slice.call(array, 0); + return update(array, args); + } + + function argumentNames() { + var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1] + .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '') + .replace(/\s+/g, '').split(','); + return names.length == 1 && !names[0] ? [] : names; + } + + function bind(context) { + if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; + var __method = this, args = slice.call(arguments, 1); + return function() { + var a = merge(args, arguments); + return __method.apply(context, a); + } + } + + function bindAsEventListener(context) { + var __method = this, args = slice.call(arguments, 1); + return function(event) { + var a = update([event || window.event], args); + return __method.apply(context, a); + } + } + + function curry() { + if (!arguments.length) return this; + var __method = this, args = slice.call(arguments, 0); + return function() { + var a = merge(args, arguments); + return __method.apply(this, a); + } + } + + function delay(timeout) { + var __method = this, args = slice.call(arguments, 1); + timeout = timeout * 1000; + return window.setTimeout(function() { + return __method.apply(__method, args); + }, timeout); + } + + function defer() { + var args = update([0.01], arguments); + return this.delay.apply(this, args); + } + + function wrap(wrapper) { + var __method = this; + return function() { + var a = update([__method.bind(this)], arguments); + return wrapper.apply(this, a); + } + } + + function methodize() { + if (this._methodized) return this._methodized; + var __method = this; + return this._methodized = function() { + var a = update([this], arguments); + return __method.apply(null, a); + }; + } + + return { + argumentNames: argumentNames, + bind: bind, + bindAsEventListener: bindAsEventListener, + curry: curry, + delay: delay, + defer: defer, + wrap: wrap, + methodize: methodize + } +})()); + + + +(function(proto) { + + + function toISOString() { + return this.getUTCFullYear() + '-' + + (this.getUTCMonth() + 1).toPaddedString(2) + '-' + + this.getUTCDate().toPaddedString(2) + 'T' + + this.getUTCHours().toPaddedString(2) + ':' + + this.getUTCMinutes().toPaddedString(2) + ':' + + this.getUTCSeconds().toPaddedString(2) + 'Z'; + } + + + function toJSON() { + return this.toISOString(); + } + + if (!proto.toISOString) proto.toISOString = toISOString; + if (!proto.toJSON) proto.toJSON = toJSON; + +})(Date.prototype); + + RegExp.prototype.match = RegExp.prototype.test; RegExp.escape = function(str) { return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); }; - -/*--------------------------------------------------------------------------*/ - var PeriodicalExecuter = Class.create({ initialize: function(callback, frequency) { this.callback = callback; @@ -319,8 +502,10 @@ var PeriodicalExecuter = Class.create({ try { this.currentlyExecuting = true; this.execute(); - } finally { this.currentlyExecuting = false; + } catch(e) { + this.currentlyExecuting = false; + throw e; } } } @@ -339,10 +524,28 @@ Object.extend(String, { } }); -Object.extend(String.prototype, { - gsub: function(pattern, replacement) { +Object.extend(String.prototype, (function() { + var NATIVE_JSON_PARSE_SUPPORT = window.JSON && + typeof JSON.parse === 'function' && + JSON.parse('{"test": true}').test; + + function prepareReplacement(replacement) { + if (Object.isFunction(replacement)) return replacement; + var template = new Template(replacement); + return function(match) { return template.evaluate(match) }; + } + + function gsub(pattern, replacement) { var result = '', source = this, match; - replacement = arguments.callee.prepareReplacement(replacement); + replacement = prepareReplacement(replacement); + + if (Object.isString(pattern)) + pattern = RegExp.escape(pattern); + + if (!(pattern.length || pattern.source)) { + replacement = replacement(''); + return replacement + source.split('').join(replacement) + replacement; + } while (source.length > 0) { if (match = source.match(pattern)) { @@ -354,76 +557,72 @@ Object.extend(String.prototype, { } } return result; - }, + } - sub: function(pattern, replacement, count) { - replacement = this.gsub.prepareReplacement(replacement); + function sub(pattern, replacement, count) { + replacement = prepareReplacement(replacement); count = Object.isUndefined(count) ? 1 : count; return this.gsub(pattern, function(match) { if (--count < 0) return match[0]; return replacement(match); }); - }, + } - scan: function(pattern, iterator) { + function scan(pattern, iterator) { this.gsub(pattern, iterator); return String(this); - }, + } - truncate: function(length, truncation) { + function truncate(length, truncation) { length = length || 30; truncation = Object.isUndefined(truncation) ? '...' : truncation; return this.length > length ? this.slice(0, length - truncation.length) + truncation : String(this); - }, + } - strip: function() { + function strip() { return this.replace(/^\s+/, '').replace(/\s+$/, ''); - }, + } - stripTags: function() { - return this.replace(/<\/?[^>]+>/gi, ''); - }, + function stripTags() { + return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, ''); + } - stripScripts: function() { + function stripScripts() { return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); - }, + } - extractScripts: function() { - var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); - var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); + function extractScripts() { + var matchAll = new RegExp(Prototype.ScriptFragment, 'img'), + matchOne = new RegExp(Prototype.ScriptFragment, 'im'); return (this.match(matchAll) || []).map(function(scriptTag) { return (scriptTag.match(matchOne) || ['', ''])[1]; }); - }, + } - evalScripts: function() { + function evalScripts() { return this.extractScripts().map(function(script) { return eval(script) }); - }, + } - escapeHTML: function() { - var self = arguments.callee; - self.text.data = this; - return self.div.innerHTML; - }, + function escapeHTML() { + return this.replace(/&/g,'&').replace(//g,'>'); + } - unescapeHTML: function() { - var div = new Element('div'); - div.innerHTML = this.stripTags(); - return div.childNodes[0] ? (div.childNodes.length > 1 ? - $A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : - div.childNodes[0].nodeValue) : ''; - }, + function unescapeHTML() { + return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&'); + } - toQueryParams: function(separator) { + + function toQueryParams(separator) { var match = this.strip().match(/([^?#]*)(#.*)?$/); if (!match) return { }; return match[1].split(separator || '&').inject({ }, function(hash, pair) { if ((pair = pair.split('='))[0]) { - var key = decodeURIComponent(pair.shift()); - var value = pair.length > 1 ? pair.join('=') : pair[0]; + var key = decodeURIComponent(pair.shift()), + value = pair.length > 1 ? pair.join('=') : pair[0]; + if (value != undefined) value = decodeURIComponent(value); if (key in hash) { @@ -434,128 +633,144 @@ Object.extend(String.prototype, { } return hash; }); - }, + } - toArray: function() { + function toArray() { return this.split(''); - }, + } - succ: function() { + function succ() { return this.slice(0, this.length - 1) + String.fromCharCode(this.charCodeAt(this.length - 1) + 1); - }, + } - times: function(count) { + function times(count) { return count < 1 ? '' : new Array(count + 1).join(this); - }, + } - camelize: function() { - var parts = this.split('-'), len = parts.length; - if (len == 1) return parts[0]; + function camelize() { + return this.replace(/-+(.)?/g, function(match, chr) { + return chr ? chr.toUpperCase() : ''; + }); + } - var camelized = this.charAt(0) == '-' - ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) - : parts[0]; - - for (var i = 1; i < len; i++) - camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); - - return camelized; - }, - - capitalize: function() { + function capitalize() { return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); - }, + } - underscore: function() { - return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); - }, + function underscore() { + return this.replace(/::/g, '/') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/-/g, '_') + .toLowerCase(); + } - dasherize: function() { - return this.gsub(/_/,'-'); - }, + function dasherize() { + return this.replace(/_/g, '-'); + } - inspect: function(useDoubleQuotes) { - var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { - var character = String.specialChar[match[0]]; - return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); + function inspect(useDoubleQuotes) { + var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) { + if (character in String.specialChar) { + return String.specialChar[character]; + } + return '\\u00' + character.charCodeAt().toPaddedString(2, 16); }); if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; return "'" + escapedString.replace(/'/g, '\\\'') + "'"; - }, + } - toJSON: function() { - return this.inspect(true); - }, + function unfilterJSON(filter) { + return this.replace(filter || Prototype.JSONFilter, '$1'); + } - unfilterJSON: function(filter) { - return this.sub(filter || Prototype.JSONFilter, '#{1}'); - }, - - isJSON: function() { + function isJSON() { var str = this; if (str.blank()) return false; - str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); - return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); - }, + str = str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@'); + str = str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); + str = str.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); + return (/^[\],:{}\s]*$/).test(str); + } - evalJSON: function(sanitize) { - var json = this.unfilterJSON(); + function evalJSON(sanitize) { + var json = this.unfilterJSON(), + cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; + if (cx.test(json)) { + json = json.replace(cx, function (a) { + return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); + }); + } try { if (!sanitize || json.isJSON()) return eval('(' + json + ')'); } catch (e) { } throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); - }, + } - include: function(pattern) { + function parseJSON() { + var json = this.unfilterJSON(); + return JSON.parse(json); + } + + function include(pattern) { return this.indexOf(pattern) > -1; - }, + } - startsWith: function(pattern) { - return this.indexOf(pattern) === 0; - }, + function startsWith(pattern) { + return this.lastIndexOf(pattern, 0) === 0; + } - endsWith: function(pattern) { + function endsWith(pattern) { var d = this.length - pattern.length; - return d >= 0 && this.lastIndexOf(pattern) === d; - }, + return d >= 0 && this.indexOf(pattern, d) === d; + } - empty: function() { + function empty() { return this == ''; - }, + } - blank: function() { + function blank() { return /^\s*$/.test(this); - }, + } - interpolate: function(object, pattern) { + function interpolate(object, pattern) { return new Template(this, pattern).evaluate(object); } -}); -if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { - escapeHTML: function() { - return this.replace(/&/g,'&').replace(//g,'>'); - }, - unescapeHTML: function() { - return this.stripTags().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); - } -}); - -String.prototype.gsub.prepareReplacement = function(replacement) { - if (Object.isFunction(replacement)) return replacement; - var template = new Template(replacement); - return function(match) { return template.evaluate(match) }; -}; - -String.prototype.parseQuery = String.prototype.toQueryParams; - -Object.extend(String.prototype.escapeHTML, { - div: document.createElement('div'), - text: document.createTextNode('') -}); - -String.prototype.escapeHTML.div.appendChild(String.prototype.escapeHTML.text); + return { + gsub: gsub, + sub: sub, + scan: scan, + truncate: truncate, + strip: String.prototype.trim || strip, + stripTags: stripTags, + stripScripts: stripScripts, + extractScripts: extractScripts, + evalScripts: evalScripts, + escapeHTML: escapeHTML, + unescapeHTML: unescapeHTML, + toQueryParams: toQueryParams, + parseQuery: toQueryParams, + toArray: toArray, + succ: succ, + times: times, + camelize: camelize, + capitalize: capitalize, + underscore: underscore, + dasherize: dasherize, + inspect: inspect, + unfilterJSON: unfilterJSON, + isJSON: isJSON, + evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON, + include: include, + startsWith: startsWith, + endsWith: endsWith, + empty: empty, + blank: blank, + interpolate: interpolate + }; +})()); var Template = Class.create({ initialize: function(template, pattern) { @@ -564,22 +779,23 @@ var Template = Class.create({ }, evaluate: function(object) { - if (Object.isFunction(object.toTemplateReplacements)) + if (object && Object.isFunction(object.toTemplateReplacements)) object = object.toTemplateReplacements(); return this.template.gsub(this.pattern, function(match) { - if (object == null) return ''; + if (object == null) return (match[1] + ''); var before = match[1] || ''; if (before == '\\') return match[2]; - var ctx = object, expr = match[3]; - var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + var ctx = object, expr = match[3], + pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; + match = pattern.exec(expr); if (match == null) return before; while (match != null) { - var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; + var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1]; ctx = ctx[comp]; if (null == ctx || '' == match[3]) break; expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); @@ -594,8 +810,8 @@ Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; var $break = { }; -var Enumerable = { - each: function(iterator, context) { +var Enumerable = (function() { + function each(iterator, context) { var index = 0; try { this._each(function(value) { @@ -605,17 +821,17 @@ var Enumerable = { if (e != $break) throw e; } return this; - }, + } - eachSlice: function(number, iterator, context) { + function eachSlice(number, iterator, context) { var index = -number, slices = [], array = this.toArray(); if (number < 1) return array; while ((index += number) < array.length) slices.push(array.slice(index, index+number)); return slices.collect(iterator, context); - }, + } - all: function(iterator, context) { + function all(iterator, context) { iterator = iterator || Prototype.K; var result = true; this.each(function(value, index) { @@ -623,9 +839,9 @@ var Enumerable = { if (!result) throw $break; }); return result; - }, + } - any: function(iterator, context) { + function any(iterator, context) { iterator = iterator || Prototype.K; var result = false; this.each(function(value, index) { @@ -633,18 +849,18 @@ var Enumerable = { throw $break; }); return result; - }, + } - collect: function(iterator, context) { + function collect(iterator, context) { iterator = iterator || Prototype.K; var results = []; this.each(function(value, index) { results.push(iterator.call(context, value, index)); }); return results; - }, + } - detect: function(iterator, context) { + function detect(iterator, context) { var result; this.each(function(value, index) { if (iterator.call(context, value, index)) { @@ -653,32 +869,32 @@ var Enumerable = { } }); return result; - }, + } - findAll: function(iterator, context) { + function findAll(iterator, context) { var results = []; this.each(function(value, index) { if (iterator.call(context, value, index)) results.push(value); }); return results; - }, + } - grep: function(filter, iterator, context) { + function grep(filter, iterator, context) { iterator = iterator || Prototype.K; var results = []; if (Object.isString(filter)) - filter = new RegExp(filter); + filter = new RegExp(RegExp.escape(filter)); this.each(function(value, index) { if (filter.match(value)) results.push(iterator.call(context, value, index)); }); return results; - }, + } - include: function(object) { + function include(object) { if (Object.isFunction(this.indexOf)) if (this.indexOf(object) != -1) return true; @@ -690,31 +906,31 @@ var Enumerable = { } }); return found; - }, + } - inGroupsOf: function(number, fillWith) { + function inGroupsOf(number, fillWith) { fillWith = Object.isUndefined(fillWith) ? null : fillWith; return this.eachSlice(number, function(slice) { while(slice.length < number) slice.push(fillWith); return slice; }); - }, + } - inject: function(memo, iterator, context) { + function inject(memo, iterator, context) { this.each(function(value, index) { memo = iterator.call(context, memo, value, index); }); return memo; - }, + } - invoke: function(method) { + function invoke(method) { var args = $A(arguments).slice(1); return this.map(function(value) { return value[method].apply(value, args); }); - }, + } - max: function(iterator, context) { + function max(iterator, context) { iterator = iterator || Prototype.K; var result; this.each(function(value, index) { @@ -723,9 +939,9 @@ var Enumerable = { result = value; }); return result; - }, + } - min: function(iterator, context) { + function min(iterator, context) { iterator = iterator || Prototype.K; var result; this.each(function(value, index) { @@ -734,9 +950,9 @@ var Enumerable = { result = value; }); return result; - }, + } - partition: function(iterator, context) { + function partition(iterator, context) { iterator = iterator || Prototype.K; var trues = [], falses = []; this.each(function(value, index) { @@ -744,26 +960,26 @@ var Enumerable = { trues : falses).push(value); }); return [trues, falses]; - }, + } - pluck: function(property) { + function pluck(property) { var results = []; this.each(function(value) { results.push(value[property]); }); return results; - }, + } - reject: function(iterator, context) { + function reject(iterator, context) { var results = []; this.each(function(value, index) { if (!iterator.call(context, value, index)) results.push(value); }); return results; - }, + } - sortBy: function(iterator, context) { + function sortBy(iterator, context) { return this.map(function(value, index) { return { value: value, @@ -773,13 +989,13 @@ var Enumerable = { var a = left.criteria, b = right.criteria; return a < b ? -1 : a > b ? 1 : 0; }).pluck('value'); - }, + } - toArray: function() { + function toArray() { return this.map(); - }, + } - zip: function() { + function zip() { var iterator = Prototype.K, args = $A(arguments); if (Object.isFunction(args.last())) iterator = args.pop(); @@ -788,159 +1004,66 @@ var Enumerable = { return this.map(function(value, index) { return iterator(collections.pluck(index)); }); - }, + } - size: function() { + function size() { return this.toArray().length; - }, + } - inspect: function() { + function inspect() { return '#'; } -}; -Object.extend(Enumerable, { - map: Enumerable.collect, - find: Enumerable.detect, - select: Enumerable.findAll, - filter: Enumerable.findAll, - member: Enumerable.include, - entries: Enumerable.toArray, - every: Enumerable.all, - some: Enumerable.any -}); + + + + + + + + + return { + each: each, + eachSlice: eachSlice, + all: all, + every: all, + any: any, + some: any, + collect: collect, + map: collect, + detect: detect, + findAll: findAll, + select: findAll, + filter: findAll, + grep: grep, + include: include, + member: include, + inGroupsOf: inGroupsOf, + inject: inject, + invoke: invoke, + max: max, + min: min, + partition: partition, + pluck: pluck, + reject: reject, + sortBy: sortBy, + toArray: toArray, + entries: toArray, + zip: zip, + size: size, + inspect: inspect, + find: detect + }; +})(); + function $A(iterable) { if (!iterable) return []; - if (iterable.toArray) return iterable.toArray(); + if ('toArray' in Object(iterable)) return iterable.toArray(); var length = iterable.length || 0, results = new Array(length); while (length--) results[length] = iterable[length]; return results; } -if (Prototype.Browser.WebKit) { - $A = function(iterable) { - if (!iterable) return []; - // In Safari, only use the `toArray` method if it's not a NodeList. - // A NodeList is a function, has an function `item` property, and a numeric - // `length` property. Adapted from Google Doctype. - if (!(typeof iterable === 'function' && typeof iterable.length === - 'number' && typeof iterable.item === 'function') && iterable.toArray) - return iterable.toArray(); - var length = iterable.length || 0, results = new Array(length); - while (length--) results[length] = iterable[length]; - return results; - }; -} - -Array.from = $A; - -Object.extend(Array.prototype, Enumerable); - -if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; - -Object.extend(Array.prototype, { - _each: function(iterator) { - for (var i = 0, length = this.length; i < length; i++) - iterator(this[i]); - }, - - clear: function() { - this.length = 0; - return this; - }, - - first: function() { - return this[0]; - }, - - last: function() { - return this[this.length - 1]; - }, - - compact: function() { - return this.select(function(value) { - return value != null; - }); - }, - - flatten: function() { - return this.inject([], function(array, value) { - return array.concat(Object.isArray(value) ? - value.flatten() : [value]); - }); - }, - - without: function() { - var values = $A(arguments); - return this.select(function(value) { - return !values.include(value); - }); - }, - - reverse: function(inline) { - return (inline !== false ? this : this.toArray())._reverse(); - }, - - reduce: function() { - return this.length > 1 ? this : this[0]; - }, - - uniq: function(sorted) { - return this.inject([], function(array, value, index) { - if (0 == index || (sorted ? array.last() != value : !array.include(value))) - array.push(value); - return array; - }); - }, - - intersect: function(array) { - return this.uniq().findAll(function(item) { - return array.detect(function(value) { return item === value }); - }); - }, - - clone: function() { - return [].concat(this); - }, - - size: function() { - return this.length; - }, - - inspect: function() { - return '[' + this.map(Object.inspect).join(', ') + ']'; - }, - - toJSON: function() { - var results = []; - this.each(function(object) { - var value = Object.toJSON(object); - if (!Object.isUndefined(value)) results.push(value); - }); - return '[' + results.join(', ') + ']'; - } -}); - -// use native browser JS 1.6 implementation if available -if (Object.isFunction(Array.prototype.forEach)) - Array.prototype._each = Array.prototype.forEach; - -if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { - i || (i = 0); - var length = this.length; - if (i < 0) i = length + i; - for (; i < length; i++) - if (this[i] === item) return i; - return -1; -}; - -if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { - i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; - var n = this.slice(0, i).reverse().indexOf(item); - return (n < 0) ? n : i - n - 1; -}; - -Array.prototype.toArray = Array.prototype.clone; function $w(string) { if (!Object.isString(string)) return []; @@ -948,176 +1071,342 @@ function $w(string) { return string ? string.split(/\s+/) : []; } -if (Prototype.Browser.Opera){ - Array.prototype.concat = function() { - var array = []; - for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); +Array.from = $A; + + +(function() { + var arrayProto = Array.prototype, + slice = arrayProto.slice, + _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available + + function each(iterator) { + for (var i = 0, length = this.length; i < length; i++) + iterator(this[i]); + } + if (!_each) _each = each; + + function clear() { + this.length = 0; + return this; + } + + function first() { + return this[0]; + } + + function last() { + return this[this.length - 1]; + } + + function compact() { + return this.select(function(value) { + return value != null; + }); + } + + function flatten() { + return this.inject([], function(array, value) { + if (Object.isArray(value)) + return array.concat(value.flatten()); + array.push(value); + return array; + }); + } + + function without() { + var values = slice.call(arguments, 0); + return this.select(function(value) { + return !values.include(value); + }); + } + + function reverse(inline) { + return (inline === false ? this.toArray() : this)._reverse(); + } + + function uniq(sorted) { + return this.inject([], function(array, value, index) { + if (0 == index || (sorted ? array.last() != value : !array.include(value))) + array.push(value); + return array; + }); + } + + function intersect(array) { + return this.uniq().findAll(function(item) { + return array.detect(function(value) { return item === value }); + }); + } + + + function clone() { + return slice.call(this, 0); + } + + function size() { + return this.length; + } + + function inspect() { + return '[' + this.map(Object.inspect).join(', ') + ']'; + } + + function indexOf(item, i) { + i || (i = 0); + var length = this.length; + if (i < 0) i = length + i; + for (; i < length; i++) + if (this[i] === item) return i; + return -1; + } + + function lastIndexOf(item, i) { + i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; + var n = this.slice(0, i).reverse().indexOf(item); + return (n < 0) ? n : i - n - 1; + } + + function concat() { + var array = slice.call(this, 0), item; for (var i = 0, length = arguments.length; i < length; i++) { - if (Object.isArray(arguments[i])) { - for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) - array.push(arguments[i][j]); + item = arguments[i]; + if (Object.isArray(item) && !('callee' in item)) { + for (var j = 0, arrayLength = item.length; j < arrayLength; j++) + array.push(item[j]); } else { - array.push(arguments[i]); + array.push(item); } } return array; - }; -} -Object.extend(Number.prototype, { - toColorPart: function() { - return this.toPaddedString(2, 16); - }, - - succ: function() { - return this + 1; - }, - - times: function(iterator, context) { - $R(0, this, true).each(iterator, context); - return this; - }, - - toPaddedString: function(length, radix) { - var string = this.toString(radix || 10); - return '0'.times(length - string.length) + string; - }, - - toJSON: function() { - return isFinite(this) ? this.toString() : 'null'; } -}); -$w('abs round ceil floor').each(function(method){ - Number.prototype[method] = Math[method].methodize(); -}); + Object.extend(arrayProto, Enumerable); + + if (!arrayProto._reverse) + arrayProto._reverse = arrayProto.reverse; + + Object.extend(arrayProto, { + _each: _each, + clear: clear, + first: first, + last: last, + compact: compact, + flatten: flatten, + without: without, + reverse: reverse, + uniq: uniq, + intersect: intersect, + clone: clone, + toArray: clone, + size: size, + inspect: inspect + }); + + var CONCAT_ARGUMENTS_BUGGY = (function() { + return [].concat(arguments)[0][0] !== 1; + })(1,2) + + if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat; + + if (!arrayProto.indexOf) arrayProto.indexOf = indexOf; + if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf; +})(); function $H(object) { return new Hash(object); }; var Hash = Class.create(Enumerable, (function() { + function initialize(object) { + this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); + } + + + function _each(iterator) { + for (var key in this._object) { + var value = this._object[key], pair = [key, value]; + pair.key = key; + pair.value = value; + iterator(pair); + } + } + + function set(key, value) { + return this._object[key] = value; + } + + function get(key) { + if (this._object[key] !== Object.prototype[key]) + return this._object[key]; + } + + function unset(key) { + var value = this._object[key]; + delete this._object[key]; + return value; + } + + function toObject() { + return Object.clone(this._object); + } + + + + function keys() { + return this.pluck('key'); + } + + function values() { + return this.pluck('value'); + } + + function index(value) { + var match = this.detect(function(pair) { + return pair.value === value; + }); + return match && match.key; + } + + function merge(object) { + return this.clone().update(object); + } + + function update(object) { + return new Hash(object).inject(this, function(result, pair) { + result.set(pair.key, pair.value); + return result; + }); + } function toQueryPair(key, value) { if (Object.isUndefined(value)) return key; return key + '=' + encodeURIComponent(String.interpret(value)); } - return { - initialize: function(object) { - this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); - }, + function toQueryString() { + return this.inject([], function(results, pair) { + var key = encodeURIComponent(pair.key), values = pair.value; - _each: function(iterator) { - for (var key in this._object) { - var value = this._object[key], pair = [key, value]; - pair.key = key; - pair.value = value; - iterator(pair); - } - }, - - set: function(key, value) { - return this._object[key] = value; - }, - - get: function(key) { - // simulating poorly supported hasOwnProperty - if (this._object[key] !== Object.prototype[key]) - return this._object[key]; - }, - - unset: function(key) { - var value = this._object[key]; - delete this._object[key]; - return value; - }, - - toObject: function() { - return Object.clone(this._object); - }, - - keys: function() { - return this.pluck('key'); - }, - - values: function() { - return this.pluck('value'); - }, - - index: function(value) { - var match = this.detect(function(pair) { - return pair.value === value; - }); - return match && match.key; - }, - - merge: function(object) { - return this.clone().update(object); - }, - - update: function(object) { - return new Hash(object).inject(this, function(result, pair) { - result.set(pair.key, pair.value); - return result; - }); - }, - - toQueryString: function() { - return this.inject([], function(results, pair) { - var key = encodeURIComponent(pair.key), values = pair.value; - - if (values && typeof values == 'object') { - if (Object.isArray(values)) - return results.concat(values.map(toQueryPair.curry(key))); - } else results.push(toQueryPair(key, values)); - return results; - }).join('&'); - }, - - inspect: function() { - return '#'; - }, - - toJSON: function() { - return Object.toJSON(this.toObject()); - }, - - clone: function() { - return new Hash(this); - } + if (values && typeof values == 'object') { + if (Object.isArray(values)) + return results.concat(values.map(toQueryPair.curry(key))); + } else results.push(toQueryPair(key, values)); + return results; + }).join('&'); } + + function inspect() { + return '#'; + } + + function clone() { + return new Hash(this); + } + + return { + initialize: initialize, + _each: _each, + set: set, + get: get, + unset: unset, + toObject: toObject, + toTemplateReplacements: toObject, + keys: keys, + values: values, + index: index, + merge: merge, + update: update, + toQueryString: toQueryString, + inspect: inspect, + toJSON: toObject, + clone: clone + }; })()); -Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; Hash.from = $H; -var ObjectRange = Class.create(Enumerable, { - initialize: function(start, end, exclusive) { +Object.extend(Number.prototype, (function() { + function toColorPart() { + return this.toPaddedString(2, 16); + } + + function succ() { + return this + 1; + } + + function times(iterator, context) { + $R(0, this, true).each(iterator, context); + return this; + } + + function toPaddedString(length, radix) { + var string = this.toString(radix || 10); + return '0'.times(length - string.length) + string; + } + + function abs() { + return Math.abs(this); + } + + function round() { + return Math.round(this); + } + + function ceil() { + return Math.ceil(this); + } + + function floor() { + return Math.floor(this); + } + + return { + toColorPart: toColorPart, + succ: succ, + times: times, + toPaddedString: toPaddedString, + abs: abs, + round: round, + ceil: ceil, + floor: floor + }; +})()); + +function $R(start, end, exclusive) { + return new ObjectRange(start, end, exclusive); +} + +var ObjectRange = Class.create(Enumerable, (function() { + function initialize(start, end, exclusive) { this.start = start; this.end = end; this.exclusive = exclusive; - }, + } - _each: function(iterator) { + function _each(iterator) { var value = this.start; while (this.include(value)) { iterator(value); value = value.succ(); } - }, + } - include: function(value) { + function include(value) { if (value < this.start) return false; if (this.exclusive) return value < this.end; return value <= this.end; } -}); -var $R = function(start, end, exclusive) { - return new ObjectRange(start, end, exclusive); -}; + return { + initialize: initialize, + _each: _each, + include: include + }; +})()); + + var Ajax = { getTransport: function() { @@ -1164,7 +1453,6 @@ Ajax.Responders.register({ onCreate: function() { Ajax.activeRequestCount++ }, onComplete: function() { Ajax.activeRequestCount-- } }); - Ajax.Base = Class.create({ initialize: function(options) { this.options = { @@ -1186,7 +1474,6 @@ Ajax.Base = Class.create({ this.options.parameters = this.options.parameters.toObject(); } }); - Ajax.Request = Class.create(Ajax.Base, { _complete: false, @@ -1202,7 +1489,6 @@ Ajax.Request = Class.create(Ajax.Base, { var params = Object.clone(this.options.parameters); if (!['get', 'post'].include(this.method)) { - // simulate other verbs over post params['_method'] = this.method; this.method = 'post'; } @@ -1210,7 +1496,6 @@ Ajax.Request = Class.create(Ajax.Base, { this.parameters = params; if (params = Object.toQueryString(params)) { - // when GET, append parameters to URL if (this.method == 'get') this.url += (this.url.include('?') ? '&' : '?') + params; else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) @@ -1269,7 +1554,6 @@ Ajax.Request = Class.create(Ajax.Base, { headers['Connection'] = 'close'; } - // user-defined headers if (typeof this.options.requestHeaders == 'object') { var extras = this.options.requestHeaders; @@ -1323,7 +1607,6 @@ Ajax.Request = Class.create(Ajax.Base, { } if (state == 'Complete') { - // avoid memory leak in MSIE: clean up this.transport.onreadystatechange = Prototype.emptyFunction; } }, @@ -1340,7 +1623,7 @@ Ajax.Request = Class.create(Ajax.Base, { getHeader: function(name) { try { return this.transport.getResponseHeader(name) || null; - } catch (e) { return null } + } catch (e) { return null; } }, evalResponse: function() { @@ -1360,20 +1643,27 @@ Ajax.Request = Class.create(Ajax.Base, { Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; + + + + + + + Ajax.Response = Class.create({ initialize: function(request){ this.request = request; var transport = this.transport = request.transport, readyState = this.readyState = transport.readyState; - if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { + if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { this.status = this.getStatus(); this.statusText = this.getStatusText(); this.responseText = String.interpret(transport.responseText); this.headerJSON = this._getHeaderJSON(); } - if(readyState == 4) { + if (readyState == 4) { var xml = transport.responseXML; this.responseXML = Object.isUndefined(xml) ? null : xml; this.responseJSON = this._getResponseJSON(); @@ -1381,6 +1671,7 @@ Ajax.Response = Class.create({ }, status: 0, + statusText: '', getStatus: Ajax.Request.prototype.getStatus, @@ -1510,6 +1801,8 @@ Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); + + function $(element) { if (arguments.length > 1) { for (var i = 0, elements = [], length = arguments.length; i < length; i++) @@ -1534,10 +1827,9 @@ if (Prototype.BrowserFeatures.XPath) { /*--------------------------------------------------------------------------*/ -if (!window.Node) var Node = { }; +if (!Node) var Node = { }; if (!Node.ELEMENT_NODE) { - // DOM level 2 ECMAScript Language Binding Object.extend(Node, { ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, @@ -1554,13 +1846,27 @@ if (!Node.ELEMENT_NODE) { }); } -(function() { - var element = this.Element; - this.Element = function(tagName, attributes) { + + +(function(global) { + + var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){ + try { + var el = document.createElement(''); + return el.tagName.toLowerCase() === 'input' && el.name === 'x'; + } + catch(err) { + return false; + } + })(); + + var element = global.Element; + + global.Element = function(tagName, attributes) { attributes = attributes || { }; tagName = tagName.toLowerCase(); var cache = Element.cache; - if (Prototype.Browser.IE && attributes.name) { + if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) { tagName = '<' + tagName + ' name="' + attributes.name + '">'; delete attributes.name; return Element.writeAttribute(document.createElement(tagName), attributes); @@ -1568,12 +1874,24 @@ if (!Node.ELEMENT_NODE) { if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); }; - Object.extend(this.Element, element || { }); - if (element) this.Element.prototype = element.prototype; -}).call(window); + Object.extend(global.Element, element || { }); + if (element) global.Element.prototype = element.prototype; + +})(this); + +Element.idCounter = 1; Element.cache = { }; +function purgeElement(element) { + var uid = element._prototypeUID; + if (uid) { + Element.stopObserving(element); + element._prototypeUID = void 0; + delete Element.Storage[uid]; + } +} + Element.Methods = { visible: function(element) { return $(element).style.display != 'none'; @@ -1603,15 +1921,93 @@ Element.Methods = { return element; }, - update: function(element, content) { - element = $(element); - if (content && content.toElement) content = content.toElement(); - if (Object.isElement(content)) return element.update().insert(content); - content = Object.toHTML(content); - element.innerHTML = content.stripScripts(); - content.evalScripts.bind(content).defer(); - return element; - }, + update: (function(){ + + var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){ + var el = document.createElement("select"), + isBuggy = true; + el.innerHTML = ""; + if (el.options && el.options[0]) { + isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION"; + } + el = null; + return isBuggy; + })(); + + var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){ + try { + var el = document.createElement("table"); + if (el && el.tBodies) { + el.innerHTML = "test"; + var isBuggy = typeof el.tBodies[0] == "undefined"; + el = null; + return isBuggy; + } + } catch (e) { + return true; + } + })(); + + var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () { + var s = document.createElement("script"), + isBuggy = false; + try { + s.appendChild(document.createTextNode("")); + isBuggy = !s.firstChild || + s.firstChild && s.firstChild.nodeType !== 3; + } catch (e) { + isBuggy = true; + } + s = null; + return isBuggy; + })(); + + function update(element, content) { + element = $(element); + + var descendants = element.getElementsByTagName('*'), + i = descendants.length; + while (i--) purgeElement(descendants[i]); + + if (content && content.toElement) + content = content.toElement(); + + if (Object.isElement(content)) + return element.update().insert(content); + + content = Object.toHTML(content); + + var tagName = element.tagName.toUpperCase(); + + if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) { + element.text = content; + return element; + } + + if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) { + if (tagName in Element._insertionTranslations.tags) { + while (element.firstChild) { + element.removeChild(element.firstChild); + } + Element._getContentFromAnonymousElement(tagName, content.stripScripts()) + .each(function(node) { + element.appendChild(node) + }); + } + else { + element.innerHTML = content.stripScripts(); + } + } + else { + element.innerHTML = content.stripScripts(); + } + + content.evalScripts.bind(content).defer(); + return element; + } + + return update; + })(), replace: function(element, content) { element = $(element); @@ -1679,28 +2075,35 @@ Element.Methods = { element = $(element); var result = '<' + element.tagName.toLowerCase(); $H({'id': 'id', 'className': 'class'}).each(function(pair) { - var property = pair.first(), attribute = pair.last(); - var value = (element[property] || '').toString(); + var property = pair.first(), + attribute = pair.last(), + value = (element[property] || '').toString(); if (value) result += ' ' + attribute + '=' + value.inspect(true); }); return result + '>'; }, - recursivelyCollect: function(element, property) { + recursivelyCollect: function(element, property, maximumLength) { element = $(element); + maximumLength = maximumLength || -1; var elements = []; - while (element = element[property]) + + while (element = element[property]) { if (element.nodeType == 1) elements.push(Element.extend(element)); + if (elements.length == maximumLength) + break; + } + return elements; }, ancestors: function(element) { - return $(element).recursivelyCollect('parentNode'); + return Element.recursivelyCollect(element, 'parentNode'); }, descendants: function(element) { - return $(element).select("*"); + return Element.select(element, "*"); }, firstDescendant: function(element) { @@ -1710,78 +2113,96 @@ Element.Methods = { }, immediateDescendants: function(element) { - if (!(element = $(element).firstChild)) return []; - while (element && element.nodeType != 1) element = element.nextSibling; - if (element) return [element].concat($(element).nextSiblings()); - return []; + var results = [], child = $(element).firstChild; + while (child) { + if (child.nodeType === 1) { + results.push(Element.extend(child)); + } + child = child.nextSibling; + } + return results; }, - previousSiblings: function(element) { - return $(element).recursivelyCollect('previousSibling'); + previousSiblings: function(element, maximumLength) { + return Element.recursivelyCollect(element, 'previousSibling'); }, nextSiblings: function(element) { - return $(element).recursivelyCollect('nextSibling'); + return Element.recursivelyCollect(element, 'nextSibling'); }, siblings: function(element) { element = $(element); - return element.previousSiblings().reverse().concat(element.nextSiblings()); + return Element.previousSiblings(element).reverse() + .concat(Element.nextSiblings(element)); }, match: function(element, selector) { + element = $(element); if (Object.isString(selector)) - selector = new Selector(selector); - return selector.match($(element)); + return Prototype.Selector.match(element, selector); + return selector.match(element); }, up: function(element, expression, index) { element = $(element); if (arguments.length == 1) return $(element.parentNode); - var ancestors = element.ancestors(); + var ancestors = Element.ancestors(element); return Object.isNumber(expression) ? ancestors[expression] : - Selector.findElement(ancestors, expression, index); + Prototype.Selector.find(ancestors, expression, index); }, down: function(element, expression, index) { element = $(element); - if (arguments.length == 1) return element.firstDescendant(); - return Object.isNumber(expression) ? element.descendants()[expression] : + if (arguments.length == 1) return Element.firstDescendant(element); + return Object.isNumber(expression) ? Element.descendants(element)[expression] : Element.select(element, expression)[index || 0]; }, previous: function(element, expression, index) { element = $(element); - if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); - var previousSiblings = element.previousSiblings(); - return Object.isNumber(expression) ? previousSiblings[expression] : - Selector.findElement(previousSiblings, expression, index); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.previousSiblings(), expression, index); + } else { + return element.recursivelyCollect("previousSibling", index + 1)[index]; + } }, next: function(element, expression, index) { element = $(element); - if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); - var nextSiblings = element.nextSiblings(); - return Object.isNumber(expression) ? nextSiblings[expression] : - Selector.findElement(nextSiblings, expression, index); + if (Object.isNumber(expression)) index = expression, expression = false; + if (!Object.isNumber(index)) index = 0; + + if (expression) { + return Prototype.Selector.find(element.nextSiblings(), expression, index); + } else { + var maximumLength = Object.isNumber(index) ? index + 1 : 1; + return element.recursivelyCollect("nextSibling", index + 1)[index]; + } }, - select: function() { - var args = $A(arguments), element = $(args.shift()); - return Selector.findChildElements(element, args); + + select: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element); }, - adjacent: function() { - var args = $A(arguments), element = $(args.shift()); - return Selector.findChildElements(element.parentNode, args).without(element); + adjacent: function(element) { + element = $(element); + var expressions = Array.prototype.slice.call(arguments, 1).join(', '); + return Prototype.Selector.select(expressions, element.parentNode).without(element); }, identify: function(element) { element = $(element); - var id = element.readAttribute('id'), self = arguments.callee; + var id = Element.readAttribute(element, 'id'); if (id) return id; - do { id = 'anonymous_element_' + self.counter++ } while ($(id)); - element.writeAttribute('id', id); + do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id)); + Element.writeAttribute(element, 'id', id); return id; }, @@ -1820,11 +2241,11 @@ Element.Methods = { }, getHeight: function(element) { - return $(element).getDimensions().height; + return Element.getDimensions(element).height; }, getWidth: function(element) { - return $(element).getDimensions().width; + return Element.getDimensions(element).width; }, classNames: function(element) { @@ -1840,7 +2261,7 @@ Element.Methods = { addClassName: function(element, className) { if (!(element = $(element))) return; - if (!element.hasClassName(className)) + if (!Element.hasClassName(element, className)) element.className += (element.className ? ' ' : '') + className; return element; }, @@ -1854,11 +2275,10 @@ Element.Methods = { toggleClassName: function(element, className) { if (!(element = $(element))) return; - return element[element.hasClassName(className) ? - 'removeClassName' : 'addClassName'](className); + return Element[Element.hasClassName(element, className) ? + 'removeClassName' : 'addClassName'](element, className); }, - // removes whitespace-only text node children cleanWhitespace: function(element) { element = $(element); var node = element.firstChild; @@ -1892,7 +2312,7 @@ Element.Methods = { scrollTo: function(element) { element = $(element); - var pos = element.cumulativeOffset(); + var pos = Element.cumulativeOffset(element); window.scrollTo(pos[0], pos[1]); return element; }, @@ -1938,37 +2358,12 @@ Element.Methods = { return element; }, - getDimensions: function(element) { - element = $(element); - var display = element.getStyle('display'); - if (display != 'none' && display != null) // Safari bug - return {width: element.offsetWidth, height: element.offsetHeight}; - - // All *Width and *Height properties give 0 on elements with display none, - // so enable the element temporarily - var els = element.style; - var originalVisibility = els.visibility; - var originalPosition = els.position; - var originalDisplay = els.display; - els.visibility = 'hidden'; - els.position = 'absolute'; - els.display = 'block'; - var originalWidth = element.clientWidth; - var originalHeight = element.clientHeight; - els.display = originalDisplay; - els.position = originalPosition; - els.visibility = originalVisibility; - return {width: originalWidth, height: originalHeight}; - }, - makePositioned: function(element) { element = $(element); var pos = Element.getStyle(element, 'position'); if (pos == 'static' || !pos) { element._madePositioned = true; element.style.position = 'relative'; - // Opera returns the offset relative to the positioning context, when an - // element is position relative but top and left have not been defined if (Prototype.Browser.Opera) { element.style.top = 0; element.style.left = 0; @@ -2009,11 +2404,13 @@ Element.Methods = { cumulativeOffset: function(element) { var valueT = 0, valueL = 0; - do { - valueT += element.offsetTop || 0; - valueL += element.offsetLeft || 0; - element = element.offsetParent; - } while (element); + if (element.parentNode) { + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + } return Element._returnOffset(valueL, valueT); }, @@ -2034,14 +2431,13 @@ Element.Methods = { absolutize: function(element) { element = $(element); - if (element.getStyle('position') == 'absolute') return element; - // Position.prepare(); // To be done manually by Scripty when it needs it. + if (Element.getStyle(element, 'position') == 'absolute') return element; - var offsets = element.positionedOffset(); - var top = offsets[1]; - var left = offsets[0]; - var width = element.clientWidth; - var height = element.clientHeight; + var offsets = Element.positionedOffset(element), + top = offsets[1], + left = offsets[0], + width = element.clientWidth, + height = element.clientHeight; element._originalLeft = left - parseFloat(element.style.left || 0); element._originalTop = top - parseFloat(element.style.top || 0); @@ -2058,12 +2454,11 @@ Element.Methods = { relativize: function(element) { element = $(element); - if (element.getStyle('position') == 'relative') return element; - // Position.prepare(); // To be done manually by Scripty when it needs it. + if (Element.getStyle(element, 'position') == 'relative') return element; element.style.position = 'relative'; - var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); - var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); + var top = parseFloat(element.style.top || 0) - (element._originalTop || 0), + left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); element.style.top = top + 'px'; element.style.left = left + 'px'; @@ -2094,14 +2489,14 @@ Element.Methods = { }, viewportOffset: function(forElement) { - var valueT = 0, valueL = 0; + var valueT = 0, + valueL = 0, + element = forElement; - var element = forElement; do { valueT += element.offsetTop || 0; valueL += element.offsetLeft || 0; - // Safari fix if (element.offsetParent == document.body && Element.getStyle(element, 'position') == 'absolute') break; @@ -2128,28 +2523,21 @@ Element.Methods = { offsetLeft: 0 }, arguments[2] || { }); - // find page position of source source = $(source); - var p = source.viewportOffset(); + var p = Element.viewportOffset(source), delta = [0, 0], parent = null; - // find coordinate system to use element = $(element); - var delta = [0, 0]; - var parent = null; - // delta [0,0] will do fine with position: fixed elements, - // position:absolute needs offsetParent deltas + if (Element.getStyle(element, 'position') == 'absolute') { - parent = element.getOffsetParent(); - delta = parent.viewportOffset(); + parent = Element.getOffsetParent(element); + delta = Element.viewportOffset(parent); } - // correct by body offsets (fixes Safari) if (parent == document.body) { delta[0] -= document.body.offsetLeft; delta[1] -= document.body.offsetTop; } - // set position if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; if (options.setWidth) element.style.width = source.offsetWidth + 'px'; @@ -2158,10 +2546,9 @@ Element.Methods = { } }; -Element.Methods.identify.counter = 1; - Object.extend(Element.Methods, { getElementsBySelector: Element.Methods.select, + childElements: Element.Methods.immediateDescendants }); @@ -2182,11 +2569,8 @@ if (Prototype.Browser.Opera) { case 'left': case 'top': case 'right': case 'bottom': if (proceed(element, 'position') === 'static') return null; case 'height': case 'width': - // returns '0px' for hidden elements; we want it to return null if (!Element.visible(element)) return null; - // returns the border-box dimensions rather than the content-box - // dimensions, so we subtract padding and borders from the value var dim = parseInt(proceed(element, style), 10); if (dim !== element['offset' + style.capitalize()]) @@ -2219,14 +2603,10 @@ if (Prototype.Browser.Opera) { } else if (Prototype.Browser.IE) { - // IE doesn't report offsets correctly for static elements, so we change them - // to "relative" to get the values, then change them back. Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( function(proceed, element) { element = $(element); - // IE throws an error if element is not in document - try { element.offsetParent } - catch(e) { return $(document.body) } + if (!element.parentNode) return $(document.body); var position = element.getStyle('position'); if (position !== 'static') return proceed(element); element.setStyle({ position: 'relative' }); @@ -2240,12 +2620,9 @@ else if (Prototype.Browser.IE) { Element.Methods[method] = Element.Methods[method].wrap( function(proceed, element) { element = $(element); - try { element.offsetParent } - catch(e) { return Element._returnOffset(0,0) } + if (!element.parentNode) return Element._returnOffset(0, 0); var position = element.getStyle('position'); if (position !== 'static') return proceed(element); - // Trigger hasLayout on the offset parent so that IE6 reports - // accurate offsetTop and offsetLeft values for position: fixed. var offsetParent = element.getOffsetParent(); if (offsetParent && offsetParent.getStyle('position') === 'fixed') offsetParent.setStyle({ zoom: 1 }); @@ -2257,14 +2634,6 @@ else if (Prototype.Browser.IE) { ); }); - Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap( - function(proceed, element) { - try { element.offsetParent } - catch(e) { return Element._returnOffset(0,0) } - return proceed(element); - } - ); - Element.Methods.getStyle = function(element, style) { element = $(element); style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); @@ -2306,36 +2675,90 @@ else if (Prototype.Browser.IE) { return element; }; - Element._attributeTranslations = { - read: { - names: { - 'class': 'className', - 'for': 'htmlFor' - }, - values: { - _getAttr: function(element, attribute) { - return element.getAttribute(attribute, 2); + Element._attributeTranslations = (function(){ + + var classProp = 'className', + forProp = 'for', + el = document.createElement('div'); + + el.setAttribute(classProp, 'x'); + + if (el.className !== 'x') { + el.setAttribute('class', 'x'); + if (el.className === 'x') { + classProp = 'class'; + } + } + el = null; + + el = document.createElement('label'); + el.setAttribute(forProp, 'x'); + if (el.htmlFor !== 'x') { + el.setAttribute('htmlFor', 'x'); + if (el.htmlFor === 'x') { + forProp = 'htmlFor'; + } + } + el = null; + + return { + read: { + names: { + 'class': classProp, + 'className': classProp, + 'for': forProp, + 'htmlFor': forProp }, - _getAttrNode: function(element, attribute) { - var node = element.getAttributeNode(attribute); - return node ? node.value : ""; - }, - _getEv: function(element, attribute) { - attribute = element.getAttribute(attribute); - return attribute ? attribute.toString().slice(23, -2) : null; - }, - _flag: function(element, attribute) { - return $(element).hasAttribute(attribute) ? attribute : null; - }, - style: function(element) { - return element.style.cssText.toLowerCase(); - }, - title: function(element) { - return element.title; + values: { + _getAttr: function(element, attribute) { + return element.getAttribute(attribute); + }, + _getAttr2: function(element, attribute) { + return element.getAttribute(attribute, 2); + }, + _getAttrNode: function(element, attribute) { + var node = element.getAttributeNode(attribute); + return node ? node.value : ""; + }, + _getEv: (function(){ + + var el = document.createElement('div'), f; + el.onclick = Prototype.emptyFunction; + var value = el.getAttribute('onclick'); + + if (String(value).indexOf('{') > -1) { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + attribute = attribute.toString(); + attribute = attribute.split('{')[1]; + attribute = attribute.split('}')[0]; + return attribute.strip(); + }; + } + else if (value === '') { + f = function(element, attribute) { + attribute = element.getAttribute(attribute); + if (!attribute) return null; + return attribute.strip(); + }; + } + el = null; + return f; + })(), + _flag: function(element, attribute) { + return $(element).hasAttribute(attribute) ? attribute : null; + }, + style: function(element) { + return element.style.cssText.toLowerCase(); + }, + title: function(element) { + return element.title; + } } } } - }; + })(); Element._attributeTranslations.write = { names: Object.extend({ @@ -2363,8 +2786,8 @@ else if (Prototype.Browser.IE) { (function(v) { Object.extend(v, { - href: v._getAttr, - src: v._getAttr, + href: v._getAttr2, + src: v._getAttr2, type: v._getAttr, action: v._getAttrNode, disabled: v._flag, @@ -2391,6 +2814,26 @@ else if (Prototype.Browser.IE) { onchange: v._getEv }); })(Element._attributeTranslations.read.values); + + if (Prototype.BrowserFeatures.ElementExtensions) { + (function() { + function _descendants(element) { + var nodes = element.getElementsByTagName('*'), results = []; + for (var i = 0, node; node = nodes[i]; i++) + if (node.tagName !== "!") // Filter out comment nodes. + results.push(node); + return results; + } + + Element.Methods.down = function(element, expression, index) { + element = $(element); + if (arguments.length == 1) return element.firstDescendant(); + return Object.isNumber(expression) ? _descendants(element)[expression] : + Element.select(element, expression)[index || 0]; + } + })(); + } + } else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { @@ -2409,7 +2852,7 @@ else if (Prototype.Browser.WebKit) { (value < 0.00001) ? 0 : value; if (value == 1) - if(element.tagName.toUpperCase() == 'IMG' && element.width) { + if (element.tagName.toUpperCase() == 'IMG' && element.width) { element.width++; element.width--; } else try { var n = document.createTextNode(' '); @@ -2420,9 +2863,6 @@ else if (Prototype.Browser.WebKit) { return element; }; - // Safari returns margins on body which is incorrect if the child is absolutely - // positioned. For performance reasons, redefine Element#cumulativeOffset for - // KHTML/WebKit only. Element.Methods.cumulativeOffset = function(element) { var valueT = 0, valueL = 0; do { @@ -2438,30 +2878,7 @@ else if (Prototype.Browser.WebKit) { }; } -if (Prototype.Browser.IE || Prototype.Browser.Opera) { - // IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements - Element.Methods.update = function(element, content) { - element = $(element); - - if (content && content.toElement) content = content.toElement(); - if (Object.isElement(content)) return element.update().insert(content); - - content = Object.toHTML(content); - var tagName = element.tagName.toUpperCase(); - - if (tagName in Element._insertionTranslations.tags) { - $A(element.childNodes).each(function(node) { element.removeChild(node) }); - Element._getContentFromAnonymousElement(tagName, content.stripScripts()) - .each(function(node) { element.appendChild(node) }); - } - else element.innerHTML = content.stripScripts(); - - content.evalScripts.bind(content).defer(); - return element; - }; -} - -if ('outerHTML' in document.createElement('div')) { +if ('outerHTML' in document.documentElement) { Element.Methods.replace = function(element, content) { element = $(element); @@ -2475,8 +2892,8 @@ if ('outerHTML' in document.createElement('div')) { var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); if (Element._insertionTranslations.tags[tagName]) { - var nextSibling = element.next(); - var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); + var nextSibling = element.next(), + fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); parent.removeChild(element); if (nextSibling) fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); @@ -2498,11 +2915,17 @@ Element._returnOffset = function(l, t) { }; Element._getContentFromAnonymousElement = function(tagName, html) { - var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; + var div = new Element('div'), + t = Element._insertionTranslations.tags[tagName]; if (t) { div.innerHTML = t[0] + html + t[1]; - t[2].times(function() { div = div.firstChild }); - } else div.innerHTML = html; + for (var i = t[2]; i--; ) { + div = div.firstChild; + } + } + else { + div.innerHTML = html; + } return $A(div.childNodes); }; @@ -2529,12 +2952,13 @@ Element._insertionTranslations = { }; (function() { - Object.extend(this.tags, { - THEAD: this.tags.TBODY, - TFOOT: this.tags.TBODY, - TH: this.tags.TD + var tags = Element._insertionTranslations.tags; + Object.extend(tags, { + THEAD: tags.TBODY, + TFOOT: tags.TBODY, + TH: tags.TD }); -}).call(Element._insertionTranslations); +})(); Element.Methods.Simulated = { hasAttribute: function(element, attribute) { @@ -2548,41 +2972,81 @@ Element.Methods.ByTag = { }; Object.extend(Element, Element.Methods); -if (!Prototype.BrowserFeatures.ElementExtensions && - document.createElement('div')['__proto__']) { - window.HTMLElement = { }; - window.HTMLElement.prototype = document.createElement('div')['__proto__']; - Prototype.BrowserFeatures.ElementExtensions = true; -} +(function(div) { + + if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) { + window.HTMLElement = { }; + window.HTMLElement.prototype = div['__proto__']; + Prototype.BrowserFeatures.ElementExtensions = true; + } + + div = null; + +})(document.createElement('div')); Element.extend = (function() { - if (Prototype.BrowserFeatures.SpecificElementExtensions) + + function checkDeficiency(tagName) { + if (typeof window.Element != 'undefined') { + var proto = window.Element.prototype; + if (proto) { + var id = '_' + (Math.random()+'').slice(2), + el = document.createElement(tagName); + proto[id] = 'x'; + var isBuggy = (el[id] !== 'x'); + delete proto[id]; + el = null; + return isBuggy; + } + } + return false; + } + + function extendElementWith(element, methods) { + for (var property in methods) { + var value = methods[property]; + if (Object.isFunction(value) && !(property in element)) + element[property] = value.methodize(); + } + } + + var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object'); + + if (Prototype.BrowserFeatures.SpecificElementExtensions) { + if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) { + return function(element) { + if (element && typeof element._extendedByPrototype == 'undefined') { + var t = element.tagName; + if (t && (/^(?:object|applet|embed)$/i.test(t))) { + extendElementWith(element, Element.Methods); + extendElementWith(element, Element.Methods.Simulated); + extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]); + } + } + return element; + } + } return Prototype.K; + } var Methods = { }, ByTag = Element.Methods.ByTag; var extend = Object.extend(function(element) { - if (!element || element._extendedByPrototype || + if (!element || typeof element._extendedByPrototype != 'undefined' || element.nodeType != 1 || element == window) return element; var methods = Object.clone(Methods), - tagName = element.tagName.toUpperCase(), property, value; + tagName = element.tagName.toUpperCase(); - // extend methods for specific tags if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); - for (property in methods) { - value = methods[property]; - if (Object.isFunction(value) && !(property in element)) - element[property] = value.methodize(); - } + extendElementWith(element, methods); element._extendedByPrototype = Prototype.emptyFunction; return element; }, { refresh: function() { - // extend methods for all tags (Safari doesn't need this) if (!Prototype.BrowserFeatures.ElementExtensions) { Object.extend(Methods, Element.Methods); Object.extend(Methods, Element.Methods.Simulated); @@ -2594,10 +3058,14 @@ Element.extend = (function() { return extend; })(); -Element.hasAttribute = function(element, attribute) { - if (element.hasAttribute) return element.hasAttribute(attribute); - return Element.Methods.Simulated.hasAttribute(element, attribute); -}; +if (document.documentElement.hasAttribute) { + Element.hasAttribute = function(element, attribute) { + return element.hasAttribute(attribute); + }; +} +else { + Element.hasAttribute = Element.Methods.Simulated.hasAttribute; +} Element.addMethods = function(methods) { var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; @@ -2661,14 +3129,19 @@ Element.addMethods = function(methods) { klass = 'HTML' + tagName.capitalize() + 'Element'; if (window[klass]) return window[klass]; - window[klass] = { }; - window[klass].prototype = document.createElement(tagName)['__proto__']; - return window[klass]; + var element = document.createElement(tagName), + proto = element['__proto__'] || element.constructor.prototype; + + element = null; + return proto; } + var elementPrototype = window.HTMLElement ? HTMLElement.prototype : + Element.prototype; + if (F.ElementExtensions) { - copy(Element.Methods, HTMLElement.prototype); - copy(Element.Methods.Simulated, HTMLElement.prototype, true); + copy(Element.Methods, elementPrototype); + copy(Element.Methods.Simulated, elementPrototype, true); } if (F.SpecificElementExtensions) { @@ -2686,766 +3159,1803 @@ Element.addMethods = function(methods) { Element.cache = { }; }; + document.viewport = { + getDimensions: function() { - var dimensions = { }, B = Prototype.Browser; - $w('width height').each(function(d) { - var D = d.capitalize(); - if (B.WebKit && !document.evaluate) { - // Safari <3.0 needs self.innerWidth/Height - dimensions[d] = self['inner' + D]; - } else if (B.Opera && parseFloat(window.opera.version()) < 9.5) { - // Opera <9.5 needs document.body.clientWidth/Height - dimensions[d] = document.body['client' + D] - } else { - dimensions[d] = document.documentElement['client' + D]; - } - }); - return dimensions; - }, - - getWidth: function() { - return this.getDimensions().width; - }, - - getHeight: function() { - return this.getDimensions().height; + return { width: this.getWidth(), height: this.getHeight() }; }, getScrollOffsets: function() { return Element._returnOffset( window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, - window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); + window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); } }; -/* Portions of the Selector class are derived from Jack Slocum's DomQuery, - * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style - * license. Please see http://www.yui-ext.com/ for more information. */ -var Selector = Class.create({ - initialize: function(expression) { - this.expression = expression.strip(); +(function(viewport) { + var B = Prototype.Browser, doc = document, element, property = {}; - if (this.shouldUseSelectorsAPI()) { - this.mode = 'selectorsAPI'; - } else if (this.shouldUseXPath()) { - this.mode = 'xpath'; - this.compileXPathMatcher(); + function getRootElement() { + if (B.WebKit && !doc.evaluate) + return document; + + if (B.Opera && window.parseFloat(window.opera.version()) < 9.5) + return document.body; + + return document.documentElement; + } + + function define(D) { + if (!element) element = getRootElement(); + + property[D] = 'client' + D; + + viewport['get' + D] = function() { return element[property[D]] }; + return viewport['get' + D](); + } + + viewport.getWidth = define.curry('Width'); + + viewport.getHeight = define.curry('Height'); +})(document.viewport); + + +Element.Storage = { + UID: 1 +}; + +Element.addMethods({ + getStorage: function(element) { + if (!(element = $(element))) return; + + var uid; + if (element === window) { + uid = 0; } else { - this.mode = "normal"; - this.compileMatcher(); + if (typeof element._prototypeUID === "undefined") + element._prototypeUID = Element.Storage.UID++; + uid = element._prototypeUID; } + if (!Element.Storage[uid]) + Element.Storage[uid] = $H(); + + return Element.Storage[uid]; }, - shouldUseXPath: function() { - if (!Prototype.BrowserFeatures.XPath) return false; + store: function(element, key, value) { + if (!(element = $(element))) return; - var e = this.expression; - - // Safari 3 chokes on :*-of-type and :empty - if (Prototype.Browser.WebKit && - (e.include("-of-type") || e.include(":empty"))) - return false; - - // XPath can't do namespaced attributes, nor can it read - // the "checked" property from DOM nodes - if ((/(\[[\w-]*?:|:checked)/).test(e)) - return false; - - return true; - }, - - shouldUseSelectorsAPI: function() { - if (!Prototype.BrowserFeatures.SelectorsAPI) return false; - - if (!Selector._div) Selector._div = new Element('div'); - - // Make sure the browser treats the selector as valid. Test on an - // isolated element to minimize cost of this check. - try { - Selector._div.querySelector(this.expression); - } catch(e) { - return false; + if (arguments.length === 2) { + Element.getStorage(element).update(key); + } else { + Element.getStorage(element).set(key, value); } - return true; + return element; }, - compileMatcher: function() { - var e = this.expression, ps = Selector.patterns, h = Selector.handlers, - c = Selector.criteria, le, p, m; + retrieve: function(element, key, defaultValue) { + if (!(element = $(element))) return; + var hash = Element.getStorage(element), value = hash.get(key); - if (Selector._cache[e]) { - this.matcher = Selector._cache[e]; - return; + if (Object.isUndefined(value)) { + hash.set(key, defaultValue); + value = defaultValue; } - this.matcher = ["this.matcher = function(root) {", - "var r = root, h = Selector.handlers, c = false, n;"]; + return value; + }, - while (e && le != e && (/\S/).test(e)) { - le = e; - for (var i in ps) { - p = ps[i]; - if (m = e.match(p)) { - this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : - new Template(c[i]).evaluate(m)); - e = e.replace(m[0], ''); - break; - } + clone: function(element, deep) { + if (!(element = $(element))) return; + var clone = element.cloneNode(deep); + clone._prototypeUID = void 0; + if (deep) { + var descendants = Element.select(clone, '*'), + i = descendants.length; + while (i--) { + descendants[i]._prototypeUID = void 0; } } - - this.matcher.push("return h.unique(n);\n}"); - eval(this.matcher.join('\n')); - Selector._cache[this.expression] = this.matcher; + return Element.extend(clone); }, - compileXPathMatcher: function() { - var e = this.expression, ps = Selector.patterns, - x = Selector.xpath, le, m; + purge: function(element) { + if (!(element = $(element))) return; + purgeElement(element); - if (Selector._cache[e]) { - this.xpath = Selector._cache[e]; return; - } + var descendants = element.getElementsByTagName('*'), + i = descendants.length; - this.matcher = ['.//*']; - while (e && le != e && (/\S/).test(e)) { - le = e; - for (var i in ps) { - if (m = e.match(ps[i])) { - this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : - new Template(x[i]).evaluate(m)); - e = e.replace(m[0], ''); - break; - } - } - } + while (i--) purgeElement(descendants[i]); - this.xpath = this.matcher.join(''); - Selector._cache[this.expression] = this.xpath; - }, - - findElements: function(root) { - root = root || document; - var e = this.expression, results; - - switch (this.mode) { - case 'selectorsAPI': - // querySelectorAll queries document-wide, then filters to descendants - // of the context element. That's not what we want. - // Add an explicit context to the selector if necessary. - if (root !== document) { - var oldId = root.id, id = $(root).identify(); - e = "#" + id + " " + e; - } - - results = $A(root.querySelectorAll(e)).map(Element.extend); - root.id = oldId; - - return results; - case 'xpath': - return document._getElementsByXPath(this.xpath, root); - default: - return this.matcher(root); - } - }, - - match: function(element) { - this.tokens = []; - - var e = this.expression, ps = Selector.patterns, as = Selector.assertions; - var le, p, m; - - while (e && le !== e && (/\S/).test(e)) { - le = e; - for (var i in ps) { - p = ps[i]; - if (m = e.match(p)) { - // use the Selector.assertions methods unless the selector - // is too complex. - if (as[i]) { - this.tokens.push([i, Object.clone(m)]); - e = e.replace(m[0], ''); - } else { - // reluctantly do a document-wide search - // and look for a match in the array - return this.findElements(document).include(element); - } - } - } - } - - var match = true, name, matches; - for (var i = 0, token; token = this.tokens[i]; i++) { - name = token[0], matches = token[1]; - if (!Selector.assertions[name](element, matches)) { - match = false; break; - } - } - - return match; - }, - - toString: function() { - return this.expression; - }, - - inspect: function() { - return "#"; + return null; } }); -Object.extend(Selector, { - _cache: { }, +(function() { - xpath: { - descendant: "//*", - child: "/*", - adjacent: "/following-sibling::*[1]", - laterSibling: '/following-sibling::*', - tagName: function(m) { - if (m[1] == '*') return ''; - return "[local-name()='" + m[1].toLowerCase() + - "' or local-name()='" + m[1].toUpperCase() + "']"; - }, - className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", - id: "[@id='#{1}']", - attrPresence: function(m) { - m[1] = m[1].toLowerCase(); - return new Template("[@#{1}]").evaluate(m); - }, - attr: function(m) { - m[1] = m[1].toLowerCase(); - m[3] = m[5] || m[6]; - return new Template(Selector.xpath.operators[m[2]]).evaluate(m); - }, - pseudo: function(m) { - var h = Selector.xpath.pseudos[m[1]]; - if (!h) return ''; - if (Object.isFunction(h)) return h(m); - return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); - }, - operators: { - '=': "[@#{1}='#{3}']", - '!=': "[@#{1}!='#{3}']", - '^=': "[starts-with(@#{1}, '#{3}')]", - '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", - '*=': "[contains(@#{1}, '#{3}')]", - '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", - '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" - }, - pseudos: { - 'first-child': '[not(preceding-sibling::*)]', - 'last-child': '[not(following-sibling::*)]', - 'only-child': '[not(preceding-sibling::* or following-sibling::*)]', - 'empty': "[count(*) = 0 and (count(text()) = 0)]", - 'checked': "[@checked]", - 'disabled': "[(@disabled) and (@type!='hidden')]", - 'enabled': "[not(@disabled) and (@type!='hidden')]", - 'not': function(m) { - var e = m[6], p = Selector.patterns, - x = Selector.xpath, le, v; + function toDecimal(pctString) { + var match = pctString.match(/^(\d+)%?$/i); + if (!match) return null; + return (Number(match[1]) / 100); + } - var exclusion = []; - while (e && le != e && (/\S/).test(e)) { - le = e; - for (var i in p) { - if (m = e.match(p[i])) { - v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); - exclusion.push("(" + v.substring(1, v.length - 1) + ")"); - e = e.replace(m[0], ''); - break; - } - } - } - return "[not(" + exclusion.join(" and ") + ")]"; - }, - 'nth-child': function(m) { - return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); - }, - 'nth-last-child': function(m) { - return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); - }, - 'nth-of-type': function(m) { - return Selector.xpath.pseudos.nth("position() ", m); - }, - 'nth-last-of-type': function(m) { - return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); - }, - 'first-of-type': function(m) { - m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); - }, - 'last-of-type': function(m) { - m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); - }, - 'only-of-type': function(m) { - var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); - }, - nth: function(fragment, m) { - var mm, formula = m[6], predicate; - if (formula == 'even') formula = '2n+0'; - if (formula == 'odd') formula = '2n+1'; - if (mm = formula.match(/^(\d+)$/)) // digit only - return '[' + fragment + "= " + mm[1] + ']'; - if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b - if (mm[1] == "-") mm[1] = -1; - var a = mm[1] ? Number(mm[1]) : 1; - var b = mm[2] ? Number(mm[2]) : 0; - predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + - "((#{fragment} - #{b}) div #{a} >= 0)]"; - return new Template(predicate).evaluate({ - fragment: fragment, a: a, b: b }); - } - } + function getPixelValue(value, property) { + if (Object.isElement(value)) { + element = value; + value = element.getStyle(property); } - }, - - criteria: { - tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', - className: 'n = h.className(n, r, "#{1}", c); c = false;', - id: 'n = h.id(n, r, "#{1}", c); c = false;', - attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', - attr: function(m) { - m[3] = (m[5] || m[6]); - return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); - }, - pseudo: function(m) { - if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); - return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); - }, - descendant: 'c = "descendant";', - child: 'c = "child";', - adjacent: 'c = "adjacent";', - laterSibling: 'c = "laterSibling";' - }, - - patterns: { - // combinators must be listed first - // (and descendant needs to be last combinator) - laterSibling: /^\s*~\s*/, - child: /^\s*>\s*/, - adjacent: /^\s*\+\s*/, - descendant: /^\s/, - - // selectors follow - tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, - id: /^#([\w\-\*]+)(\b|$)/, - className: /^\.([\w\-\*]+)(\b|$)/, - pseudo: -/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, - attrPresence: /^\[((?:[\w]+:)?[\w]+)\]/, - attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ - }, - - // for Selector.match and Element#match - assertions: { - tagName: function(element, matches) { - return matches[1].toUpperCase() == element.tagName.toUpperCase(); - }, - - className: function(element, matches) { - return Element.hasClassName(element, matches[1]); - }, - - id: function(element, matches) { - return element.id === matches[1]; - }, - - attrPresence: function(element, matches) { - return Element.hasAttribute(element, matches[1]); - }, - - attr: function(element, matches) { - var nodeValue = Element.readAttribute(element, matches[1]); - return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); - } - }, - - handlers: { - // UTILITY FUNCTIONS - // joins two collections - concat: function(a, b) { - for (var i = 0, node; node = b[i]; i++) - a.push(node); - return a; - }, - - // marks an array of nodes for counting - mark: function(nodes) { - var _true = Prototype.emptyFunction; - for (var i = 0, node; node = nodes[i]; i++) - node._countedByPrototype = _true; - return nodes; - }, - - unmark: function(nodes) { - for (var i = 0, node; node = nodes[i]; i++) - node._countedByPrototype = undefined; - return nodes; - }, - - // mark each child node with its position (for nth calls) - // "ofType" flag indicates whether we're indexing for nth-of-type - // rather than nth-child - index: function(parentNode, reverse, ofType) { - parentNode._countedByPrototype = Prototype.emptyFunction; - if (reverse) { - for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { - var node = nodes[i]; - if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; - } - } else { - for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) - if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; - } - }, - - // filters out duplicates and extends all nodes - unique: function(nodes) { - if (nodes.length == 0) return nodes; - var results = [], n; - for (var i = 0, l = nodes.length; i < l; i++) - if (!(n = nodes[i])._countedByPrototype) { - n._countedByPrototype = Prototype.emptyFunction; - results.push(Element.extend(n)); - } - return Selector.handlers.unmark(results); - }, - - // COMBINATOR FUNCTIONS - descendant: function(nodes) { - var h = Selector.handlers; - for (var i = 0, results = [], node; node = nodes[i]; i++) - h.concat(results, node.getElementsByTagName('*')); - return results; - }, - - child: function(nodes) { - var h = Selector.handlers; - for (var i = 0, results = [], node; node = nodes[i]; i++) { - for (var j = 0, child; child = node.childNodes[j]; j++) - if (child.nodeType == 1 && child.tagName != '!') results.push(child); - } - return results; - }, - - adjacent: function(nodes) { - for (var i = 0, results = [], node; node = nodes[i]; i++) { - var next = this.nextElementSibling(node); - if (next) results.push(next); - } - return results; - }, - - laterSibling: function(nodes) { - var h = Selector.handlers; - for (var i = 0, results = [], node; node = nodes[i]; i++) - h.concat(results, Element.nextSiblings(node)); - return results; - }, - - nextElementSibling: function(node) { - while (node = node.nextSibling) - if (node.nodeType == 1) return node; + if (value === null) { return null; - }, - - previousElementSibling: function(node) { - while (node = node.previousSibling) - if (node.nodeType == 1) return node; - return null; - }, - - // TOKEN FUNCTIONS - tagName: function(nodes, root, tagName, combinator) { - var uTagName = tagName.toUpperCase(); - var results = [], h = Selector.handlers; - if (nodes) { - if (combinator) { - // fastlane for ordinary descendant combinators - if (combinator == "descendant") { - for (var i = 0, node; node = nodes[i]; i++) - h.concat(results, node.getElementsByTagName(tagName)); - return results; - } else nodes = this[combinator](nodes); - if (tagName == "*") return nodes; - } - for (var i = 0, node; node = nodes[i]; i++) - if (node.tagName.toUpperCase() === uTagName) results.push(node); - return results; - } else return root.getElementsByTagName(tagName); - }, - - id: function(nodes, root, id, combinator) { - var targetNode = $(id), h = Selector.handlers; - if (!targetNode) return []; - if (!nodes && root == document) return [targetNode]; - if (nodes) { - if (combinator) { - if (combinator == 'child') { - for (var i = 0, node; node = nodes[i]; i++) - if (targetNode.parentNode == node) return [targetNode]; - } else if (combinator == 'descendant') { - for (var i = 0, node; node = nodes[i]; i++) - if (Element.descendantOf(targetNode, node)) return [targetNode]; - } else if (combinator == 'adjacent') { - for (var i = 0, node; node = nodes[i]; i++) - if (Selector.handlers.previousElementSibling(targetNode) == node) - return [targetNode]; - } else nodes = h[combinator](nodes); - } - for (var i = 0, node; node = nodes[i]; i++) - if (node == targetNode) return [targetNode]; - return []; - } - return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; - }, - - className: function(nodes, root, className, combinator) { - if (nodes && combinator) nodes = this[combinator](nodes); - return Selector.handlers.byClassName(nodes, root, className); - }, - - byClassName: function(nodes, root, className) { - if (!nodes) nodes = Selector.handlers.descendant([root]); - var needle = ' ' + className + ' '; - for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { - nodeClassName = node.className; - if (nodeClassName.length == 0) continue; - if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) - results.push(node); - } - return results; - }, - - attrPresence: function(nodes, root, attr, combinator) { - if (!nodes) nodes = root.getElementsByTagName("*"); - if (nodes && combinator) nodes = this[combinator](nodes); - var results = []; - for (var i = 0, node; node = nodes[i]; i++) - if (Element.hasAttribute(node, attr)) results.push(node); - return results; - }, - - attr: function(nodes, root, attr, value, operator, combinator) { - if (!nodes) nodes = root.getElementsByTagName("*"); - if (nodes && combinator) nodes = this[combinator](nodes); - var handler = Selector.operators[operator], results = []; - for (var i = 0, node; node = nodes[i]; i++) { - var nodeValue = Element.readAttribute(node, attr); - if (nodeValue === null) continue; - if (handler(nodeValue, value)) results.push(node); - } - return results; - }, - - pseudo: function(nodes, name, value, root, combinator) { - if (nodes && combinator) nodes = this[combinator](nodes); - if (!nodes) nodes = root.getElementsByTagName("*"); - return Selector.pseudos[name](nodes, value, root); } - }, - pseudos: { - 'first-child': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) { - if (Selector.handlers.previousElementSibling(node)) continue; - results.push(node); + if ((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)) { + return window.parseFloat(value); + } + + if (/\d/.test(value) && element.runtimeStyle) { + var style = element.style.left, rStyle = element.runtimeStyle.left; + element.runtimeStyle.left = element.currentStyle.left; + element.style.left = value || 0; + value = element.style.pixelLeft; + element.style.left = style; + element.runtimeStyle.left = rStyle; + + return value; + } + + if (value.include('%')) { + var decimal = toDecimal(value); + var whole; + if (property.include('left') || property.include('right') || + property.include('width')) { + whole = $(element.parentNode).measure('width'); + } else if (property.include('top') || property.include('bottom') || + property.include('height')) { + whole = $(element.parentNode).measure('height'); } - return results; - }, - 'last-child': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) { - if (Selector.handlers.nextElementSibling(node)) continue; - results.push(node); + + return whole * decimal; + } + + return 0; + } + + function toCSSPixels(number) { + if (Object.isString(number) && number.endsWith('px')) { + return number; + } + return number + 'px'; + } + + function isDisplayed(element) { + var originalElement = element; + while (element && element.parentNode) { + var display = element.getStyle('display'); + if (display === 'none') { + return false; + } + element = $(element.parentNode); + } + return true; + } + + var hasLayout = Prototype.K; + if ('currentStyle' in document.documentElement) { + hasLayout = function(element) { + if (!element.currentStyle.hasLayout) { + element.style.zoom = 1; + } + return element; + }; + } + + function cssNameFor(key) { + if (key.include('border')) key = key + '-width'; + return key.camelize(); + } + + Element.Layout = Class.create(Hash, { + initialize: function($super, element, preCompute) { + $super(); + this.element = $(element); + + Element.Layout.PROPERTIES.each( function(property) { + this._set(property, null); + }, this); + + if (preCompute) { + this._preComputing = true; + this._begin(); + Element.Layout.PROPERTIES.each( this._compute, this ); + this._end(); + this._preComputing = false; } - return results; - }, - 'only-child': function(nodes, value, root) { - var h = Selector.handlers; - for (var i = 0, results = [], node; node = nodes[i]; i++) - if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) - results.push(node); - return results; - }, - 'nth-child': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, formula, root); - }, - 'nth-last-child': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, formula, root, true); - }, - 'nth-of-type': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, formula, root, false, true); - }, - 'nth-last-of-type': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, formula, root, true, true); - }, - 'first-of-type': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, "1", root, false, true); - }, - 'last-of-type': function(nodes, formula, root) { - return Selector.pseudos.nth(nodes, "1", root, true, true); - }, - 'only-of-type': function(nodes, formula, root) { - var p = Selector.pseudos; - return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); }, - // handles the an+b logic - getIndices: function(a, b, total) { - if (a == 0) return b > 0 ? [b] : []; - return $R(1, total).inject([], function(memo, i) { - if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); - return memo; + _set: function(property, value) { + return Hash.prototype.set.call(this, property, value); + }, + + set: function(property, value) { + throw "Properties of Element.Layout are read-only."; + }, + + get: function($super, property) { + var value = $super(property); + return value === null ? this._compute(property) : value; + }, + + _begin: function() { + if (this._prepared) return; + + var element = this.element; + if (isDisplayed(element)) { + this._prepared = true; + return; + } + + var originalStyles = { + position: element.style.position || '', + width: element.style.width || '', + visibility: element.style.visibility || '', + display: element.style.display || '' + }; + + element.store('prototype_original_styles', originalStyles); + + var position = element.getStyle('position'), + width = element.getStyle('width'); + + element.setStyle({ + position: 'absolute', + visibility: 'hidden', + display: 'block' }); - }, - // handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type - nth: function(nodes, formula, root, reverse, ofType) { - if (nodes.length == 0) return []; - if (formula == 'even') formula = '2n+0'; - if (formula == 'odd') formula = '2n+1'; - var h = Selector.handlers, results = [], indexed = [], m; - h.mark(nodes); - for (var i = 0, node; node = nodes[i]; i++) { - if (!node.parentNode._countedByPrototype) { - h.index(node.parentNode, reverse, ofType); - indexed.push(node.parentNode); - } + var positionedWidth = element.getStyle('width'); + + var newWidth; + if (width && (positionedWidth === width)) { + newWidth = getPixelValue(width); + } else if (width && (position === 'absolute' || position === 'fixed')) { + newWidth = getPixelValue(width); + } else { + var parent = element.parentNode, pLayout = $(parent).getLayout(); + + newWidth = pLayout.get('width') - + this.get('margin-left') - + this.get('border-left') - + this.get('padding-left') - + this.get('padding-right') - + this.get('border-right') - + this.get('margin-right'); } - if (formula.match(/^\d+$/)) { // just a number - formula = Number(formula); - for (var i = 0, node; node = nodes[i]; i++) - if (node.nodeIndex == formula) results.push(node); - } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b - if (m[1] == "-") m[1] = -1; - var a = m[1] ? Number(m[1]) : 1; - var b = m[2] ? Number(m[2]) : 0; - var indices = Selector.pseudos.getIndices(a, b, nodes.length); - for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { - for (var j = 0; j < l; j++) - if (node.nodeIndex == indices[j]) results.push(node); - } + + element.setStyle({ width: newWidth + 'px' }); + + this._prepared = true; + }, + + _end: function() { + var element = this.element; + var originalStyles = element.retrieve('prototype_original_styles'); + element.store('prototype_original_styles', null); + element.setStyle(originalStyles); + this._prepared = false; + }, + + _compute: function(property) { + var COMPUTATIONS = Element.Layout.COMPUTATIONS; + if (!(property in COMPUTATIONS)) { + throw "Property not found."; } - h.unmark(nodes); - h.unmark(indexed); - return results; + return this._set(property, COMPUTATIONS[property].call(this, this.element)); }, - 'empty': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) { - // IE treats comments as element nodes - if (node.tagName == '!' || node.firstChild) continue; - results.push(node); - } - return results; + toObject: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var obj = {}; + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + var value = this.get(key); + if (value != null) obj[key] = value; + }, this); + return obj; }, - 'not': function(nodes, selector, root) { - var h = Selector.handlers, selectorType, m; - var exclusions = new Selector(selector).findElements(root); - h.mark(exclusions); - for (var i = 0, results = [], node; node = nodes[i]; i++) - if (!node._countedByPrototype) results.push(node); - h.unmark(exclusions); - return results; + toHash: function() { + var obj = this.toObject.apply(this, arguments); + return new Hash(obj); }, - 'enabled': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) - if (!node.disabled && (!node.type || node.type !== 'hidden')) - results.push(node); - return results; + toCSS: function() { + var args = $A(arguments); + var keys = (args.length === 0) ? Element.Layout.PROPERTIES : + args.join(' ').split(' '); + var css = {}; + + keys.each( function(key) { + if (!Element.Layout.PROPERTIES.include(key)) return; + if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return; + + var value = this.get(key); + if (value != null) css[cssNameFor(key)] = value + 'px'; + }, this); + return css; }, - 'disabled': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) - if (node.disabled) results.push(node); - return results; - }, - - 'checked': function(nodes, value, root) { - for (var i = 0, results = [], node; node = nodes[i]; i++) - if (node.checked) results.push(node); - return results; - } - }, - - operators: { - '=': function(nv, v) { return nv == v; }, - '!=': function(nv, v) { return nv != v; }, - '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); }, - '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); }, - '*=': function(nv, v) { return nv == v || nv && nv.include(v); }, - '$=': function(nv, v) { return nv.endsWith(v); }, - '*=': function(nv, v) { return nv.include(v); }, - '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, - '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() + - '-').include('-' + (v || "").toUpperCase() + '-'); } - }, - - split: function(expression) { - var expressions = []; - expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { - expressions.push(m[1].strip()); - }); - return expressions; - }, - - matchElements: function(elements, expression) { - var matches = $$(expression), h = Selector.handlers; - h.mark(matches); - for (var i = 0, results = [], element; element = elements[i]; i++) - if (element._countedByPrototype) results.push(element); - h.unmark(matches); - return results; - }, - - findElement: function(elements, expression, index) { - if (Object.isNumber(expression)) { - index = expression; expression = false; - } - return Selector.matchElements(elements, expression || '*')[index || 0]; - }, - - findChildElements: function(element, expressions) { - expressions = Selector.split(expressions.join(',')); - var results = [], h = Selector.handlers; - for (var i = 0, l = expressions.length, selector; i < l; i++) { - selector = new Selector(expressions[i].strip()); - h.concat(results, selector.findElements(element)); - } - return (l > 1) ? h.unique(results) : results; - } -}); - -if (Prototype.Browser.IE) { - Object.extend(Selector.handlers, { - // IE returns comment nodes on getElementsByTagName("*"). - // Filter them out. - concat: function(a, b) { - for (var i = 0, node; node = b[i]; i++) - if (node.tagName !== "!") a.push(node); - return a; - }, - - // IE improperly serializes _countedByPrototype in (inner|outer)HTML. - unmark: function(nodes) { - for (var i = 0, node; node = nodes[i]; i++) - node.removeAttribute('_countedByPrototype'); - return nodes; + inspect: function() { + return "#"; } }); + + Object.extend(Element.Layout, { + PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'), + + COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'), + + COMPUTATIONS: { + 'height': function(element) { + if (!this._preComputing) this._begin(); + + var bHeight = this.get('border-box-height'); + if (bHeight <= 0) return 0; + + var bTop = this.get('border-top'), + bBottom = this.get('border-bottom'); + + var pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + if (!this._preComputing) this._end(); + + return bHeight - bTop - bBottom - pTop - pBottom; + }, + + 'width': function(element) { + if (!this._preComputing) this._begin(); + + var bWidth = this.get('border-box-width'); + if (bWidth <= 0) return 0; + + var bLeft = this.get('border-left'), + bRight = this.get('border-right'); + + var pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + if (!this._preComputing) this._end(); + + return bWidth - bLeft - bRight - pLeft - pRight; + }, + + 'padding-box-height': function(element) { + var height = this.get('height'), + pTop = this.get('padding-top'), + pBottom = this.get('padding-bottom'); + + return height + pTop + pBottom; + }, + + 'padding-box-width': function(element) { + var width = this.get('width'), + pLeft = this.get('padding-left'), + pRight = this.get('padding-right'); + + return width + pLeft + pRight; + }, + + 'border-box-height': function(element) { + return element.offsetHeight; + }, + + 'border-box-width': function(element) { + return element.offsetWidth; + }, + + 'margin-box-height': function(element) { + var bHeight = this.get('border-box-height'), + mTop = this.get('margin-top'), + mBottom = this.get('margin-bottom'); + + if (bHeight <= 0) return 0; + + return bHeight + mTop + mBottom; + }, + + 'margin-box-width': function(element) { + var bWidth = this.get('border-box-width'), + mLeft = this.get('margin-left'), + mRight = this.get('margin-right'); + + if (bWidth <= 0) return 0; + + return bWidth + mLeft + mRight; + }, + + 'top': function(element) { + var offset = element.positionedOffset(); + return offset.top; + }, + + 'bottom': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pHeight = parent.measure('height'); + + var mHeight = this.get('border-box-height'); + + return pHeight - mHeight - offset.top; + }, + + 'left': function(element) { + var offset = element.positionedOffset(); + return offset.left; + }, + + 'right': function(element) { + var offset = element.positionedOffset(), + parent = element.getOffsetParent(), + pWidth = parent.measure('width'); + + var mWidth = this.get('border-box-width'); + + return pWidth - mWidth - offset.left; + }, + + 'padding-top': function(element) { + return getPixelValue(element, 'paddingTop'); + }, + + 'padding-bottom': function(element) { + return getPixelValue(element, 'paddingBottom'); + }, + + 'padding-left': function(element) { + return getPixelValue(element, 'paddingLeft'); + }, + + 'padding-right': function(element) { + return getPixelValue(element, 'paddingRight'); + }, + + 'border-top': function(element) { + return Object.isNumber(element.clientTop) ? element.clientTop : + getPixelValue(element, 'borderTopWidth'); + }, + + 'border-bottom': function(element) { + return Object.isNumber(element.clientBottom) ? element.clientBottom : + getPixelValue(element, 'borderBottomWidth'); + }, + + 'border-left': function(element) { + return Object.isNumber(element.clientLeft) ? element.clientLeft : + getPixelValue(element, 'borderLeftWidth'); + }, + + 'border-right': function(element) { + return Object.isNumber(element.clientRight) ? element.clientRight : + getPixelValue(element, 'borderRightWidth'); + }, + + 'margin-top': function(element) { + return getPixelValue(element, 'marginTop'); + }, + + 'margin-bottom': function(element) { + return getPixelValue(element, 'marginBottom'); + }, + + 'margin-left': function(element) { + return getPixelValue(element, 'marginLeft'); + }, + + 'margin-right': function(element) { + return getPixelValue(element, 'marginRight'); + } + } + }); + + if ('getBoundingClientRect' in document.documentElement) { + Object.extend(Element.Layout.COMPUTATIONS, { + 'right': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.right - rect.right).round(); + }, + + 'bottom': function(element) { + var parent = hasLayout(element.getOffsetParent()); + var rect = element.getBoundingClientRect(), + pRect = parent.getBoundingClientRect(); + + return (pRect.bottom - rect.bottom).round(); + } + }); + } + + Element.Offset = Class.create({ + initialize: function(left, top) { + this.left = left.round(); + this.top = top.round(); + + this[0] = this.left; + this[1] = this.top; + }, + + relativeTo: function(offset) { + return new Element.Offset( + this.left - offset.left, + this.top - offset.top + ); + }, + + inspect: function() { + return "#".interpolate(this); + }, + + toString: function() { + return "[#{left}, #{top}]".interpolate(this); + }, + + toArray: function() { + return [this.left, this.top]; + } + }); + + function getLayout(element, preCompute) { + return new Element.Layout(element, preCompute); + } + + function measure(element, property) { + return $(element).getLayout().get(property); + } + + function getDimensions(element) { + var layout = $(element).getLayout(); + return { + width: layout.get('width'), + height: layout.get('height') + }; + } + + function getOffsetParent(element) { + if (isDetached(element)) return $(document.body); + + var isInline = (Element.getStyle(element, 'display') === 'inline'); + if (!isInline && element.offsetParent) return $(element.offsetParent); + if (element === document.body) return $(element); + + while ((element = element.parentNode) && element !== document.body) { + if (Element.getStyle(element, 'position') !== 'static') { + return (element.nodeName === 'HTML') ? $(document.body) : $(element); + } + } + + return $(document.body); + } + + + function cumulativeOffset(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + } while (element); + return new Element.Offset(valueL, valueT); + } + + function positionedOffset(element) { + var layout = element.getLayout(); + + var valueT = 0, valueL = 0; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + element = element.offsetParent; + if (element) { + if (isBody(element)) break; + var p = Element.getStyle(element, 'position'); + if (p !== 'static') break; + } + } while (element); + + valueL -= layout.get('margin-top'); + valueT -= layout.get('margin-left'); + + return new Element.Offset(valueL, valueT); + } + + function cumulativeScrollOffset(element) { + var valueT = 0, valueL = 0; + do { + valueT += element.scrollTop || 0; + valueL += element.scrollLeft || 0; + element = element.parentNode; + } while (element); + return new Element.Offset(valueL, valueT); + } + + function viewportOffset(forElement) { + var valueT = 0, valueL = 0, docBody = document.body; + + var element = forElement; + do { + valueT += element.offsetTop || 0; + valueL += element.offsetLeft || 0; + if (element.offsetParent == docBody && + Element.getStyle(element, 'position') == 'absolute') break; + } while (element = element.offsetParent); + + element = forElement; + do { + if (element != docBody) { + valueT -= element.scrollTop || 0; + valueL -= element.scrollLeft || 0; + } + } while (element = element.parentNode); + return new Element.Offset(valueL, valueT); + } + + function absolutize(element) { + element = $(element); + + if (Element.getStyle(element, 'position') === 'absolute') { + return element; + } + + var offsetParent = getOffsetParent(element); + var eOffset = element.viewportOffset(), + pOffset = offsetParent.viewportOffset(); + + var offset = eOffset.relativeTo(pOffset); + var layout = element.getLayout(); + + element.store('prototype_absolutize_original_styles', { + left: element.getStyle('left'), + top: element.getStyle('top'), + width: element.getStyle('width'), + height: element.getStyle('height') + }); + + element.setStyle({ + position: 'absolute', + top: offset.top + 'px', + left: offset.left + 'px', + width: layout.get('width') + 'px', + height: layout.get('height') + 'px' + }); + + return element; + } + + function relativize(element) { + element = $(element); + if (Element.getStyle(element, 'position') === 'relative') { + return element; + } + + var originalStyles = + element.retrieve('prototype_absolutize_original_styles'); + + if (originalStyles) element.setStyle(originalStyles); + return element; + } + + Element.addMethods({ + getLayout: getLayout, + measure: measure, + getDimensions: getDimensions, + getOffsetParent: getOffsetParent, + cumulativeOffset: cumulativeOffset, + positionedOffset: positionedOffset, + cumulativeScrollOffset: cumulativeScrollOffset, + viewportOffset: viewportOffset, + absolutize: absolutize, + relativize: relativize + }); + + function isBody(element) { + return element.nodeName.toUpperCase() === 'BODY'; + } + + function isDetached(element) { + return element !== document.body && + !Element.descendantOf(element, document.body); + } + + if ('getBoundingClientRect' in document.documentElement) { + Element.addMethods({ + viewportOffset: function(element) { + element = $(element); + if (isDetached(element)) return new Element.Offset(0, 0); + + var rect = element.getBoundingClientRect(), + docEl = document.documentElement; + return new Element.Offset(rect.left - docEl.clientLeft, + rect.top - docEl.clientTop); + }, + + positionedOffset: function(element) { + element = $(element); + var parent = element.getOffsetParent(); + if (isDetached(element)) return new Element.Offset(0, 0); + + if (element.offsetParent && + element.offsetParent.nodeName.toUpperCase() === 'HTML') { + return positionedOffset(element); + } + + var eOffset = element.viewportOffset(), + pOffset = isBody(parent) ? viewportOffset(parent) : + parent.viewportOffset(); + var retOffset = eOffset.relativeTo(pOffset); + + var layout = element.getLayout(); + var top = retOffset.top - layout.get('margin-top'); + var left = retOffset.left - layout.get('margin-left'); + + return new Element.Offset(left, top); + } + }); + } +})(); +window.$$ = function() { + var expression = $A(arguments).join(', '); + return Prototype.Selector.select(expression, document); +}; + +Prototype.Selector = (function() { + + function select() { + throw new Error('Method "Prototype.Selector.select" must be defined.'); + } + + function match() { + throw new Error('Method "Prototype.Selector.match" must be defined.'); + } + + function find(elements, expression, index) { + index = index || 0; + var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i; + + for (i = 0; i < length; i++) { + if (match(elements[i], expression) && index == matchIndex++) { + return Element.extend(elements[i]); + } + } + } + + function extendElements(elements) { + for (var i = 0, length = elements.length; i < length; i++) { + Element.extend(elements[i]); + } + return elements; + } + + + var K = Prototype.K; + + return { + select: select, + match: match, + find: find, + extendElements: (Element.extend === K) ? K : extendElements, + extendElement: Element.extend + }; +})(); +Prototype._original_property = window.Sizzle; +/*! + * Sizzle CSS Selector Engine - v1.0 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true; + +[0, 0].sort(function(){ + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function(selector, context, results, seed) { + results = results || []; + var origContext = context = context || document; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context), + soFar = selector; + + while ( (chunker.exec(""), m = chunker.exec(soFar)) !== null ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context ); + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) + selector += parts.shift(); + + set = posProcess( selector, set ); + } + } + } else { + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + var ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0]; + } + + if ( context ) { + var ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray(set); + } else { + prune = false; + } + + while ( parts.length ) { + var cur = parts.pop(), pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + throw "Syntax error, unrecognized expression: " + (cur || selector); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + } else if ( context && context.nodeType === 1 ) { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + } else { + for ( var i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function(results){ + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort(sortOrder); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[i-1] ) { + results.splice(i--, 1); + } + } + } + } + + return results; +}; + +Sizzle.matches = function(expr, set){ + return Sizzle(expr, null, null, set); +}; + +Sizzle.find = function(expr, context, isXML){ + var set, match; + + if ( !expr ) { + return []; + } + + for ( var i = 0, l = Expr.order.length; i < l; i++ ) { + var type = Expr.order[i], match; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + var left = match[1]; + match.splice(1,1); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace(/\\/g, ""); + set = Expr.find[ type ]( match, context, isXML ); + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = context.getElementsByTagName("*"); + } + + return {set: set, expr: expr}; +}; + +Sizzle.filter = function(expr, set, inplace, not){ + var old = expr, result = [], curLoop = set, match, anyFound, + isXMLFilter = set && set[0] && isXML(set[0]); + + while ( expr && set.length ) { + for ( var type in Expr.filter ) { + if ( (match = Expr.match[ type ].exec( expr )) != null ) { + var filter = Expr.filter[ type ], found, item; + anyFound = false; + + if ( curLoop == result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( var i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + var pass = not ^ !!found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + } else { + curLoop[i] = false; + } + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + if ( expr == old ) { + if ( anyFound == null ) { + throw "Syntax error, unrecognized expression: " + expr; + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + match: { + ID: /#((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/ + }, + leftMatch: {}, + attrMap: { + "class": "className", + "for": "htmlFor" + }, + attrHandle: { + href: function(elem){ + return elem.getAttribute("href"); + } + }, + relative: { + "+": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !/\W/.test(part), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag && !isXML ) { + part = part.toUpperCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + ">": function(checkSet, part, isXML){ + var isPartStr = typeof part === "string"; + + if ( isPartStr && !/\W/.test(part) ) { + part = isXML ? part : part.toUpperCase(); + + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName === part ? parent : false; + } + } + } else { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + "": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML); + }, + "~": function(checkSet, part, isXML){ + var doneName = done++, checkFn = dirCheck; + + if ( typeof part === "string" && !/\W/.test(part) ) { + var nodeCheck = part = isXML ? part : part.toUpperCase(); + checkFn = dirNodeCheck; + } + + checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML); + } + }, + find: { + ID: function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? [m] : []; + } + }, + NAME: function(match, context, isXML){ + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], results = context.getElementsByName(match[1]); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + TAG: function(match, context){ + return context.getElementsByTagName(match[1]); + } + }, + preFilter: { + CLASS: function(match, curLoop, inplace, result, not, isXML){ + match = " " + match[1].replace(/\\/g, "") + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) { + if ( !inplace ) + result.push( elem ); + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + ID: function(match){ + return match[1].replace(/\\/g, ""); + }, + TAG: function(match, curLoop){ + for ( var i = 0; curLoop[i] === false; i++ ){} + return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase(); + }, + CHILD: function(match){ + if ( match[1] == "nth" ) { + var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( + match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + + match[0] = done++; + + return match; + }, + ATTR: function(match, curLoop, inplace, result, not, isXML){ + var name = match[1].replace(/\\/g, ""); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + PSEUDO: function(match, curLoop, inplace, result, not){ + if ( match[1] === "not" ) { + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + if ( !inplace ) { + result.push.apply( result, ret ); + } + return false; + } + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + POS: function(match){ + match.unshift( true ); + return match; + } + }, + filters: { + enabled: function(elem){ + return elem.disabled === false && elem.type !== "hidden"; + }, + disabled: function(elem){ + return elem.disabled === true; + }, + checked: function(elem){ + return elem.checked === true; + }, + selected: function(elem){ + elem.parentNode.selectedIndex; + return elem.selected === true; + }, + parent: function(elem){ + return !!elem.firstChild; + }, + empty: function(elem){ + return !elem.firstChild; + }, + has: function(elem, i, match){ + return !!Sizzle( match[3], elem ).length; + }, + header: function(elem){ + return /h\d/i.test( elem.nodeName ); + }, + text: function(elem){ + return "text" === elem.type; + }, + radio: function(elem){ + return "radio" === elem.type; + }, + checkbox: function(elem){ + return "checkbox" === elem.type; + }, + file: function(elem){ + return "file" === elem.type; + }, + password: function(elem){ + return "password" === elem.type; + }, + submit: function(elem){ + return "submit" === elem.type; + }, + image: function(elem){ + return "image" === elem.type; + }, + reset: function(elem){ + return "reset" === elem.type; + }, + button: function(elem){ + return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON"; + }, + input: function(elem){ + return /input|select|textarea|button/i.test(elem.nodeName); + } + }, + setFilters: { + first: function(elem, i){ + return i === 0; + }, + last: function(elem, i, match, array){ + return i === array.length - 1; + }, + even: function(elem, i){ + return i % 2 === 0; + }, + odd: function(elem, i){ + return i % 2 === 1; + }, + lt: function(elem, i, match){ + return i < match[3] - 0; + }, + gt: function(elem, i, match){ + return i > match[3] - 0; + }, + nth: function(elem, i, match){ + return match[3] - 0 == i; + }, + eq: function(elem, i, match){ + return match[3] - 0 == i; + } + }, + filter: { + PSEUDO: function(elem, match, i, array){ + var name = match[1], filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0; + } else if ( name === "not" ) { + var not = match[3]; + + for ( var i = 0, l = not.length; i < l; i++ ) { + if ( not[i] === elem ) { + return false; + } + } + + return true; + } + }, + CHILD: function(elem, match){ + var type = match[1], node = elem; + switch (type) { + case 'only': + case 'first': + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) return false; + } + if ( type == 'first') return true; + node = elem; + case 'last': + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) return false; + } + return true; + case 'nth': + var first = match[2], last = match[3]; + + if ( first == 1 && last == 0 ) { + return true; + } + + var doneName = match[0], + parent = elem.parentNode; + + if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) { + var count = 0; + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + parent.sizcache = doneName; + } + + var diff = elem.nodeIndex - last; + if ( first == 0 ) { + return diff == 0; + } else { + return ( diff % first == 0 && diff / first >= 0 ); + } + } + }, + ID: function(elem, match){ + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + TAG: function(elem, match){ + return (match === "*" && elem.nodeType === 1) || elem.nodeName === match; + }, + CLASS: function(elem, match){ + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + ATTR: function(elem, match){ + var name = match[1], + result = Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value != check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + POS: function(elem, match, i, array){ + var name = match[2], filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source ); } -function $$() { - return Selector.findChildElements(document, $A(arguments)); +var makeArray = function(array, results) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 ); + +} catch(e){ + makeArray = function(array, results) { + var ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + } else { + if ( typeof array.length === "number" ) { + for ( var i = 0, l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + } else { + for ( var i = 0; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; } + +var sortOrder; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( "sourceIndex" in document.documentElement ) { + sortOrder = function( a, b ) { + if ( !a.sourceIndex || !b.sourceIndex ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var ret = a.sourceIndex - b.sourceIndex; + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} else if ( document.createRange ) { + sortOrder = function( a, b ) { + if ( !a.ownerDocument || !b.ownerDocument ) { + if ( a == b ) { + hasDuplicate = true; + } + return 0; + } + + var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange(); + aRange.setStart(a, 0); + aRange.setEnd(a, 0); + bRange.setStart(b, 0); + bRange.setEnd(b, 0); + var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange); + if ( ret === 0 ) { + hasDuplicate = true; + } + return ret; + }; +} + +(function(){ + var form = document.createElement("div"), + id = "script" + (new Date).getTime(); + form.innerHTML = "
"; + + var root = document.documentElement; + root.insertBefore( form, root.firstChild ); + + if ( !!document.getElementById( id ) ) { + Expr.find.ID = function(match, context, isXML){ + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : []; + } + }; + + Expr.filter.ID = function(elem, match){ + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + root = form = null; // release memory in IE +})(); + +(function(){ + + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function(match, context){ + var results = context.getElementsByTagName(match[1]); + + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + div.innerHTML = ""; + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + Expr.attrHandle.href = function(elem){ + return elem.getAttribute("href", 2); + }; + } + + div = null; // release memory in IE +})(); + +if ( document.querySelectorAll ) (function(){ + var oldSizzle = Sizzle, div = document.createElement("div"); + div.innerHTML = "

"; + + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function(query, context, extra, seed){ + context = context || document; + + if ( !seed && context.nodeType === 9 && !isXML(context) ) { + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(e){} + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + div = null; // release memory in IE +})(); + +if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){ + var div = document.createElement("div"); + div.innerHTML = "
"; + + if ( div.getElementsByClassName("e").length === 0 ) + return; + + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) + return; + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function(match, context, isXML) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + div = null; // release memory in IE +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ){ + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem.sizcache = doneName; + elem.sizset = i; + } + + if ( elem.nodeName === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + var sibDir = dir == "previousSibling" && !isXML; + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + if ( elem ) { + if ( sibDir && elem.nodeType === 1 ) { + elem.sizcache = doneName; + elem.sizset = i; + } + elem = elem[dir]; + var match = false; + + while ( elem ) { + if ( elem.sizcache === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem.sizcache = doneName; + elem.sizset = i; + } + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +var contains = document.compareDocumentPosition ? function(a, b){ + return a.compareDocumentPosition(b) & 16; +} : function(a, b){ + return a !== b && (a.contains ? a.contains(b) : true); +}; + +var isXML = function(elem){ + return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" || + !!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== "HTML"; +}; + +var posProcess = function(selector, context){ + var tmpSet = [], later = "", match, + root = context.nodeType ? [context] : context; + + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet ); + } + + return Sizzle.filter( later, tmpSet ); +}; + + +window.Sizzle = Sizzle; + +})(); + +;(function(engine) { + var extendElements = Prototype.Selector.extendElements; + + function select(selector, scope) { + return extendElements(engine(selector, scope || document)); + } + + function match(element, selector) { + return engine.matches(selector, [element]).length == 1; + } + + Prototype.Selector.engine = engine; + Prototype.Selector.select = select; + Prototype.Selector.match = match; +})(Sizzle); + +window.Sizzle = Prototype._original_property; +delete Prototype._original_property; + var Form = { reset: function(form) { - $(form).reset(); + form = $(form); + form.reset(); return form; }, @@ -3460,7 +4970,6 @@ var Form = { if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted && submit !== false && (!submit || key == submit) && (submitted = true)))) { if (key in result) { - // a key is already present; construct an array of values if (!Object.isArray(result[key])) result[key] = [result[key]]; result[key].push(value); } @@ -3480,13 +4989,18 @@ Form.Methods = { }, getElements: function(form) { - return $A($(form).getElementsByTagName('*')).inject([], - function(elements, child) { - if (Form.Element.Serializers[child.tagName.toLowerCase()]) - elements.push(Element.extend(child)); - return elements; - } - ); + var elements = $(form).getElementsByTagName('*'), + element, + arr = [ ], + serializers = Form.Element.Serializers; + for (var i = 0; element = elements[i]; i++) { + arr.push(element); + } + return arr.inject([], function(elements, child) { + if (serializers[child.tagName.toLowerCase()]) + elements.push(Element.extend(child)); + return elements; + }) }, getInputs: function(form, typeName, name) { @@ -3526,7 +5040,7 @@ Form.Methods = { }).sortBy(function(element) { return element.tabIndex }).first(); return firstByIndex ? firstByIndex : elements.find(function(element) { - return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); + return /^(?:input|select|textarea)$/i.test(element.tagName); }); }, @@ -3557,6 +5071,7 @@ Form.Methods = { /*--------------------------------------------------------------------------*/ + Form.Element = { focus: function(element) { $(element).focus(); @@ -3570,6 +5085,7 @@ Form.Element = { }; Form.Element.Methods = { + serialize: function(element) { element = $(element); if (!element.disabled && element.name) { @@ -3610,7 +5126,7 @@ Form.Element.Methods = { try { element.focus(); if (element.select && (element.tagName.toLowerCase() != 'input' || - !['button', 'reset', 'submit'].include(element.type))) + !(/^(?:button|reset|submit)$/i.test(element.type)))) element.select(); } catch (e) { } return element; @@ -3632,6 +5148,7 @@ Form.Element.Methods = { /*--------------------------------------------------------------------------*/ var Field = Form.Element; + var $F = Form.Element.Methods.getValue; /*--------------------------------------------------------------------------*/ @@ -3694,13 +5211,13 @@ Form.Element.Serializers = { }, optionValue: function(opt) { - // extend element because hasAttribute may not be native return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; } }; /*--------------------------------------------------------------------------*/ + Abstract.TimedObserver = Class.create(PeriodicalExecuter, { initialize: function($super, element, frequency, callback) { $super(callback, frequency); @@ -3782,354 +5299,475 @@ Form.EventObserver = Class.create(Abstract.EventObserver, { return Form.serialize(this.element); } }); -if (!window.Event) var Event = { }; +(function() { -Object.extend(Event, { - KEY_BACKSPACE: 8, - KEY_TAB: 9, - KEY_RETURN: 13, - KEY_ESC: 27, - KEY_LEFT: 37, - KEY_UP: 38, - KEY_RIGHT: 39, - KEY_DOWN: 40, - KEY_DELETE: 46, - KEY_HOME: 36, - KEY_END: 35, - KEY_PAGEUP: 33, - KEY_PAGEDOWN: 34, - KEY_INSERT: 45, + var Event = { + KEY_BACKSPACE: 8, + KEY_TAB: 9, + KEY_RETURN: 13, + KEY_ESC: 27, + KEY_LEFT: 37, + KEY_UP: 38, + KEY_RIGHT: 39, + KEY_DOWN: 40, + KEY_DELETE: 46, + KEY_HOME: 36, + KEY_END: 35, + KEY_PAGEUP: 33, + KEY_PAGEDOWN: 34, + KEY_INSERT: 45, - cache: { }, + cache: {} + }; - relatedTarget: function(event) { - var element; - switch(event.type) { - case 'mouseover': element = event.fromElement; break; - case 'mouseout': element = event.toElement; break; - default: return null; - } - return Element.extend(element); - } -}); - -Event.Methods = (function() { - var isButton; + var docEl = document.documentElement; + var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl + && 'onmouseleave' in docEl; + var _isButton; if (Prototype.Browser.IE) { var buttonMap = { 0: 1, 1: 4, 2: 2 }; - isButton = function(event, code) { - return event.button == buttonMap[code]; + _isButton = function(event, code) { + return event.button === buttonMap[code]; }; - } else if (Prototype.Browser.WebKit) { - isButton = function(event, code) { + _isButton = function(event, code) { switch (code) { case 0: return event.which == 1 && !event.metaKey; case 1: return event.which == 1 && event.metaKey; default: return false; } }; - } else { - isButton = function(event, code) { + _isButton = function(event, code) { return event.which ? (event.which === code + 1) : (event.button === code); }; } - return { - isLeftClick: function(event) { return isButton(event, 0) }, - isMiddleClick: function(event) { return isButton(event, 1) }, - isRightClick: function(event) { return isButton(event, 2) }, + function isLeftClick(event) { return _isButton(event, 0) } - element: function(event) { - event = Event.extend(event); + function isMiddleClick(event) { return _isButton(event, 1) } - var node = event.target, - type = event.type, - currentTarget = event.currentTarget; + function isRightClick(event) { return _isButton(event, 2) } - if (currentTarget && currentTarget.tagName) { - // Firefox screws up the "click" event when moving between radio buttons - // via arrow keys. It also screws up the "load" and "error" events on images, - // reporting the document as the target instead of the original image. - if (type === 'load' || type === 'error' || - (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' - && currentTarget.type === 'radio')) - node = currentTarget; - } - if (node.nodeType == Node.TEXT_NODE) node = node.parentNode; - return Element.extend(node); - }, + function element(event) { + event = Event.extend(event); - findElement: function(event, expression) { - var element = Event.element(event); - if (!expression) return element; - var elements = [element].concat(element.ancestors()); - return Selector.findElement(elements, expression, 0); - }, + var node = event.target, type = event.type, + currentTarget = event.currentTarget; - pointer: function(event) { - var docElement = document.documentElement, - body = document.body || { scrollLeft: 0, scrollTop: 0 }; - return { - x: event.pageX || (event.clientX + - (docElement.scrollLeft || body.scrollLeft) - - (docElement.clientLeft || 0)), - y: event.pageY || (event.clientY + - (docElement.scrollTop || body.scrollTop) - - (docElement.clientTop || 0)) - }; - }, - - pointerX: function(event) { return Event.pointer(event).x }, - pointerY: function(event) { return Event.pointer(event).y }, - - stop: function(event) { - Event.extend(event); - event.preventDefault(); - event.stopPropagation(); - event.stopped = true; + if (currentTarget && currentTarget.tagName) { + if (type === 'load' || type === 'error' || + (type === 'click' && currentTarget.tagName.toLowerCase() === 'input' + && currentTarget.type === 'radio')) + node = currentTarget; } - }; -})(); -Event.extend = (function() { + if (node.nodeType == Node.TEXT_NODE) + node = node.parentNode; + + return Element.extend(node); + } + + function findElement(event, expression) { + var element = Event.element(event); + if (!expression) return element; + while (element) { + if (Object.isElement(element) && Prototype.Selector.match(element, expression)) { + return Element.extend(element); + } + element = element.parentNode; + } + } + + function pointer(event) { + return { x: pointerX(event), y: pointerY(event) }; + } + + function pointerX(event) { + var docElement = document.documentElement, + body = document.body || { scrollLeft: 0 }; + + return event.pageX || (event.clientX + + (docElement.scrollLeft || body.scrollLeft) - + (docElement.clientLeft || 0)); + } + + function pointerY(event) { + var docElement = document.documentElement, + body = document.body || { scrollTop: 0 }; + + return event.pageY || (event.clientY + + (docElement.scrollTop || body.scrollTop) - + (docElement.clientTop || 0)); + } + + + function stop(event) { + Event.extend(event); + event.preventDefault(); + event.stopPropagation(); + + event.stopped = true; + } + + Event.Methods = { + isLeftClick: isLeftClick, + isMiddleClick: isMiddleClick, + isRightClick: isRightClick, + + element: element, + findElement: findElement, + + pointer: pointer, + pointerX: pointerX, + pointerY: pointerY, + + stop: stop + }; + + var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { m[name] = Event.Methods[name].methodize(); return m; }); if (Prototype.Browser.IE) { + function _relatedTarget(event) { + var element; + switch (event.type) { + case 'mouseover': element = event.fromElement; break; + case 'mouseout': element = event.toElement; break; + default: return null; + } + return Element.extend(element); + } + Object.extend(methods, { stopPropagation: function() { this.cancelBubble = true }, preventDefault: function() { this.returnValue = false }, - inspect: function() { return "[object Event]" } + inspect: function() { return '[object Event]' } }); - return function(event) { + Event.extend = function(event, element) { if (!event) return false; if (event._extendedByPrototype) return event; event._extendedByPrototype = Prototype.emptyFunction; var pointer = Event.pointer(event); + Object.extend(event, { - target: event.srcElement, - relatedTarget: Event.relatedTarget(event), + target: event.srcElement || element, + relatedTarget: _relatedTarget(event), pageX: pointer.x, pageY: pointer.y }); + return Object.extend(event, methods); }; - } else { - Event.prototype = Event.prototype || document.createEvent("HTMLEvents")['__proto__']; + Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__; Object.extend(Event.prototype, methods); - return Prototype.K; - } -})(); - -Object.extend(Event, (function() { - var cache = Event.cache; - - function getEventID(element) { - if (element._prototypeEventID) return element._prototypeEventID[0]; - arguments.callee.id = arguments.callee.id || 1; - return element._prototypeEventID = [++arguments.callee.id]; + Event.extend = Prototype.K; } - function getDOMEventName(eventName) { - if (eventName && eventName.include(':')) return "dataavailable"; - return eventName; - } + function _createResponder(element, eventName, handler) { + var registry = Element.retrieve(element, 'prototype_event_registry'); - function getCacheForID(id) { - return cache[id] = cache[id] || { }; - } + if (Object.isUndefined(registry)) { + CACHE.push(element); + registry = Element.retrieve(element, 'prototype_event_registry', $H()); + } - function getWrappersForEventName(id, eventName) { - var c = getCacheForID(id); - return c[eventName] = c[eventName] || []; - } + var respondersForEvent = registry.get(eventName); + if (Object.isUndefined(respondersForEvent)) { + respondersForEvent = []; + registry.set(eventName, respondersForEvent); + } - function createWrapper(element, eventName, handler) { - var id = getEventID(element); - var c = getWrappersForEventName(id, eventName); - if (c.pluck("handler").include(handler)) return false; + if (respondersForEvent.pluck('handler').include(handler)) return false; - var wrapper = function(event) { - if (!Event || !Event.extend || - (event.eventName && event.eventName != eventName)) + var responder; + if (eventName.include(":")) { + responder = function(event) { + if (Object.isUndefined(event.eventName)) return false; - Event.extend(event); - handler.call(element, event); - }; + if (event.eventName !== eventName) + return false; - wrapper.handler = handler; - c.push(wrapper); - return wrapper; - } + Event.extend(event, element); + handler.call(element, event); + }; + } else { + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED && + (eventName === "mouseenter" || eventName === "mouseleave")) { + if (eventName === "mouseenter" || eventName === "mouseleave") { + responder = function(event) { + Event.extend(event, element); - function findWrapper(id, eventName, handler) { - var c = getWrappersForEventName(id, eventName); - return c.find(function(wrapper) { return wrapper.handler == handler }); - } + var parent = event.relatedTarget; + while (parent && parent !== element) { + try { parent = parent.parentNode; } + catch(e) { parent = element; } + } - function destroyWrapper(id, eventName, handler) { - var c = getCacheForID(id); - if (!c[eventName]) return false; - c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); - } + if (parent === element) return; - function destroyCache() { - for (var id in cache) - for (var eventName in cache[id]) - cache[id][eventName] = null; - } - - - // Internet Explorer needs to remove event handlers on page unload - // in order to avoid memory leaks. - if (window.attachEvent) { - window.attachEvent("onunload", destroyCache); - } - - // Safari has a dummy event handler on page unload so that it won't - // use its bfcache. Safari <= 3.1 has an issue with restoring the "document" - // object when page is returned to via the back button using its bfcache. - if (Prototype.Browser.WebKit) { - window.addEventListener('unload', Prototype.emptyFunction, false); - } - - return { - observe: function(element, eventName, handler) { - element = $(element); - var name = getDOMEventName(eventName); - - var wrapper = createWrapper(element, eventName, handler); - if (!wrapper) return element; - - if (element.addEventListener) { - element.addEventListener(name, wrapper, false); + handler.call(element, event); + }; + } } else { - element.attachEvent("on" + name, wrapper); + responder = function(event) { + Event.extend(event, element); + handler.call(element, event); + }; } - - return element; - }, - - stopObserving: function(element, eventName, handler) { - element = $(element); - var id = getEventID(element), name = getDOMEventName(eventName); - - if (!handler && eventName) { - getWrappersForEventName(id, eventName).each(function(wrapper) { - element.stopObserving(eventName, wrapper.handler); - }); - return element; - - } else if (!eventName) { - Object.keys(getCacheForID(id)).each(function(eventName) { - element.stopObserving(eventName); - }); - return element; - } - - var wrapper = findWrapper(id, eventName, handler); - if (!wrapper) return element; - - if (element.removeEventListener) { - element.removeEventListener(name, wrapper, false); - } else { - element.detachEvent("on" + name, wrapper); - } - - destroyWrapper(id, eventName, handler); - - return element; - }, - - fire: function(element, eventName, memo) { - element = $(element); - if (element == document && document.createEvent && !element.dispatchEvent) - element = document.documentElement; - - var event; - if (document.createEvent) { - event = document.createEvent("HTMLEvents"); - event.initEvent("dataavailable", true, true); - } else { - event = document.createEventObject(); - event.eventType = "ondataavailable"; - } - - event.eventName = eventName; - event.memo = memo || { }; - - if (document.createEvent) { - element.dispatchEvent(event); - } else { - element.fireEvent(event.eventType, event); - } - - return Event.extend(event); } - }; -})()); -Object.extend(Event, Event.Methods); + responder.handler = handler; + respondersForEvent.push(responder); + return responder; + } -Element.addMethods({ - fire: Event.fire, - observe: Event.observe, - stopObserving: Event.stopObserving -}); + function _destroyCache() { + for (var i = 0, length = CACHE.length; i < length; i++) { + Event.stopObserving(CACHE[i]); + CACHE[i] = null; + } + } -Object.extend(document, { - fire: Element.Methods.fire.methodize(), - observe: Element.Methods.observe.methodize(), - stopObserving: Element.Methods.stopObserving.methodize(), - loaded: false -}); + var CACHE = []; + + if (Prototype.Browser.IE) + window.attachEvent('onunload', _destroyCache); + + if (Prototype.Browser.WebKit) + window.addEventListener('unload', Prototype.emptyFunction, false); + + + var _getDOMEventName = Prototype.K, + translations = { mouseenter: "mouseover", mouseleave: "mouseout" }; + + if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) { + _getDOMEventName = function(eventName) { + return (translations[eventName] || eventName); + }; + } + + function observe(element, eventName, handler) { + element = $(element); + + var responder = _createResponder(element, eventName, handler); + + if (!responder) return element; + + if (eventName.include(':')) { + if (element.addEventListener) + element.addEventListener("dataavailable", responder, false); + else { + element.attachEvent("ondataavailable", responder); + element.attachEvent("onfilterchange", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + + if (element.addEventListener) + element.addEventListener(actualEventName, responder, false); + else + element.attachEvent("on" + actualEventName, responder); + } + + return element; + } + + function stopObserving(element, eventName, handler) { + element = $(element); + + var registry = Element.retrieve(element, 'prototype_event_registry'); + if (!registry) return element; + + if (!eventName) { + registry.each( function(pair) { + var eventName = pair.key; + stopObserving(element, eventName); + }); + return element; + } + + var responders = registry.get(eventName); + if (!responders) return element; + + if (!handler) { + responders.each(function(r) { + stopObserving(element, eventName, r.handler); + }); + return element; + } + + var responder = responders.find( function(r) { return r.handler === handler; }); + if (!responder) return element; + + if (eventName.include(':')) { + if (element.removeEventListener) + element.removeEventListener("dataavailable", responder, false); + else { + element.detachEvent("ondataavailable", responder); + element.detachEvent("onfilterchange", responder); + } + } else { + var actualEventName = _getDOMEventName(eventName); + if (element.removeEventListener) + element.removeEventListener(actualEventName, responder, false); + else + element.detachEvent('on' + actualEventName, responder); + } + + registry.set(eventName, responders.without(responder)); + + return element; + } + + function fire(element, eventName, memo, bubble) { + element = $(element); + + if (Object.isUndefined(bubble)) + bubble = true; + + if (element == document && document.createEvent && !element.dispatchEvent) + element = document.documentElement; + + var event; + if (document.createEvent) { + event = document.createEvent('HTMLEvents'); + event.initEvent('dataavailable', true, true); + } else { + event = document.createEventObject(); + event.eventType = bubble ? 'ondataavailable' : 'onfilterchange'; + } + + event.eventName = eventName; + event.memo = memo || { }; + + if (document.createEvent) + element.dispatchEvent(event); + else + element.fireEvent(event.eventType, event); + + return Event.extend(event); + } + + Event.Handler = Class.create({ + initialize: function(element, eventName, selector, callback) { + this.element = $(element); + this.eventName = eventName; + this.selector = selector; + this.callback = callback; + this.handler = this.handleEvent.bind(this); + }, + + start: function() { + Event.observe(this.element, this.eventName, this.handler); + return this; + }, + + stop: function() { + Event.stopObserving(this.element, this.eventName, this.handler); + return this; + }, + + handleEvent: function(event) { + var element = event.findElement(this.selector); + if (element) this.callback.call(this.element, event, element); + } + }); + + function on(element, eventName, selector, callback) { + element = $(element); + if (Object.isFunction(selector) && Object.isUndefined(callback)) { + callback = selector, selector = null; + } + + return new Event.Handler(element, eventName, selector, callback).start(); + } + + Object.extend(Event, Event.Methods); + + Object.extend(Event, { + fire: fire, + observe: observe, + stopObserving: stopObserving, + on: on + }); + + Element.addMethods({ + fire: fire, + + observe: observe, + + stopObserving: stopObserving, + + on: on + }); + + Object.extend(document, { + fire: fire.methodize(), + + observe: observe.methodize(), + + stopObserving: stopObserving.methodize(), + + on: on.methodize(), + + loaded: false + }); + + if (window.Event) Object.extend(window.Event, Event); + else window.Event = Event; +})(); (function() { /* Support for the DOMContentLoaded event is based on work by Dan Webb, - Matthias Miller, Dean Edwards and John Resig. */ + Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */ var timer; function fireContentLoadedEvent() { if (document.loaded) return; - if (timer) window.clearInterval(timer); - document.fire("dom:loaded"); + if (timer) window.clearTimeout(timer); document.loaded = true; + document.fire('dom:loaded'); + } + + function checkReadyState() { + if (document.readyState === 'complete') { + document.stopObserving('readystatechange', checkReadyState); + fireContentLoadedEvent(); + } + } + + function pollDoScroll() { + try { document.documentElement.doScroll('left'); } + catch(e) { + timer = pollDoScroll.defer(); + return; + } + fireContentLoadedEvent(); } if (document.addEventListener) { - if (Prototype.Browser.WebKit) { - timer = window.setInterval(function() { - if (/loaded|complete/.test(document.readyState)) - fireContentLoadedEvent(); - }, 0); - - Event.observe(window, "load", fireContentLoadedEvent); - - } else { - document.addEventListener("DOMContentLoaded", - fireContentLoadedEvent, false); - } - + document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false); } else { - document.write(" - - - -

{$lang_template_title}

- -
- - -
- -
- - diff --git a/public/tiny_mce/plugins/_template/readme.txt b/public/tiny_mce/plugins/_template/readme.txt deleted file mode 100644 index 2ee1505..0000000 --- a/public/tiny_mce/plugins/_template/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This is a template/tutorial plugin that where created to help you in the development of own plugins for TinyMCE. \ No newline at end of file diff --git a/public/tiny_mce/plugins/advhr/editor_plugin.js b/public/tiny_mce/plugins/advhr/editor_plugin.js deleted file mode 100644 index ef74430..0000000 --- a/public/tiny_mce/plugins/advhr/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('advhr','en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br');function TinyMCE_advhr_getControlHTML(control_name){switch(control_name){case "advhr":return '';}return "";}function TinyMCE_advhr_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceAdvancedHr":var template=new Array();template['file']='../../plugins/advhr/rule.htm';template['width']=270;template['height']=180;var size="",width="",noshade="";if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="hr"){tinyMCE.hrElement=tinyMCE.selectedElement;if(tinyMCE.hrElement){size=tinyMCE.hrElement.getAttribute('size')?tinyMCE.hrElement.getAttribute('size'):"";width=tinyMCE.hrElement.getAttribute('width')?tinyMCE.hrElement.getAttribute('width'):"";noshade=tinyMCE.hrElement.getAttribute('noshade')?tinyMCE.hrElement.getAttribute('noshade'):"";}tinyMCE.openWindow(template,{editor_id:editor_id,size:size,width:width,noshade:noshade,mceDo:'update'});}else{if(tinyMCE.isMSIE){tinyMCE.execInstanceCommand(editor_id,'mceInsertContent',false,'
');}else{tinyMCE.openWindow(template,{editor_id:editor_id,size:size,width:width,noshade:noshade,mceDo:'insert'});}}return true;}return false;}function TinyMCE_advhr_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){tinyMCE.switchClassSticky(editor_id+'_advhr','mceButtonNormal');if(node==null)return;do{if(node.nodeName.toLowerCase()=="hr")tinyMCE.switchClassSticky(editor_id+'_advhr','mceButtonSelected');}while((node=node.parentNode));return true;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/advhr/editor_plugin_src.js b/public/tiny_mce/plugins/advhr/editor_plugin_src.js deleted file mode 100644 index 44e021c..0000000 --- a/public/tiny_mce/plugins/advhr/editor_plugin_src.js +++ /dev/null @@ -1,58 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('advhr', 'en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br'); - -function TinyMCE_advhr_getControlHTML(control_name) { - switch (control_name) { - case "advhr": - return ''; - } - return ""; -} - -/** - * Executes the mceAdvanceHr command. - */ -function TinyMCE_advhr_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceAdvancedHr": - var template = new Array(); - template['file'] = '../../plugins/advhr/rule.htm'; // Relative to theme - template['width'] = 270; - template['height'] = 180; - var size = "", width = "", noshade = ""; - if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "hr"){ - tinyMCE.hrElement = tinyMCE.selectedElement; - if (tinyMCE.hrElement) { - size = tinyMCE.hrElement.getAttribute('size') ? tinyMCE.hrElement.getAttribute('size') : ""; - width = tinyMCE.hrElement.getAttribute('width') ? tinyMCE.hrElement.getAttribute('width') : ""; - noshade = tinyMCE.hrElement.getAttribute('noshade') ? tinyMCE.hrElement.getAttribute('noshade') : ""; - } - tinyMCE.openWindow(template, {editor_id : editor_id, size : size, width : width, noshade : noshade, mceDo : 'update'}); - } else { - if (tinyMCE.isMSIE) { - tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false,'
'); - } else { - tinyMCE.openWindow(template, {editor_id : editor_id, size : size, width : width, noshade : noshade, mceDo : 'insert'}); - } - } - - return true; - } - // Pass to next handler in chain - return false; -} - -function TinyMCE_advhr_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { - tinyMCE.switchClassSticky(editor_id + '_advhr', 'mceButtonNormal'); - - if (node == null) - return; - - do { - if (node.nodeName.toLowerCase() == "hr") - tinyMCE.switchClassSticky(editor_id + '_advhr', 'mceButtonSelected'); - } while ((node = node.parentNode)); - - return true; -} \ No newline at end of file diff --git a/public/tiny_mce/plugins/advhr/images/advhr.gif b/public/tiny_mce/plugins/advhr/images/advhr.gif deleted file mode 100644 index e18bfc2ac9e8360ca15d315c55ff182d846ff83e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 209 zcmZ?wbhEHb6k!lyI3mn2VaA392RJq|NsAIAOa} - -{$lang_insert_link_title} - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - -
{$lang_insert_advhr_desc}
{$lang_insert_advhr_width}: - - -
{$lang_insert_advhr_size}:
-
- - diff --git a/public/tiny_mce/plugins/advimage/editor_plugin.js b/public/tiny_mce/plugins/advimage/editor_plugin.js deleted file mode 100644 index 652a3b8..0000000 --- a/public/tiny_mce/plugins/advimage/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('advimage','en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br');function TinyMCE_advimage_getInsertImageTemplate(){var template=new Array();template['file']='../../plugins/advimage/image.htm';template['width']=430;template['height']=380;template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);return template;}function TinyMCE_advimage_cleanup(type,content){switch(type){case "insert_to_editor_dom":var imgs=content.getElementsByTagName("img");for(var i=0;i - -{$lang_insert_image_title} - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_image_title}
{$lang_insert_image_src}: - - - - -
{$lang_insert_image_alt}:
{$lang_insert_image_alt2}:
{$lang_insert_image_dimensions}: - x - px -
{$lang_insert_image_border}:
{$lang_insert_image_align}: -
{$lang_insert_image_vspace}:
{$lang_insert_image_hspace}:
{$lang_insert_image_mouseover}: - - - - -
{$lang_insert_image_mouseout}: - - - - -
 
-
- - diff --git a/public/tiny_mce/plugins/advimage/langs/cs.js b/public/tiny_mce/plugins/advimage/langs/cs.js deleted file mode 100644 index dde44c6..0000000 --- a/public/tiny_mce/plugins/advimage/langs/cs.js +++ /dev/null @@ -1,6 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Název obrázku'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Alternativní obrázek' -tinyMCELang['lang_insert_image_mouseover'] = 'pøi najetí myši'; -tinyMCELang['lang_insert_image_mouseout'] = 'pøi odjetí myši'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/advimage/langs/de.js b/public/tiny_mce/plugins/advimage/langs/de.js deleted file mode 100644 index c5a6d22..0000000 --- a/public/tiny_mce/plugins/advimage/langs/de.js +++ /dev/null @@ -1,6 +0,0 @@ -// DE lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Titel des Bildes'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Alternatives Bild' -tinyMCELang['lang_insert_image_mouseover'] = 'für Maus darüber'; -tinyMCELang['lang_insert_image_mouseout'] = 'für Maus ausserhalb'; diff --git a/public/tiny_mce/plugins/advimage/langs/en.js b/public/tiny_mce/plugins/advimage/langs/en.js deleted file mode 100644 index c4098af..0000000 --- a/public/tiny_mce/plugins/advimage/langs/en.js +++ /dev/null @@ -1,6 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Image title'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Alternative image' -tinyMCELang['lang_insert_image_mouseover'] = 'for mouse over'; -tinyMCELang['lang_insert_image_mouseout'] = 'for mouse out'; diff --git a/public/tiny_mce/plugins/advimage/langs/fa.js b/public/tiny_mce/plugins/advimage/langs/fa.js deleted file mode 100644 index 685a49f..0000000 --- a/public/tiny_mce/plugins/advimage/langs/fa.js +++ /dev/null @@ -1,11 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_insert_image_alt2'] = 'عنوان عکس'; -tinyMCELang['lang_insert_image_onmousemove'] = 'عکس جایگزین' -tinyMCELang['lang_insert_image_mouseover'] = 'عکس جایگزین هنگام ورود نشانگر ماوس'; -tinyMCELang['lang_insert_image_mouseout'] = 'عکس جایگزین هنگام خروج نشانگر ماوس'; diff --git a/public/tiny_mce/plugins/advimage/langs/fr.js b/public/tiny_mce/plugins/advimage/langs/fr.js deleted file mode 100644 index 588ab3c..0000000 --- a/public/tiny_mce/plugins/advimage/langs/fr.js +++ /dev/null @@ -1,6 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_insert_image_alt2'] = 'Titre de l\'image'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Image alternative' -tinyMCELang['lang_insert_image_mouseover'] = 'Pour la souris au dessus'; -tinyMCELang['lang_insert_image_mouseout'] = 'Pour la souris en dehors'; diff --git a/public/tiny_mce/plugins/advimage/langs/fr_ca.js b/public/tiny_mce/plugins/advimage/langs/fr_ca.js deleted file mode 100644 index 32e8af7..0000000 --- a/public/tiny_mce/plugins/advimage/langs/fr_ca.js +++ /dev/null @@ -1,6 +0,0 @@ -// CA_FR lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Titre de l\'image'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Image alternative'; -tinyMCELang['lang_insert_image_mouseover'] = 'pour le «mouse over»'; -tinyMCELang['lang_insert_image_mouseout'] = 'pour le «mouse out»'; diff --git a/public/tiny_mce/plugins/advimage/langs/ko.js b/public/tiny_mce/plugins/advimage/langs/ko.js deleted file mode 100644 index 68fe45a..0000000 --- a/public/tiny_mce/plugins/advimage/langs/ko.js +++ /dev/null @@ -1,6 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_insert_image_alt2'] = '±×¸² Á¦¸ñ'; -tinyMCELang['lang_insert_image_onmousemove'] = '´ëü À̹ÌÁö' -tinyMCELang['lang_insert_image_mouseover'] = '¸¶¿ì½º¸¦ ¿Ã·ÈÀ» ¶§'; -tinyMCELang['lang_insert_image_mouseout'] = '¸¶¿ì½º¸¦ ³»·ÈÀ» ¶§'; diff --git a/public/tiny_mce/plugins/advimage/langs/pl.js b/public/tiny_mce/plugins/advimage/langs/pl.js deleted file mode 100644 index fffba25..0000000 --- a/public/tiny_mce/plugins/advimage/langs/pl.js +++ /dev/null @@ -1,6 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'TytuÅ‚ obrazka'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Obrazek zastÄ™pczy' -tinyMCELang['lang_insert_image_mouseover'] = 'po najechaniu myszy'; -tinyMCELang['lang_insert_image_mouseout'] = 'po odjechaniu myszy'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/advimage/langs/pt_br.js b/public/tiny_mce/plugins/advimage/langs/pt_br.js deleted file mode 100644 index 91f2278..0000000 --- a/public/tiny_mce/plugins/advimage/langs/pt_br.js +++ /dev/null @@ -1,6 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Título da Imagem'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Imagem Alternativa' -tinyMCELang['lang_insert_image_mouseover'] = 'para quando mouse sobre'; -tinyMCELang['lang_insert_image_mouseout'] = 'para quando mouse fora'; diff --git a/public/tiny_mce/plugins/advimage/langs/sv.js b/public/tiny_mce/plugins/advimage/langs/sv.js deleted file mode 100644 index f901dbd..0000000 --- a/public/tiny_mce/plugins/advimage/langs/sv.js +++ /dev/null @@ -1,6 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_insert_image_alt2'] = 'Bildentitel'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Alternativ bild' -tinyMCELang['lang_insert_image_mouseover'] = 'när pekaren är över'; -tinyMCELang['lang_insert_image_mouseout'] = 'när pekaren är utanför'; diff --git a/public/tiny_mce/plugins/advimage/langs/zh_cn.js b/public/tiny_mce/plugins/advimage/langs/zh_cn.js deleted file mode 100644 index e418581..0000000 --- a/public/tiny_mce/plugins/advimage/langs/zh_cn.js +++ /dev/null @@ -1,7 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_insert_image_alt2'] = 'ͼƬ±êÌâ'; -tinyMCELang['lang_insert_image_onmousemove'] = 'Ìæ´úͼÏñ' -tinyMCELang['lang_insert_image_mouseover'] = 'Êó±êÒÆÉÏʱ'; -tinyMCELang['lang_insert_image_mouseout'] = 'Êó±êÒÆ¿ªÊ±'; diff --git a/public/tiny_mce/plugins/advimage/readme.txt b/public/tiny_mce/plugins/advimage/readme.txt deleted file mode 100644 index b88835b..0000000 --- a/public/tiny_mce/plugins/advimage/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ - Advimage plugin for TinyMCE ------------------------------ - -About: - This is a more advanced image dialog mostly based on code contributed by Michael Keck. - This one supports mouseover/out image swapping. - -Installation instructions: - * Copy the advimage directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "advimage". - * Add this "a[name|href|target|title|onclick]" to extended_valid_elements option. - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "preview", - extended_valid_elements : "a[name|href|target|title|onclick]" - }); diff --git a/public/tiny_mce/plugins/advlink/editor_plugin.js b/public/tiny_mce/plugins/advlink/editor_plugin.js deleted file mode 100644 index 826d7bb..0000000 --- a/public/tiny_mce/plugins/advlink/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('advlink','en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br');function TinyMCE_advlink_getInsertLinkTemplate(){var template=new Array();template['file']='../../plugins/advlink/link.htm';template['width']=400;template['height']=420;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);return template;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/advlink/editor_plugin_src.js b/public/tiny_mce/plugins/advlink/editor_plugin_src.js deleted file mode 100644 index 6d9daea..0000000 --- a/public/tiny_mce/plugins/advlink/editor_plugin_src.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('advlink', 'en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br'); - -/** - * Insert link template function. - */ -function TinyMCE_advlink_getInsertLinkTemplate() { - var template = new Array(); - template['file'] = '../../plugins/advlink/link.htm'; - template['width'] = 400; - template['height'] = 420; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); - - return template; -} \ No newline at end of file diff --git a/public/tiny_mce/plugins/advlink/langs/cs.js b/public/tiny_mce/plugins/advlink/langs/cs.js deleted file mode 100644 index fb758ca..0000000 --- a/public/tiny_mce/plugins/advlink/langs/cs.js +++ /dev/null @@ -1,20 +0,0 @@ -// CZ lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Otevøít ve stejném oknì/rámu'; -tinyMCELang['lang_insert_link_target_parent'] = 'Otevøít v rodièovském oknì/rámu'; -tinyMCELang['lang_insert_link_target_top'] = 'Otevøít v nejvyšším rámu (pøepíše všechny rámy)'; -tinyMCELang['lang_insert_link_target_blank'] = 'Otevøít v novém oknì'; -tinyMCELang['lang_insert_link_target_named'] = 'Otevøít v oknì'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_link_popup_name'] = 'Název okna'; -tinyMCELang['lang_insert_link_popup_return'] = 'insert \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Ukázat posuvníky'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Ukázat stavový øádek'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Ukázat ovl. lištu'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Ukázat menu'; -tinyMCELang['lang_insert_link_popup_location'] = 'Ukázat lištu umístìní'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Promìnná velikost okna'; -tinyMCELang['lang_insert_link_popup_size'] = 'Velikost'; -tinyMCELang['lang_insert_link_popup_position'] = 'Umístìní (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Vložte název cíle nebo vyberte jinou volbu.'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/advlink/langs/de.js b/public/tiny_mce/plugins/advlink/langs/de.js deleted file mode 100644 index 14af22a..0000000 --- a/public/tiny_mce/plugins/advlink/langs/de.js +++ /dev/null @@ -1,20 +0,0 @@ -// DE lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Im selben Frame öffnen'; -tinyMCELang['lang_insert_link_target_parent'] = 'Im darüber liegenden Frame öffnen'; -tinyMCELang['lang_insert_link_target_top']= 'Im obersten Frame öffnen'; -tinyMCELang['lang_insert_link_target_blank']= 'In einem neuen Fenster öffnen'; -tinyMCELang['lang_insert_link_target_named']= 'Öffnen im Fenster/Frame'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_link_popup_name']= 'Fenstername'; -tinyMCELang['lang_insert_link_popup_return']= 'mit \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars']= 'Scrollbars anzeigen'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Statusbar anzeigen'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Toolbars anzeigen'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Menu anzeigen'; -tinyMCELang['lang_insert_link_popup_location']= 'Adresszeile anzeigen'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Größe änderbar'; -tinyMCELang['lang_insert_link_popup_size']= 'Größe'; -tinyMCELang['lang_insert_link_popup_position']= 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Bitte geben Sie einen Namen für das Ziel an oder wählen Sie eine andere Option.'; diff --git a/public/tiny_mce/plugins/advlink/langs/en.js b/public/tiny_mce/plugins/advlink/langs/en.js deleted file mode 100644 index 9384f39..0000000 --- a/public/tiny_mce/plugins/advlink/langs/en.js +++ /dev/null @@ -1,20 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Open in this window / frame'; -tinyMCELang['lang_insert_link_target_parent'] = 'Open in parent window / frame'; -tinyMCELang['lang_insert_link_target_top'] = 'Open in top frame (replaces all frames)'; -tinyMCELang['lang_insert_link_target_blank'] = 'Open in new window'; -tinyMCELang['lang_insert_link_target_named'] = 'Open in the window'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_link_popup_name'] = 'Window name'; -tinyMCELang['lang_insert_link_popup_return'] = 'insert \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Show scrollbars'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Show statusbar'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Show toolbars'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Show menubar'; -tinyMCELang['lang_insert_link_popup_location'] = 'Show locationbar'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Make window resizable'; -tinyMCELang['lang_insert_link_popup_size'] = 'Size'; -tinyMCELang['lang_insert_link_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Please insert a name for the target or choose another option.'; diff --git a/public/tiny_mce/plugins/advlink/langs/fa.js b/public/tiny_mce/plugins/advlink/langs/fa.js deleted file mode 100644 index f126461..0000000 --- a/public/tiny_mce/plugins/advlink/langs/fa.js +++ /dev/null @@ -1,25 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_insert_link_target_same'] = 'در همین صÙحه / Ùریم باز Ú©Ù†'; -tinyMCELang['lang_insert_link_target_parent'] = 'در صÙحه / Ùریم اصلی باز Ú©Ù†'; -tinyMCELang['lang_insert_link_target_top'] = 'در Ùریم اصلی باز Ú©Ù† (همه Ùریمها نادیده گرÙته میشود)'; -tinyMCELang['lang_insert_link_target_blank'] = 'در صÙحه جدید باز Ú©Ù†'; -tinyMCELang['lang_insert_link_target_named'] = 'در پنجره باز Ú©Ù†'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'URL پنجره'; -tinyMCELang['lang_insert_link_popup_name'] = 'نام پنجره'; -tinyMCELang['lang_insert_link_popup_return'] = 'اÙزودن \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'نمایش scrollbars'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'نمایش statusbar'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'نمایش toolbars'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'نمایش menubar'; -tinyMCELang['lang_insert_link_popup_location'] = 'نمایش locationbar'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'قابل تغییر اندازه باشد'; -tinyMCELang['lang_insert_link_popup_size'] = 'اندازه'; -tinyMCELang['lang_insert_link_popup_position'] = 'موقعیت (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'لطÙا یک نام برای مقصد انتخاب کنید در غیر این صورت گزینه دیگری را انتخاب نمایید.'; diff --git a/public/tiny_mce/plugins/advlink/langs/fr.js b/public/tiny_mce/plugins/advlink/langs/fr.js deleted file mode 100644 index b0ddca8..0000000 --- a/public/tiny_mce/plugins/advlink/langs/fr.js +++ /dev/null @@ -1,20 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_insert_link_target_same'] = 'Ouvre dans la fenętre / Cadre(frame)'; -tinyMCELang['lang_insert_link_target_parent'] = 'Ouvre dans fenętre parente / Cadres(frame)'; -tinyMCELang['lang_insert_link_target_top'] = 'Ouvre dans le Top frame (remplace toutes les cadres(frames))'; -tinyMCELang['lang_insert_link_target_blank'] = 'Ouvre dans la fenętre'; -tinyMCELang['lang_insert_link_target_named'] = 'Ouvre dans la fenętre'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'URL de la Popup'; -tinyMCELang['lang_insert_link_popup_name'] = 'Nom de la fenętre'; -tinyMCELang['lang_insert_link_popup_return'] = 'Insert \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Montrer la barre de défilement '; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Montrer la barre d\'état'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Montrer la barre d\'outils'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Montrer la barre du menu'; -tinyMCELang['lang_insert_link_popup_location'] = 'Montre la barre d\'adresse'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Fabriquer une fenętre redimensionnable'; -tinyMCELang['lang_insert_link_popup_size'] = 'Taille'; -tinyMCELang['lang_insert_link_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Veuillez insérer un nom pour la cible ou choisissez une autre option.'; diff --git a/public/tiny_mce/plugins/advlink/langs/fr_ca.js b/public/tiny_mce/plugins/advlink/langs/fr_ca.js deleted file mode 100644 index b40dfbc..0000000 --- a/public/tiny_mce/plugins/advlink/langs/fr_ca.js +++ /dev/null @@ -1,20 +0,0 @@ -// CA_FR lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Ouvrir dans la même fenêtre'; -tinyMCELang['lang_insert_link_target_parent'] = 'Ouvrir dans la fenêtre parent'; -tinyMCELang['lang_insert_link_target_top'] = 'Ouvrir dans le cadre supérieur'; -tinyMCELang['lang_insert_link_target_blank'] = 'Ouvrir dans une nouvelle fenêtre'; -tinyMCELang['lang_insert_link_target_named'] = 'Ouvrir à la destination'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'URL du popup'; -tinyMCELang['lang_insert_link_popup_name'] = 'Nom de la fenêtre'; -tinyMCELang['lang_insert_link_popup_return'] = 'Insérer le script \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Barres de défilement'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Barre de statut'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Barres d\'outils'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Barre de menu'; -tinyMCELang['lang_insert_link_popup_location'] = 'Barre d\'adresse'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Fenêtre redimensionnable'; -tinyMCELang['lang_insert_link_popup_size'] = 'Dimensions'; -tinyMCELang['lang_insert_link_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'S.v.p., entrer un nom de destination ou choisir une autre option.'; diff --git a/public/tiny_mce/plugins/advlink/langs/ko.js b/public/tiny_mce/plugins/advlink/langs/ko.js deleted file mode 100644 index 06a34eb..0000000 --- a/public/tiny_mce/plugins/advlink/langs/ko.js +++ /dev/null @@ -1,19 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_insert_link_target_same'] = '°°Àº â¿¡¼­ ¸µÅ©/ÇÁ·¹ÀÓ ¿­±â'; -tinyMCELang['lang_insert_link_target_parent'] = 'ºÎ¸ð â¿¡¼­ ¸µÅ©/ÇÁ·¹ÀÓ ¿­±â'; -tinyMCELang['lang_insert_link_target_top'] = 'TOP ÇÁ·¹ÀÓ¿¡¼­ ¿­±â (¸ðµç ÇÁ·¹ÀÓÀ» ´ëü)'; -tinyMCELang['lang_insert_link_target_blank'] = '»õ â¿¡¼­ ¿­±â'; -tinyMCELang['lang_insert_link_target_named'] = '»õ â¿¡¼­ ¿­±â'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Æ˾÷ URL'; -tinyMCELang['lang_insert_link_popup_name'] = 'â À̸§'; -tinyMCELang['lang_insert_link_popup_return'] = '\'return false\' ³Ö±â'; -tinyMCELang['lang_insert_link_popup_scrollbars'] = '½ºÅ©·Ñ¹Ù¸¦ º¸¿©ÁÜ'; -tinyMCELang['lang_insert_link_popup_statusbar'] = '»óÅÂâÀ» º¸¿©ÁÜ'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Åø¹Ù¸¦ º¸¿©ÁÜ'; -tinyMCELang['lang_insert_link_popup_menubar'] = '¸Þ´º¹Ù¸¦ º¸¿©ÁÜ'; -tinyMCELang['lang_insert_link_popup_location'] = 'À§Ä¡ Ç¥½ÃÁÙÀ» º¸¿©ÁÜ'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Å©±â Á¶Àý °¡´ÉÇÑ À©µµ¿ì »ý¼º'; -tinyMCELang['lang_insert_link_popup_size'] = 'Å©±â'; -tinyMCELang['lang_insert_link_popup_position'] = 'À§Ä¡ (X/Y)'; diff --git a/public/tiny_mce/plugins/advlink/langs/pl.js b/public/tiny_mce/plugins/advlink/langs/pl.js deleted file mode 100644 index d801bcb..0000000 --- a/public/tiny_mce/plugins/advlink/langs/pl.js +++ /dev/null @@ -1,23 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Otwórz w tym samym oknie'; -tinyMCELang['lang_insert_link_target_parent'] = 'Open in parent window / frame'; -tinyMCELang['lang_insert_link_target_top'] = 'Open in top frame (replaces all frames)'; -tinyMCELang['lang_insert_link_target_blank'] = 'Otwórz w nowym oknie'; -tinyMCELang['lang_insert_link_target_named'] = 'Open in the window'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_link_popup_name'] = 'Window name'; -tinyMCELang['lang_insert_link_popup_return'] = 'insert \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Show scrollbars'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Show statusbar'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Show toolbars'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Show menubar'; -tinyMCELang['lang_insert_link_popup_location'] = 'Show locationbar'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Make window resizable'; -tinyMCELang['lang_insert_link_popup_size'] = 'Size'; -tinyMCELang['lang_insert_link_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Please insert a name for the target or choose another option.'; -tinyMCELang['lang_insert_link_url'] = 'Adres URL'; -tinyMCELang['lang_insert_link_target'] = 'Cel'; - diff --git a/public/tiny_mce/plugins/advlink/langs/pt_br.js b/public/tiny_mce/plugins/advlink/langs/pt_br.js deleted file mode 100644 index 7cf01e0..0000000 --- a/public/tiny_mce/plugins/advlink/langs/pt_br.js +++ /dev/null @@ -1,20 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Abrir nesta mesma janela / frame'; -tinyMCELang['lang_insert_link_target_parent'] = 'Abrir na janela / frame prévia'; -tinyMCELang['lang_insert_link_target_top'] = 'Abrir no frame superior (substitui todos os frames)'; -tinyMCELang['lang_insert_link_target_blank'] = 'Abrir em nova janela'; -tinyMCELang['lang_insert_link_target_named'] = 'Abrir na janela'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL endereço'; -tinyMCELang['lang_insert_link_popup_name'] = 'Nome da janela'; -tinyMCELang['lang_insert_link_popup_return'] = 'inserir \'retorna falso\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Mostra barras de rolagem'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Mostra barra de status'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Mostra barras de ferramentas'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Mostra barra de menu'; -tinyMCELang['lang_insert_link_popup_location'] = 'Mostra barra de endereço'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Permite redimensionamento da janela'; -tinyMCELang['lang_insert_link_popup_size'] = 'Tamanho'; -tinyMCELang['lang_insert_link_popup_position'] = 'Posição (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Por Favor insira um nome para o alvo ou escolha outra opção.'; diff --git a/public/tiny_mce/plugins/advlink/langs/sv.js b/public/tiny_mce/plugins/advlink/langs/sv.js deleted file mode 100644 index d029a1c..0000000 --- a/public/tiny_mce/plugins/advlink/langs/sv.js +++ /dev/null @@ -1,20 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_insert_link_target_same'] = 'Öppna i samma fönster / ram'; -tinyMCELang['lang_insert_link_target_parent'] = 'Öppna i underliggande fönster / ram'; -tinyMCELang['lang_insert_link_target_top'] = 'Öppna i toppramen (ersätter alla ramar)'; -tinyMCELang['lang_insert_link_target_blank'] = 'Öppna i ett nytt fönster'; -tinyMCELang['lang_insert_link_target_named'] = 'Öppna i ett specifikt fönster'; -tinyMCELang['lang_insert_link_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_link_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_link_popup_name'] = 'Fönstrets namn'; -tinyMCELang['lang_insert_link_popup_return'] = 'Sätt in \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'Visa scrollbars'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'Visa statusbar'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'Visa toolbars'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'Visa menubar'; -tinyMCELang['lang_insert_link_popup_location'] = 'Visa locationbar'; -tinyMCELang['lang_insert_link_popup_resizable'] = 'Gör fönstret skalbart'; -tinyMCELang['lang_insert_link_popup_size'] = 'Storlek'; -tinyMCELang['lang_insert_link_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Var god skriv ett namn för fönstret eller välj ett annat val.'; diff --git a/public/tiny_mce/plugins/advlink/langs/zh_cn.js b/public/tiny_mce/plugins/advlink/langs/zh_cn.js deleted file mode 100644 index 4cb524b..0000000 --- a/public/tiny_mce/plugins/advlink/langs/zh_cn.js +++ /dev/null @@ -1,21 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_insert_link_target_same'] = 'ÔÚ±¾´°¿Ú/¿ò¼ÜÖдò¿ª'; -tinyMCELang['lang_insert_link_target_parent'] = 'ÔÚ¸¸´°¿Ú/¿ò¼ÜÖдò¿ª'; -tinyMCELang['lang_insert_link_target_top'] = 'ÔÚ¸ù¿ò¼ÜÖдò¿ª£¨Ìæ»»ËùÓпò¼Ü£©'; -tinyMCELang['lang_insert_link_target_blank'] = 'ÔÚд°¿ÚÖдò¿ª'; -tinyMCELang['lang_insert_link_target_named'] = 'ÔÚ´Ë´°¿ÚÖдò¿ª'; -tinyMCELang['lang_insert_link_popup'] = 'JavaScriptµ¯³ö´°¿Ú'; -tinyMCELang['lang_insert_link_popup_url'] = 'µ¯³ö´°¿ÚµØÖ·'; -tinyMCELang['lang_insert_link_popup_name'] = '´°¿ÚÃû³Æ'; -tinyMCELang['lang_insert_link_popup_return'] = '²åÈë \'return false\''; -tinyMCELang['lang_insert_link_popup_scrollbars'] = 'ÏÔʾ¹ö¶¯Ìõ'; -tinyMCELang['lang_insert_link_popup_statusbar'] = 'ÏÔʾ״̬À¸'; -tinyMCELang['lang_insert_link_popup_toolbar'] = 'ÏÔʾ¹¤¾ßÀ¸'; -tinyMCELang['lang_insert_link_popup_menubar'] = 'ÏÔʾ²Ëµ¥À¸'; -tinyMCELang['lang_insert_link_popup_location'] = 'ÏÔʾµØÖ·À¸'; -tinyMCELang['lang_insert_link_popup_resizable'] = '¿ÉÖض¨Òå´°¿Ú´óС'; -tinyMCELang['lang_insert_link_popup_size'] = '³ß´ç'; -tinyMCELang['lang_insert_link_popup_position'] = 'λÖÃ(X/Y)'; -tinyMCELang['lang_insert_link_popup_missingtarget'] = 'Çë²åÈëÄ¿±êÃû³Æ»òÕßÑ¡ÔñÁíÍâµÄÑ¡Ïî¡£'; diff --git a/public/tiny_mce/plugins/advlink/link.htm b/public/tiny_mce/plugins/advlink/link.htm deleted file mode 100644 index d04b1d9..0000000 --- a/public/tiny_mce/plugins/advlink/link.htm +++ /dev/null @@ -1,444 +0,0 @@ - - -{$lang_insert_link_title} - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_link_title}
{$lang_insert_link_url}: - - - - -
{$lang_theme_insert_link_titlefield}:
{$lang_insert_link_target}: - - - - - - - - - - - - - - - - - - - - - -
 ({$lang_insert_link_target_same})
 ({$lang_insert_link_target_parent})
 ({$lang_insert_link_target_top})
 ({$lang_insert_link_target_blank})
- - - - - - -
 
-
- - - - - - - - - - - - - - - - - -
{$lang_insert_link_popup_url}:  - - - - -
{$lang_insert_link_popup_name}: 
{$lang_insert_link_popup_size}:  - x - px -
{$lang_insert_link_popup_position}:  - / - (c /c = center) -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
 
   
 
-
-
- - diff --git a/public/tiny_mce/plugins/advlink/readme.txt b/public/tiny_mce/plugins/advlink/readme.txt deleted file mode 100644 index 6e9ac10..0000000 --- a/public/tiny_mce/plugins/advlink/readme.txt +++ /dev/null @@ -1,19 +0,0 @@ - Advlink plugin for TinyMCE ------------------------------ - -About: - This is a more advanced link dialog mostly based on code contributed by Michael Keck. - This one supports popup windows and targets. - -Installation instructions: - * Copy the advlink directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "advlink". - * Add this "a[name|href|target|title|onclick]" to extended_valid_elements option. - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "advlink", - extended_valid_elements : "a[name|href|target|title|onclick]" - }); diff --git a/public/tiny_mce/plugins/contextmenu/contextmenu.css b/public/tiny_mce/plugins/contextmenu/contextmenu.css deleted file mode 100644 index 58bb337..0000000 --- a/public/tiny_mce/plugins/contextmenu/contextmenu.css +++ /dev/null @@ -1,60 +0,0 @@ -.contextMenuIEPopup { - padding: 0px; - margin: 0px; - border: 0px; - overflow: hidden; -} - -.contextMenu { - position: absolute; - cursor: default; - z-index: 1000; - border: 1px solid #D4D0C8; - background-color: #FFFFFF; -} - -.contextMenuItem, .contextMenuItemOver { -} - -.contextMenuItemOver { - background-color: #B6BDD2; -} - -.contextMenuSeparator { - width: 100%; - background-color: #D4D0C8; - border: 0px; -} - -.contextMenuImage, .contextMenuItemDisabled { - border: 0px; -} - -.contextMenuIcon { - background-color: #F0F0EE; -} - -.contextMenuItemOver .contextMenuIcon { - background-color: #B6BDD2; -} - -.contextMenuIcon { - background-color: #F0F0EE; -} - -.contextMenuItemDisabled img { - filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); - -moz-opacity:0.3; - opacity: 0.3; -} - -.contextMenuText { - font-family: Tahoma, Verdana, Arial, Helvetica; - font-size: 11px; - margin-left: 5px; - margin-right: 10px; -} - -.contextMenuItemDisabled { - color: #AAAAAA; -} diff --git a/public/tiny_mce/plugins/contextmenu/editor_plugin.js b/public/tiny_mce/plugins/contextmenu/editor_plugin.js deleted file mode 100644 index 899ad2b..0000000 --- a/public/tiny_mce/plugins/contextmenu/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - if(!tinyMCE.settings['contextmenu_skip_plugin_css'])tinyMCE.loadCSS(tinyMCE.baseURL+"/plugins/contextmenu/contextmenu.css");var TinyMCE_contextmenu_contextMenu=null;function TinyMCE_contextmenu_initInstance(inst){if(tinyMCE.isMSIE5_0)return;tinyMCE.addEvent(inst.getDoc(),"click",TinyMCE_contextmenu_hideContextMenu);tinyMCE.addEvent(inst.getDoc(),"keypress",TinyMCE_contextmenu_hideContextMenu);tinyMCE.addEvent(inst.getDoc(),"keydown",TinyMCE_contextmenu_hideContextMenu);tinyMCE.addEvent(document,"click",TinyMCE_contextmenu_hideContextMenu);tinyMCE.addEvent(document,"keypress",TinyMCE_contextmenu_hideContextMenu);tinyMCE.addEvent(document,"keydown",TinyMCE_contextmenu_hideContextMenu);var contextMenu=new ContextMenu({commandhandler:"TinyMCE_contextmenu_commandHandler",spacer_image:tinyMCE.baseURL+"/plugins/contextmenu/images/spacer.gif"});TinyMCE_contextmenu_contextMenu=contextMenu;if(tinyMCE.isGecko){tinyMCE.addEvent(inst.getDoc(),"contextmenu",function(e){TinyMCE_contextmenu_showContextMenu(tinyMCE.isMSIE?inst.contentWindow.event:e,inst);});}else tinyMCE.addEvent(inst.getDoc(),"contextmenu",TinyMCE_contextmenu_onContextMenu);}function TinyMCE_contextmenu_onContextMenu(e){var elm=tinyMCE.isMSIE?e.srcElement:e.target;var targetInst,body;if((body=tinyMCE.getParentElement(elm,"body"))!=null){for(var n in tinyMCE.instances){var inst=tinyMCE.instances[n];if(body==inst.getBody()){targetInst=inst;break;}}return TinyMCE_contextmenu_showContextMenu(tinyMCE.isMSIE?targetInst.contentWindow.event:e,targetInst);}}function TinyMCE_contextmenu_showContextMenu(e,inst){function getAttrib(elm,name){return elm.getAttribute(name)?elm.getAttribute(name):"";}var x,y,elm,contextMenu;var pos=tinyMCE.getAbsPosition(inst.iframeElement);x=tinyMCE.isMSIE?e.screenX:pos.absLeft+(e.pageX-inst.getBody().scrollLeft);y=tinyMCE.isMSIE?e.screenY:pos.absTop+(e.pageY-inst.getBody().scrollTop);elm=tinyMCE.isMSIE?e.srcElement:e.target;contextMenu=TinyMCE_contextmenu_contextMenu;contextMenu.inst=inst;window.setTimeout(function(){var theme=tinyMCE.getParam("theme");contextMenu.clearAll();var sel=inst.getSelectedText().length!=0||elm.nodeName=="IMG";contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/cut.gif","$lang_cut_desc","Cut","",!sel);contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/copy.gif","$lang_copy_desc","Copy","",!sel);contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/paste.gif","$lang_paste_desc","Paste","",false);elm=tinyMCE.getParentElement(elm,"img,table,td");if(elm){switch(elm.nodeName){case "IMG":contextMenu.addSeparator();if(tinyMCE.getAttrib(elm,'name','').indexOf('mce_plugin_flash')==0)contextMenu.addItem(tinyMCE.baseURL+"/plugins/flash/images/flash.gif","$lang_flash_props","mceFlash");else contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/image.gif","$lang_image_props_desc","mceImage");break;case "TABLE":case "TD":if(typeof(TinyMCE_table_getControlHTML)!="undefined"){var colspan=(elm.nodeName=="TABLE")?"":getAttrib(elm,"colspan");var rowspan=(elm.nodeName=="TABLE")?"":getAttrib(elm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;contextMenu.addSeparator();contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/cut.gif","$lang_table_cut_row_desc","mceTableCutRow");contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/copy.gif","$lang_table_copy_row_desc","mceTableCopyRow");contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/paste.gif","$lang_table_paste_row_before_desc","mceTablePasteRowBefore","",inst.tableRowClipboard==null);contextMenu.addItem(tinyMCE.baseURL+"/themes/"+theme+"/images/paste.gif","$lang_table_paste_row_after_desc","mceTablePasteRowAfter","",inst.tableRowClipboard==null);contextMenu.addSeparator();contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table.gif","$lang_table_insert_desc","mceInsertTable","insert");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table.gif","$lang_table_props_desc","mceInsertTable");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_cell_props.gif","$lang_table_cell_desc","mceTableCellProps");contextMenu.addSeparator();contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_row_props.gif","$lang_table_row_desc","mceTableRowProps");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_insert_row_before.gif","$lang_table_insert_row_before_desc","mceTableInsertRowBefore");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_insert_row_after.gif","$lang_table_insert_row_after_desc","mceTableInsertRowAfter");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_delete_row.gif","$lang_table_delete_row_desc","mceTableDeleteRow");contextMenu.addSeparator();contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_insert_col_before.gif","$lang_table_insert_col_before_desc","mceTableInsertColBefore");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_insert_col_after.gif","$lang_table_insert_col_after_desc","mceTableInsertColAfter");contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_delete_col.gif","$lang_table_delete_col_desc","mceTableDeleteCol");contextMenu.addSeparator();contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_split_cells.gif","$lang_table_split_cells_desc","mceTableSplitCells","",(colspan=="1"&&rowspan=="1"));contextMenu.addItem(tinyMCE.baseURL+"/plugins/table/images/table_merge_cells.gif","$lang_table_merge_cells_desc","mceTableMergeCells","",false);}break;}}contextMenu.show(x,y);},10);tinyMCE.cancelEvent(e);return false;}function TinyMCE_contextmenu_hideContextMenu(){TinyMCE_contextmenu_contextMenu.hide();return true;}function TinyMCE_contextmenu_commandHandler(command,value){TinyMCE_contextmenu_contextMenu.hide();var ui=false;if(command=="mceInsertTable"||command=="mceTableCellProps"||command=="mceTableRowProps"||command=="mceTableMergeCells")ui=true;TinyMCE_contextmenu_contextMenu.inst.execCommand(command,ui,value);}function ContextMenu(settings){function defParam(key,def_val){settings[key]=typeof(settings[key])!="undefined"?settings[key]:def_val;}var self=this;this.isMSIE=(navigator.appName=="Microsoft Internet Explorer");this.contextMenuDiv=document.createElement("div");this.contextMenuDiv.className="contextMenu";this.contextMenuDiv.setAttribute("class","contextMenu");this.contextMenuDiv.style.display="none";this.contextMenuDiv.style.position='absolute';this.contextMenuDiv.style.zindex=1000;this.contextMenuDiv.style.left='0px';this.contextMenuDiv.style.top='0px';this.contextMenuDiv.unselectable="on";document.body.appendChild(this.contextMenuDiv);defParam("commandhandler","");defParam("spacer_image","images/spacer.gif");this.items=new Array();this.settings=settings;this.html="";if(tinyMCE.isMSIE&&!tinyMCE.isMSIE5_0){this.pop=window.createPopup();doc=this.pop.document;doc.open();doc.write('');doc.close();}};ContextMenu.prototype.clearAll=function(){this.html="";this.contextMenuDiv.innerHTML="";};ContextMenu.prototype.addSeparator=function(){this.html+='';};ContextMenu.prototype.addItem=function(icon,title,command,value,disabled){if(title.charAt(0)=='$')title=tinyMCE.getLang(title.substring(1));var onMouseDown='';var html='';if(tinyMCE.isMSIE&&!tinyMCE.isMSIE5_0)onMouseDown='contextMenu.execCommand(\''+command+'\', \''+value+'\');return false;';else onMouseDown=this.settings['commandhandler']+'(\''+command+'\', \''+value+'\');return false;';if(icon=="")icon=this.settings['spacer_image'];if(!disabled)html+='';else html+='';html+='';html+='
';html+=title;html+='
';html+='';this.html+=html;};ContextMenu.prototype.show=function(x,y){if(this.html=="")return;var html='';html+='';html+=this.html;html+='
';this.contextMenuDiv.innerHTML=html;if(tinyMCE.isMSIE&&!tinyMCE.isMSIE5_0){var width,height;this.contextMenuDiv.style.display="block";width=this.contextMenuDiv.offsetWidth;height=this.contextMenuDiv.offsetHeight;this.contextMenuDiv.style.display="none";this.pop.document.body.innerHTML='
'+html+"
";this.pop.document.tinyMCE=tinyMCE;this.pop.document.contextMenu=this;this.pop.show(x,y,width,height);}else{this.contextMenuDiv.style.left=x+'px';this.contextMenuDiv.style.top=y+'px';this.contextMenuDiv.style.display="block";}};ContextMenu.prototype.hide=function(){if(tinyMCE.isMSIE&&!tinyMCE.isMSIE5_0)this.pop.hide();else this.contextMenuDiv.style.display="none";};ContextMenu.prototype.execCommand=function(command,value){eval(this.settings['commandhandler']+"(command, value);");}; \ No newline at end of file diff --git a/public/tiny_mce/plugins/contextmenu/editor_plugin_src.js b/public/tiny_mce/plugins/contextmenu/editor_plugin_src.js deleted file mode 100644 index 2f07c64..0000000 --- a/public/tiny_mce/plugins/contextmenu/editor_plugin_src.js +++ /dev/null @@ -1,289 +0,0 @@ -/* Import plugin specific language pack */ -//tinyMCE.importPluginLanguagePack('contextmenu', 'en,zh_cn,cs,fa,fr_ca,fr,de'); -if (!tinyMCE.settings['contextmenu_skip_plugin_css']) - tinyMCE.loadCSS(tinyMCE.baseURL + "/plugins/contextmenu/contextmenu.css"); - -// Global contextmenu class instance -var TinyMCE_contextmenu_contextMenu = null; - -function TinyMCE_contextmenu_initInstance(inst) { - // Is not working on MSIE 5.0 - if (tinyMCE.isMSIE5_0) - return; - - // Add hide event handles - tinyMCE.addEvent(inst.getDoc(), "click", TinyMCE_contextmenu_hideContextMenu); - tinyMCE.addEvent(inst.getDoc(), "keypress", TinyMCE_contextmenu_hideContextMenu); - tinyMCE.addEvent(inst.getDoc(), "keydown", TinyMCE_contextmenu_hideContextMenu); - tinyMCE.addEvent(document, "click", TinyMCE_contextmenu_hideContextMenu); - tinyMCE.addEvent(document, "keypress", TinyMCE_contextmenu_hideContextMenu); - tinyMCE.addEvent(document, "keydown", TinyMCE_contextmenu_hideContextMenu); - - var contextMenu = new ContextMenu({ - commandhandler : "TinyMCE_contextmenu_commandHandler", - spacer_image : tinyMCE.baseURL + "/plugins/contextmenu/images/spacer.gif" - }); - - // Register global reference - TinyMCE_contextmenu_contextMenu = contextMenu; - - // Attach contextmenu event - if (tinyMCE.isGecko) { - tinyMCE.addEvent(inst.getDoc(), "contextmenu", function(e) {TinyMCE_contextmenu_showContextMenu(tinyMCE.isMSIE ? inst.contentWindow.event : e, inst);}); - } else - tinyMCE.addEvent(inst.getDoc(), "contextmenu", TinyMCE_contextmenu_onContextMenu); -} - -function TinyMCE_contextmenu_onContextMenu(e) { - var elm = tinyMCE.isMSIE ? e.srcElement : e.target; - var targetInst, body; - - // Find instance - if ((body = tinyMCE.getParentElement(elm, "body")) != null) { - for (var n in tinyMCE.instances) { - var inst = tinyMCE.instances[n]; - - if (body == inst.getBody()) { - targetInst = inst; - break; - } - } - - return TinyMCE_contextmenu_showContextMenu(tinyMCE.isMSIE ? targetInst.contentWindow.event : e, targetInst); - } -} - -function TinyMCE_contextmenu_showContextMenu(e, inst) { - function getAttrib(elm, name) { - return elm.getAttribute(name) ? elm.getAttribute(name) : ""; - } - - var x, y, elm, contextMenu; - var pos = tinyMCE.getAbsPosition(inst.iframeElement); - - x = tinyMCE.isMSIE ? e.screenX : pos.absLeft + (e.pageX - inst.getBody().scrollLeft); - y = tinyMCE.isMSIE ? e.screenY : pos.absTop + (e.pageY - inst.getBody().scrollTop); - elm = tinyMCE.isMSIE ? e.srcElement : e.target; - contextMenu = TinyMCE_contextmenu_contextMenu; - contextMenu.inst = inst; - - // Mozilla needs some time - window.setTimeout(function () { - var theme = tinyMCE.getParam("theme"); - - contextMenu.clearAll(); - var sel = inst.getSelectedText().length != 0 || elm.nodeName == "IMG"; - - // Default items - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/cut.gif", "$lang_cut_desc", "Cut", "", !sel); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/copy.gif", "$lang_copy_desc", "Copy", "", !sel); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/paste.gif", "$lang_paste_desc", "Paste", "", false); - - // Get element - elm = tinyMCE.getParentElement(elm, "img,table,td"); - if (elm) { - switch (elm.nodeName) { - case "IMG": - contextMenu.addSeparator(); - - // If flash - if (tinyMCE.getAttrib(elm, 'name', '').indexOf('mce_plugin_flash') == 0) - contextMenu.addItem(tinyMCE.baseURL + "/plugins/flash/images/flash.gif", "$lang_flash_props", "mceFlash"); - else - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/image.gif", "$lang_image_props_desc", "mceImage"); - break; - - case "TABLE": - case "TD": - // Is table plugin loaded - if (typeof(TinyMCE_table_getControlHTML) != "undefined") { - var colspan = (elm.nodeName == "TABLE") ? "" : getAttrib(elm, "colspan"); - var rowspan = (elm.nodeName == "TABLE") ? "" : getAttrib(elm, "rowspan"); - - colspan = colspan == "" ? "1" : colspan; - rowspan = rowspan == "" ? "1" : rowspan; - - contextMenu.addSeparator(); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/cut.gif", "$lang_table_cut_row_desc", "mceTableCutRow"); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/copy.gif", "$lang_table_copy_row_desc", "mceTableCopyRow"); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/paste.gif", "$lang_table_paste_row_before_desc", "mceTablePasteRowBefore", "", inst.tableRowClipboard == null); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/paste.gif", "$lang_table_paste_row_after_desc", "mceTablePasteRowAfter", "", inst.tableRowClipboard == null); - -/* contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/left.gif", "$lang_justifyleft_desc", "JustifyLeft", "", false); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/center.gif", "$lang_justifycenter_desc", "JustifyCenter", "", false); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/right.gif", "$lang_justifyright_desc", "JustifyRight", "", false); - contextMenu.addItem(tinyMCE.baseURL + "/themes/" + theme + "/images/full.gif", "$lang_justifyfull_desc", "JustifyFull", "", false);*/ - contextMenu.addSeparator(); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table.gif", "$lang_table_insert_desc", "mceInsertTable", "insert"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table.gif", "$lang_table_props_desc", "mceInsertTable"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_cell_props.gif", "$lang_table_cell_desc", "mceTableCellProps"); - contextMenu.addSeparator(); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_row_props.gif", "$lang_table_row_desc", "mceTableRowProps"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_insert_row_before.gif", "$lang_table_insert_row_before_desc", "mceTableInsertRowBefore"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_insert_row_after.gif", "$lang_table_insert_row_after_desc", "mceTableInsertRowAfter"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_delete_row.gif", "$lang_table_delete_row_desc", "mceTableDeleteRow"); - contextMenu.addSeparator(); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_insert_col_before.gif", "$lang_table_insert_col_before_desc", "mceTableInsertColBefore"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_insert_col_after.gif", "$lang_table_insert_col_after_desc", "mceTableInsertColAfter"); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_delete_col.gif", "$lang_table_delete_col_desc", "mceTableDeleteCol"); - contextMenu.addSeparator(); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_split_cells.gif", "$lang_table_split_cells_desc", "mceTableSplitCells", "", (colspan == "1" && rowspan == "1")); - contextMenu.addItem(tinyMCE.baseURL + "/plugins/table/images/table_merge_cells.gif", "$lang_table_merge_cells_desc", "mceTableMergeCells", "", false); - } - break; - } - } - - contextMenu.show(x, y); - }, 10); - - // Cancel default handeling - tinyMCE.cancelEvent(e); - return false; -} - -function TinyMCE_contextmenu_hideContextMenu() { - TinyMCE_contextmenu_contextMenu.hide(); - - return true; -} - -function TinyMCE_contextmenu_commandHandler(command, value) { - TinyMCE_contextmenu_contextMenu.hide(); - - // UI must be true on these - var ui = false; - if (command == "mceInsertTable" || command == "mceTableCellProps" || command == "mceTableRowProps" || command == "mceTableMergeCells") - ui = true; - - TinyMCE_contextmenu_contextMenu.inst.execCommand(command, ui, value); -} - -// Context menu class - -function ContextMenu(settings) { - // Default value function - function defParam(key, def_val) { - settings[key] = typeof(settings[key]) != "undefined" ? settings[key] : def_val; - } - - var self = this; - - this.isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - - // Setup contextmenu div - this.contextMenuDiv = document.createElement("div"); - this.contextMenuDiv.className = "contextMenu"; - this.contextMenuDiv.setAttribute("class", "contextMenu"); - this.contextMenuDiv.style.display = "none"; - this.contextMenuDiv.style.position = 'absolute'; - this.contextMenuDiv.style.zindex = 1000; - this.contextMenuDiv.style.left = '0px'; - this.contextMenuDiv.style.top = '0px'; - this.contextMenuDiv.unselectable = "on"; - - document.body.appendChild(this.contextMenuDiv); - - // Setup default values - defParam("commandhandler", ""); - defParam("spacer_image", "images/spacer.gif"); - - this.items = new Array(); - this.settings = settings; - this.html = ""; - - // IE Popup - if (tinyMCE.isMSIE && !tinyMCE.isMSIE5_0) { - this.pop = window.createPopup(); - doc = this.pop.document; - doc.open(); - doc.write(''); - doc.close(); - } -}; - -ContextMenu.prototype.clearAll = function() { - this.html = ""; - this.contextMenuDiv.innerHTML = ""; -}; - -ContextMenu.prototype.addSeparator = function() { - this.html += ''; -}; - -ContextMenu.prototype.addItem = function(icon, title, command, value, disabled) { - if (title.charAt(0) == '$') - title = tinyMCE.getLang(title.substring(1)); - - var onMouseDown = ''; - var html = ''; - - if (tinyMCE.isMSIE && !tinyMCE.isMSIE5_0) - onMouseDown = 'contextMenu.execCommand(\'' + command + '\', \'' + value + '\');return false;'; - else - onMouseDown = this.settings['commandhandler'] + '(\'' + command + '\', \'' + value + '\');return false;'; - - if (icon == "") - icon = this.settings['spacer_image']; - - if (!disabled) - html += ''; - else - html += ''; - - html += ''; - html += '
'; - - // Add text - html += title; - - html += '
'; - html += ''; - - // Add to main - this.html += html; -}; - -ContextMenu.prototype.show = function(x, y) { - if (this.html == "") - return; - - var html = ''; - - html += ''; - html += this.html; - html += '
'; - - this.contextMenuDiv.innerHTML = html; - - if (tinyMCE.isMSIE && !tinyMCE.isMSIE5_0) { - var width, height; - - // Get dimensions - this.contextMenuDiv.style.display = "block"; - width = this.contextMenuDiv.offsetWidth; - height = this.contextMenuDiv.offsetHeight; - this.contextMenuDiv.style.display = "none"; - - // Setup popup and show - this.pop.document.body.innerHTML = '
' + html + "
"; - this.pop.document.tinyMCE = tinyMCE; - this.pop.document.contextMenu = this; - this.pop.show(x, y, width, height); - } else { - this.contextMenuDiv.style.left = x + 'px'; - this.contextMenuDiv.style.top = y + 'px'; - this.contextMenuDiv.style.display = "block"; - } -}; - -ContextMenu.prototype.hide = function() { - if (tinyMCE.isMSIE && !tinyMCE.isMSIE5_0) - this.pop.hide(); - else - this.contextMenuDiv.style.display = "none"; -}; - -ContextMenu.prototype.execCommand = function(command, value) { - eval(this.settings['commandhandler'] + "(command, value);"); -}; diff --git a/public/tiny_mce/plugins/contextmenu/images/spacer.gif b/public/tiny_mce/plugins/contextmenu/images/spacer.gif deleted file mode 100644 index fc2560981ee1caca400e225e48d282106f907f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 ucmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Df>utpmhBaYhCPCMFj~25SJyItL8^ diff --git a/public/tiny_mce/plugins/directionality/editor_plugin.js b/public/tiny_mce/plugins/directionality/editor_plugin.js deleted file mode 100644 index fb26cdb..0000000 --- a/public/tiny_mce/plugins/directionality/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('directionality','en,sv');function TinyMCE_directionality_getControlHTML(control_name){var safariPatch='" onclick="';if(tinyMCE.isSafari)safariPatch="";switch(control_name){case "ltr":return '';case "rtl":return '';}return "";}function TinyMCE_directionality_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceDirectionLTR":var inst=tinyMCE.getInstanceById(editor_id);var elm=tinyMCE.getParentElement(inst.getFocusElement(),"p,div,td,h1,h2,h3,h4,h5,h6,pre,address");if(elm)elm.setAttribute("dir","ltr");tinyMCE.triggerNodeChange(false);return true;case "mceDirectionRTL":var inst=tinyMCE.getInstanceById(editor_id);var elm=tinyMCE.getParentElement(inst.getFocusElement(),"p,div,td,h1,h2,h3,h4,h5,h6,pre,address");if(elm)elm.setAttribute("dir","rtl");tinyMCE.triggerNodeChange(false);return true;}return false;}function TinyMCE_directionality_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){function getAttrib(elm,name){return elm.getAttribute(name)?elm.getAttribute(name):"";}tinyMCE.switchClassSticky(editor_id+'_ltr','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_rtl','mceButtonNormal');if(node==null)return;var elm=tinyMCE.getParentElement(node,"p,div,td,h1,h2,h3,h4,h5,h6,pre,address");if(!elm)return;var dir=getAttrib(elm,"dir");if(dir=="ltr"||dir=="")tinyMCE.switchClassSticky(editor_id+'_ltr','mceButtonSelected');else tinyMCE.switchClassSticky(editor_id+'_rtl','mceButtonSelected');return true;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/directionality/editor_plugin_src.js b/public/tiny_mce/plugins/directionality/editor_plugin_src.js deleted file mode 100644 index de183fe..0000000 --- a/public/tiny_mce/plugins/directionality/editor_plugin_src.js +++ /dev/null @@ -1,71 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('directionality', 'en,sv'); - -function TinyMCE_directionality_getControlHTML(control_name) { - var safariPatch = '" onclick="'; - - if (tinyMCE.isSafari) - safariPatch = ""; - - switch (control_name) { - case "ltr": - return ''; - - case "rtl": - return ''; - } - - return ""; -} - -function TinyMCE_directionality_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceDirectionLTR": - var inst = tinyMCE.getInstanceById(editor_id); - var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); - - if (elm) - elm.setAttribute("dir", "ltr"); - - tinyMCE.triggerNodeChange(false); - return true; - - case "mceDirectionRTL": - var inst = tinyMCE.getInstanceById(editor_id); - var elm = tinyMCE.getParentElement(inst.getFocusElement(), "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); - - if (elm) - elm.setAttribute("dir", "rtl"); - - tinyMCE.triggerNodeChange(false); - return true; - } - - // Pass to next handler in chain - return false; -} - -function TinyMCE_directionality_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { - function getAttrib(elm, name) { - return elm.getAttribute(name) ? elm.getAttribute(name) : ""; - } - - tinyMCE.switchClassSticky(editor_id + '_ltr', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_rtl', 'mceButtonNormal'); - - if (node == null) - return; - - var elm = tinyMCE.getParentElement(node, "p,div,td,h1,h2,h3,h4,h5,h6,pre,address"); - if (!elm) - return; - - var dir = getAttrib(elm, "dir"); - if (dir == "ltr" || dir == "") - tinyMCE.switchClassSticky(editor_id + '_ltr', 'mceButtonSelected'); - else - tinyMCE.switchClassSticky(editor_id + '_rtl', 'mceButtonSelected'); - - return true; -} diff --git a/public/tiny_mce/plugins/directionality/images/ltr.gif b/public/tiny_mce/plugins/directionality/images/ltr.gif deleted file mode 100644 index 1f8e046b781c2307b36c949c8de750bee37213ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 314 zcmZ?wbhEHb6k!lyxXJ(m|NsAYuy6?Q2-vY>cSA#yfyaa^S8o^uEGU@pAfVzxLdSze z8?S6Rcz@f$TRRS3J9_%2L&1fBh6e{vTwAqzt%An{hl~vg9T%2uJbL2HWru+Z^fk6idfdJ$u2DWgAX$2lSQvD~E6rId5lRcNT$WUd1i{`!(zmBZDLT#}Jhp2>Whi8vlzlWsz{@L=zW$H&hA*9;O4D0oaTh*%I%aiC$vha=}72Q*wrnDF4hxu^S1-c-;~Ft9MNu(!x6 z$c#&lS+jQe_U)Uxx;jcqiZ7f$y?f`jcW++4ef{FhsS}|gA+9bi4h{|q3JL-O0ze0V z9YPMF_>+Z^fk6idfdJ$u2DWgAX$2lSQvD~E6rIemn#^+P;t|WGEVIsj2-1{wWOh8Z z`4fjQFQ<`8*v2rYuGAujJ}V82Ii~I|la%DEoVfUT*u0ya__zf+^Icdwyt';}return "";}function TinyMCE_emotions_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceEmotion":var template=new Array();template['file']='../../plugins/emotions/emotions.htm';template['width']=150;template['height']=180;tinyMCE.openWindow(template,{editor_id:editor_id});return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/emotions/editor_plugin_src.js b/public/tiny_mce/plugins/emotions/editor_plugin_src.js deleted file mode 100644 index 69f5129..0000000 --- a/public/tiny_mce/plugins/emotions/editor_plugin_src.js +++ /dev/null @@ -1,36 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('emotions', 'en,sv,zh_cn,cs,fa,fr_ca,fr,de,pl,pt_br'); - -/** - * Returns the HTML contents of the emotions control. - */ -function TinyMCE_emotions_getControlHTML(control_name) { - switch (control_name) { - case "emotions": - return ''; - } - - return ""; -} - -/** - * Executes the mceEmotion command. - */ -function TinyMCE_emotions_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceEmotion": - var template = new Array(); - - template['file'] = '../../plugins/emotions/emotions.htm'; // Relative to theme - template['width'] = 150; - template['height'] = 180; - - tinyMCE.openWindow(template, {editor_id : editor_id}); - - return true; - } - - // Pass to next handler in chain - return false; -} diff --git a/public/tiny_mce/plugins/emotions/emotions.htm b/public/tiny_mce/plugins/emotions/emotions.htm deleted file mode 100644 index 5466dba..0000000 --- a/public/tiny_mce/plugins/emotions/emotions.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -{$lang_insert_emotions_title} - - - - -
-
{$lang_insert_emotions_title}:

- - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - diff --git a/public/tiny_mce/plugins/emotions/images/emotions.gif b/public/tiny_mce/plugins/emotions/images/emotions.gif deleted file mode 100644 index d34f0e0bf3f630c74260f4e122daed5836f1b4d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmZ?wbhEHb6k!ly_}<6x>({TpfB*itE%^7V`M+Og->&n$d-v|oM+;SMhEJb9ef|3N z*L{)S55@oec1aHu{P)-N?-!>>xA*^jBK7?F^Lv+#KYn<9V5R8)Z}t~1T-Y{?>+dVo zBP+$HRdes#K5O%I`Dhouzn?9x?-Bg-$<^I}*u8Ze?w1gk^lI{>)YpmJZm={mbwZ z+p|7@{`~FRx6dD!tjj`BL8>h=2L0ckhDkx4U8o zR{QRlBYo%Umc8@k-ab@)bC&nOYXAMK{r~>W-!WTY+bo`cZ#Dn_GvB-1ecuZA&mW^| zlR1CCRoc7U<=12RkME71p8*Dr?%iwK&+k|Men;rQ8sB{@JziZ9{&qv~+&-m~2j~C$ zYyRab?~flp{{R2aFbb$00*XIb7#SG)7<51egYpCe$A1P{P8p943l26hGMHptS|ZrM zz|P6kk#Oj6r?8xl3xmMLiA}0HlQa|^ojirayhUWz97uNVmDCDY5Ma3Y7@M3Zmzh?{ zFEN2&XY{3>m_X)54;g@*!88)pl-*G%st!s#Ra%6mT+uLaO@C~5o_>B_IMxWDwZOW z*udIY$WkpKGBI&s_bmqDPd_#+badj;3`+92kZ_oN9%s~cJC}tMHIB3D1}?g>b3(E} zuX+}{(ZPhJtgJEy2@e)rIK;)K#;$q6ncZrK!BG*t7Z)7)wOm;kMBUa1xCm%VII_CS LrbYxfFjxZs)j^Bq diff --git a/public/tiny_mce/plugins/emotions/images/readme.txt b/public/tiny_mce/plugins/emotions/images/readme.txt deleted file mode 100644 index a3cea1b..0000000 --- a/public/tiny_mce/plugins/emotions/images/readme.txt +++ /dev/null @@ -1,2 +0,0 @@ -These emotions where taken from Mozilla Thunderbird. -I hope they don't get angry if I use them here after all this is a open source project aswell. diff --git a/public/tiny_mce/plugins/emotions/images/smiley-cool.gif b/public/tiny_mce/plugins/emotions/images/smiley-cool.gif deleted file mode 100644 index 1e2c1d62bb7161241af27cbc4e19784193f1a3e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1135 zcmZ?wbhEHb6k-r!_x9>KeJ?_ND-@a=QJ z&wC=@zJ2@qMC#z0z&*>o-n@D9_m!%&wDio{{{Np)8pWZkB)fCI-r3C}AK!RA zfByW}dyk73&+OYi>)j~`wiK79D^_t;0b_g}bh;r}=L&C}&iY|mQV&3Ny!@xOni z2bLNAerI)fx!TWHHvj*IiVCss+@_(cD{f*Stf(lYt*Ne{pz!Y9ySGoBOG``lEa852 zOZM#9vnLNN;N@nychy!&LFU{(r57(=NK5jbJUIW>egPLJ!TU!9_N{Ptb&-2;g!j== z-dC?)i3zi4YisN4@gxRu?Oo}^&%;`q%(-;QqP@#qn3R}CMM?db-_LJ7(z3HNNQ@QVyWD;2Ov$^q^k2RRc`DKu`PB$*A-siH0<;^ZS+SD@6nS#KgpeXLj&DdzyIin3|?C$DZZBa&mG% ze*F0V|3AY}28usf7#SE2FzA3h0m>5$9RC>_IYlfO4(PM-)GoNoVotE@8t(X+IkmFY}+Kw`0xi2j@o2Zp} zv&q9#)H#o@P%-t@#i^D}S|J4~o}shC8Yb{qEn0YHW;l1mObds`LyW>bVhbj@xF6Qn z5;rK=;Naa*%$TfGaG+q}$@Prd8)|+CE_CeT6b>@+>G<&Y@Cs3$`mHwvT^)N(Wvvoc zEnIM|Pt2XQYJuV-S3XhIDGQwV^gA4y+4)!-8o2qtBs4JE+B{%lQqN>zU}0$yaOP1I NU~qI}W@TZp1^{6gs0082 diff --git a/public/tiny_mce/plugins/emotions/images/smiley-cry.gif b/public/tiny_mce/plugins/emotions/images/smiley-cry.gif deleted file mode 100644 index e0dcf8a8fcdf4da63a860bc46f02f8b92ea4213a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1127 zcmZ?wbhEHb6k-r!_&$r_@87?A-5-Aa`ZedshfkkA{rzhG?%lhuU%$S2^JeFKy?@W7 z|9rH#d-v|Y-%&S?8lKuB|M#=S|NjYZ-@d(j$yAk#Vc+&y(ThKPer2+Eh1ijm;*AC3 zM{j=EHjC@g?fr+BtL68(0a z@8FuiU|a5=UrcS3n0`MLKYjZ2-&d+n-~L?P&A4Z|*X83n|G(LP{t)%&xzfisUVnb& zynh+KX$t4FJBIIH8qL}B^6=rq-#!PN*q-(OU*X)XSH6Bu`uO4X|G%L>U)da3W;EmQ z|9}5V|NVBk`QqQcl^)w>@!Y+({pDS!Z*LuT&XJtmsZbcsap&rmfA6#otoEP2q~_mW z)32}0w(Uyz{LEsOwd4hrCKZ7Z!2#3P~RRIM(P6mSw3mq6`!xqdiWIo!($0WmL zqtMdcEbBe(O~C=@6O8R{LMa+aN?bxJMLr@YCmc9&z`IJFCSk3Lrjv%LdQlq@hlOIfX7b#OuT9dJ6#e^@v13CWh6X2 z%+AfL>twJqv9qC3Jy#|3WV8Fkg;pXOGEOPSCyFx*9r$wd0h_Oco>s_@pOaHBw7E}K zk*E+(Xpr<-5xiVZz@e9sDgBYd376g5ayh2V5!hjJ>=1*Devm`a!$n?Q;udTX8YP?z zoeZjdM;KIIc+YZ8Ns`eNY+!MgbeVL)O^k!|=c{kg-E$?i%moM0A zV6qLPy9zZy5}bIgE#~{=0d(iosjS?KNwXxJ202h(<$0c6ANN1(_wo1fclVP>#llxl zB?HMo_!bb0#SjER9~K0IL8Pnjna_tb9~LBvf91OjNd8uid0-s8s{S^j^XZftCLyas zKEQ{K2Ua|ufZvay^?!`>Q1ra5hlXtCgq$gpmNaBN_wKc{;Kpf(Dcja78~cVj*zr>Q zN!5ty$i5xm`fBCe+#Ir$dT(?u8p%PH>2U*uju&IW{H@va&DH9usj0YMh=fm?o5A6p zYQ)X@{wlFgOM3jk8ePkCI;R~*T4bKGu&{tk^W)L8E|=>lF9G$jV3SmHhJvhp2%Af0 zt(mP&%)vHB)R4EiD)^+95*_4^w34?v4+cWfPW_Xd- z@g?(z%Z%V`N$g3+mH|>U&|q_Ea7}=iBm*}R*B|FBJA_RQbo3c}*)E8g@`to3S_RYE zC7v10z^dg&uXdYw?{)h2<|OGuT-HkQmeW2XSidy zcW)#T!7vQ?pZ^v}kK#c9xCL;Y>*r4Z1PqW8$-4o#dwZf7ByjKOA)vT+gnQb3NtFdK zNQ@;Wk;Gt?FF`G1HbAkvZdxw8n4FS*<1&1`V4DM$wZGNI)O3HHDy`<6%yr`K?<)uK ztQNbpB=hAW<#f`xQAN(Wh*M448!t2yJ|69@N|IFIsbt~Ao>xw(cj9q)o!LO<4a(BS7v5zT;M_#bb_yp?*$99$*SQHK?x&VBSHLvt z&Ah=ShaAlP;8!yD(aKCB4ll;bbj%6DV*X|okH@~Mp~(s@(R0f`DMaa=_s^Bry(v#_ z`A80R8Wecq>kZ6e@Vm@1;ui+3I-&s%-z4qo0i?Q1MH&N+?-q92FDMh}%9=)!#I0@= kZF{3$p1|YWfp!QO+;J%l)PZCX7lwD1)v28j2m-JD3q51Hn*aa+ diff --git a/public/tiny_mce/plugins/emotions/images/smiley-foot-in-mouth.gif b/public/tiny_mce/plugins/emotions/images/smiley-foot-in-mouth.gif deleted file mode 100644 index b3e47cc3f80f4d62bc37dafb892df4671e0dd2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmZ?wbhEHb6k-r!_`Z_i*RNlHzncI1W%l>)UsY~~AGZa+e*OCC)2Dau-rYEA_~)a= ziS1bzE?oHkKjGsWuMj)#j~`xdo5l6!&6~Gx-yU2OcyN`}`2#w4FPTQW@$Ff_bMfMt zKR-kM{WX35{Q2k4pWO{OK7WY%_U+r|>GJ>nmHvKbrOL(d_lwiv!-ub(&^x?b?Z8UW zy(`2vP2tQ47X0_yW#@doQ(NR8-QNH7rqS+I(Rc6O-M4+#ty{PL{L0z0-0Q$HqtmBP zukL2NbWru*@2Ddy#sB{^|9(g4z-s^BZJhWhTBkzs zfBqOXvt51fe7QfLbPL1TZyuJ}HjC%nA^i{U680{4|8_?t#glDzr^fmH%J**s%&6s_ zTqFGGuE&nq0{1TJpFBAK#~q>K2=>wx;aLrQe?MCsSmV2ErN-7J>fde%-o3W{{0`|< zFSajNd3P`1OY#xizuN!bJFOq@%>7K+4{UYbyWC~x9LaCj`F{NP@&EsSh7k`Gf3h$# zFsx+I0fhu8PcU%&X9(sLv0z|WC7>9 z+*~3yQxhM#vG_6vr0%?+?9d=4v8U0ZXe z1BsWW+Ga8ozDm*Hl5*!zi)j4p+$*54T*=#R>dI3yI62;Z_$j=y;W?A!wiFBDb}ngq z4!$W>A(>|Ho=4k!S(@0VPhRe`fLH6o0;vm(ocvac_chGC z)EXq{=3OE3>VUx1Hkq^qH*7gwUHoVJ_X<6|P!O_!oy}OQqVU3k#%4#+G=mQhE->^; jSuELbh)eT905h+8CQAd0*^7choK`m!9Nm~%Ss1JV`4_4B diff --git a/public/tiny_mce/plugins/emotions/images/smiley-frown.gif b/public/tiny_mce/plugins/emotions/images/smiley-frown.gif deleted file mode 100644 index 9335e9945eac8c26129830121ab7e53077c4eeb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 zcmeH``A<@D0KmWKtAJ2=#HE=>Mjok=9Uf^}q7a**o2_QIZdTS-w$;|LR+e_*rkksc zERbAgHnVanEAbH>UMs9DhhS1I7Xb#y6Cb?yT7N{p_4xxnKYX^2WJ`W}#(p+ngINW@ zFbwym;W$oU>+tX4PN&oB^#)w&ZnxWS<@?5A)XdY~2|c(C-j)e@ewWzo_Nl2UUAL0( zi#;CChS(sI+(+PR$6l?nykATBOR{2ukXG)<$ncyktKl>w;LgK6=}#JHF1yTPvFINb z`JI_<*D3GyLj8kq+$Ka()Mzw5Z;@eNIKB6I*tGQPc%PwV`Sj22Z*?gzTlr;@c{|0S z`0VZzWgO&Q>d?>-iEcC)3|dtRL7WI+M@XXb*@K zlgZTIU2&iY9(oiq@nLmfuGsbaSC^7roXzmMiyRJzL_|eBg@c_@$io85r|#KFzTdGF zX)Acw7mJR;y89BOO+IU8dt4>C9+|AFCjVG{TWEH4OK)$-8fdVn3q-s2s|f=vt+2o0!1UCPr2cyihx=Lf3R^Z;QBB z6&Y|R_uOU@0TF89X&b|ytHOI*Bt4Cb(a)hipN}L-@SlHEAZ8At0H6R#fAxQ#08|o$ z(Kzt{(QsGrC@fJ&Qw~@q<78B7q*nzXg1)9h4Aq2fJU5I)mtLh@EiU9P>c{?OoL!c6{FO5)++#+Xi_Li47M zd+N~YE3yl@rBH2=@nwEBeVsDCFh?R+2T_5GX06iCUm&eZA48D5E19QQNlJs2R?l3> zrph}egX`lWup~Ciy6{>;B2}ttFQwDPupq^zzNp|vo~&VHY%&;R{3S~i^k!tUlpYtG sv_oKBR?XsZBEq9%nyMB2mHoylXjx-33|R4xbD7z8H3Wr)a9CjdA8k*7IRF3v diff --git a/public/tiny_mce/plugins/emotions/images/smiley-innocent.gif b/public/tiny_mce/plugins/emotions/images/smiley-innocent.gif deleted file mode 100644 index cdb72568da7b2a56cbb2f13d2c5cd3464aedc5e2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1139 zcmdVZ{Zo<$0KoAFR9-|h2!RJWIW_TRn)o*J+6!GcUrNK9ot>UL@@iXccWK(SwXGRv zT5aA;o$h=|G)t6L!f9cmLVzzr8>mf3;!9YRA}Zu#^763yGxqrlzQ24^(mvatbb<&F zfo&yVUm&^OS*BSm7RM6BYPH(!cG&(QG~;VFn{6ApdcA&U7WY6oO`Ly@DON11$mT#;4X5&eI3D z`?Yv!9QfV=LY@l9P#HO%C8_&gau{;=8CFq!br zP-|byKG@0H(Bb8xjHXLyap4|uCDpN$Z8tLhst29csO?3HLAF=@dxjG_>ad^r_YQUG zF>~y(;KCWocc;m{*Q20Wg02;WT?tPHgWPbUeo`{nnYthXm11ytBvet)lQz*I16fjo zosw}3s&?2CF{Wtgugp4mj4)iE_vK-ftTyi3eB!<0;J%wtqI01x*V%!Nl&`bU*Dlg$ z#^W{p(b8r=*p)b3br@a?hvrBVBF5iC!52=G#dUbK5Vth+$=i3H5!`M!@IMr|J<}|yx5VG@8l%e1bnog zf5255AD0#pNy!W^QZJQxfIigG!a}~XC88aJ{~_*527yyYJ{W5p!|vv#-Bbk<*;CaY z_s*HSYF=icGQoylX+2Cf>)=m!-~18sRkbI!+Wf{^T|sW_(52~k73ox%&L3ba;XnSF_Oh(H&2_{rHl1-3`|6V#J>RW54a}BG-fnH zt&uq>lDx)Hl+4?V~W$9s-JVZuDGav8rN zk>$skRMah&$LAjO+Xbr8Q@0TJK@uO|0~B1r5u!P}6u2O1HxfgRk3WLlJ-u-m72YmT cpc9U8`Ftc;B}cNl9@}T zhnK7EoUixj_WrkT-~Rn==g*%XSSh+~ z7T33L-+n(7Kd{Wm&w^{qGL=(XIo$Q|FUVnb&{QDhs`t<3$ckh1voV0GP%AcPhzwV11TqSko zxb=k#7ykbZT{cx|_p0byw{BfJsQUAj&EM~_o2GF7|7L&plIg#Hr61pT{d*?;@3+h9 zZpP1_KmYyW^!{b|=IQcBR*LV-lKggCX!~5gKc94W%#prxb<6%XzFp!H_b%%1UG9Eh zweQY3l7Tkd`#bnHYKi`ODSu$K|DSLEJ7x=fxypO;;QZ2Lk?(gU&+Sv%Hj8KPa+huq zp}&9gPaayZXTH?GcUl_~#P_ZAcyDTYSylD+Oxf=b#2?O;|NJp(x48KE{mOqnYWSIR zJzFMlV2$s;zvlNY=>Gd-@coX^@3%_-|CxWgD>h%7_gt08j=B6BR7LmBmvh!;|NSc~ zEl42Ro%h=f!Ou4(f7}r|l`H)FXUP85{!bSQ+`YE_t+DaHx0+|<Y`2YVu!zjQT0*XIb7#SGmGw6U+f${_c$A1QUP7w`;26a9e8%6YhS&%)C2i7R8fj)cQT!<2RbMeDX34TlFXk$P^VEI4i3)K_Eb@MPo^)(s<6op7VJ3O%;{$&grg^6_ z4lG>6EaOw8bGGx6BP$It;WXaQ4evX(%{0GI6rX+J89E;>>!5!I6i1&4xovh7JLTJ*5}}7zIqWTwvmL N2$^uvfsv8H8UWc8p%VZA diff --git a/public/tiny_mce/plugins/emotions/images/smiley-laughing.gif b/public/tiny_mce/plugins/emotions/images/smiley-laughing.gif deleted file mode 100644 index 09a9ec7e4f5dab31b43717366d6236fc760f8610..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1122 zcmZ?wbhEHb6k-r!_&%TE*RNlH|Ni~=%k1x0^KaMrK7IQ1_3PI^A1&U!d-v~m)Pa?v zpFe;8_U+q|mEt#!8Xj0?bnmk9=MPcmPaZjZ`0(4eZ|`0*J+VFO=#j&xw#Z*SX0UA* z*M$og{{43O_t!KdRPgla(?4I?lqQQ@yLkHR=cNDt6GCix(gOwGym@o??%kepuV@#( z=g*)2|5w;io_6u#nOnDR{r?;K@x$xgtD-L*RQ><||F_QpH!hz)w@+`+a<5HOIRE?% z`TITg*L#nTZ@l(xpLKAR)Su6GhnK6Z?q=LPUH<*c@ISwDcFxy(bbJ5bFHU<`i2Z(N zQl1FQY#P3rjZ&V28Dx#wpDKfX8Gzd@lnlV`_V{%P$M3nsTbzajtf zvi!MyO8ZuNe7h@_?!#6T=k?-=;f}>R_ikM~vyOZJ8o58;{I6X+d+(zD+lQ)OuJWGW zuUr}*alGF&DJitWrwJ~IRgCme2KY&YyNk=WSG&LLn^){~K-a?HWM*I+}& zq=#)nsyPPG*ujs`bs z3R-Xo2pl?mYg@LZ%Z(6*gQ5;~RwW9Pm!DeXl>9}eXt9O>6IY1L(Tz*ogd30dD_)dL zdCtSi61Zf_$wNzzP8QKzuqA=Ty-(4QgRA7=;g|dpoKtgd2&gn(m~AlQmdJ-G9*upb z(eGjwI6gik<2AEHW5*NC16-cQ2`-N&yR~qb#K|3;aWS3M*C>mx-HbPm8vgt3^5bfByXNmj2yKrhmVhA6Y5> z;F`g*DazYsac!P1-&HAfVtdxd53m3KEBy1(;{D6;nccD%FP>@Hmi6ns$KAVk1Fg9K z{L0z4eb&J>fwykm`uWP{-|wiu-(ydoK7C-B(evle0~;(a9aP;kh4b$hr^AO2U$}5V zM1gPpqp4lxQs2IP`}eQ(z)I1#Z{MEUBLC?2{x@&l99ZqYf3^RCHNIWt!soZj|9EGy zcezVuh}p@5^LNaVzI$!EnXAm7Z~h;z3jca3zi)%Z$wLd;ve^216&BA7Slq_(@{(xH z%H&V4T>kwv|NS$>yUetDMe^SHa^LQVeEt}9XpOF=zuvbSg8No_6hxUiX)y1Y%U@q7 zdvKN1_PKm_u5S7N&s^75eAxm`$1t^O%R5?XB6c|+G z?G#uU3^pu0z~CHJk#OLEbGIU+3|9!lBR6It`??7k1?TTs{69kx#c8hByd0a41 zJmTQt-qO)=K(X;Wi;Pl-KoZL&6^1;kH3u#}Zs-zJp0(=0#zlvP876#7XxPYjkex$v zSKV0#W@kYU?mr;~4h;^REaJEJ?R~JIX)-I@uNNZL7sagN4}7@U_?&Tq)&zzN9x2Qd=6I-QU9k{6$tNP+kzvr1lEgO0XktZx>4F2w zmlkOo`$&jpII>SOoyc`UU!ap$QC3Vw%j2NZr2qeQmK02KV-$GU#AEqHp_$ty#U#Li G!5RR#xPA-( diff --git a/public/tiny_mce/plugins/emotions/images/smiley-sealed.gif b/public/tiny_mce/plugins/emotions/images/smiley-sealed.gif deleted file mode 100644 index 76002b2f0142d086e7fa3a6a367554f63d4d946c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1110 zcmZ?wbhEHb6k-r!_&$~4@87@wewqFKYX0ljuXE?mzkB!Y>({TJK7D%g_T7h%pWeQG zw|Tn!=MPbD-@g6#*Yv~3&j;58e*6CY@N%_p-@g6(?Q(Fh^_w?u{(f=#_pkKK8Q-9i2>)-FFXg9t!tE}7&IOcV6Zkocmx|{L$ zJFCy1Ki@cNxNR2K)DF+d?NS#no>|nx`RS3>zLg&LF6!@J?Z164--2$=*_|2-`*=RS zOZfNKe8R+uJLgE=xw>WVa+k$@T=y>M9$4-F`D6CUgY!#Mgg0$adh_nx=Z{evR>^Oh z#WP{zr1R&`7lyOnzY%cvjzM}L&yLvw-yev7c$aW#C;x%fzMo#X>{_XDV5{@rzxkh^ zS^W9t|Ms5ckDotlYHC+Z=K6M5?AslYg%dP(%;o>_Eq8ve`iD=SzFg%!u*UcNxeLEu z%CDKm_4`-Wp7~Nc=18wuB>v^O#g89Ay*2CSi!EEWEY*u`X1n^)U9NlQ%l-Zta`MoE ztxMGRt#H44ZTqH8n;zZ_+`HWU+qdsOe*Ad;{Q3X?{~1OB1tFmLlZBCiVJd?T$P7@P zVBq-Apv@`5k#JxMr?46?gTaP{2N)F8Q*q%)FPo+dpU*0#LvAcO93m{@eGZd&1-sQ47hK`sSZdC)>xH62t$?b+L=D3^ zB2QSBzJG9dzA;Bph(f=Uz0Zyn6BM0U#ntL;9zDF!z{PK@GDSl%v5j3+J=3ItRi$Uc QK{n+H365^etSk)H0N%2f?EnA( diff --git a/public/tiny_mce/plugins/emotions/images/smiley-smile.gif b/public/tiny_mce/plugins/emotions/images/smiley-smile.gif deleted file mode 100644 index 8cf2b5daf3e5e3321fbb9d6eeadd9cf60a575fea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1116 zcmZ?wbhEHb6k-r!_}<6x>({TpfB*itE%^7V`M+Og->&n$d-v|oM+;SMhEJb9ef|3N z*L{)S55@oec1aHu{P)-N?-!>>xA*^jBK7?F^Lv+#KYn<9V5R8)Z}t~1T-Y{?>+dVo zBP+$HRdes#K5O%I`Dhouzn?9x?-Bg-$<^I}*u8Ze?w1gk^lI{>)YpmJZm={mbwZ z+p|7@{`~FRx6dD!tjj`BL8>h=2L0ckhDkx4U8o zR{QRlBYo%Umc8@k-ab@)bC&nOYXAMK{r~>W-!WTY+bo`cZ#Dn_GvB-1ecuZA&mW^| zlR1CCRoc7U<=12RkME71p8*Dr?%iwK&+k|Men;rQ8sB{@JziZ9{&qv~+&-m~2j~C$ zYyRab?~flp{{R2aFbb$00*XIb7#SG)7<51egYpCe$A1P{P7w(PhsA2XQj8o18x}e+ z2>Mi56dr2sJ-USC11z(X+UV3UBRg$~2SV*yQWT{$h*; z&L7bE_t*69CDT72Eu!7{LhQKz{f_!}o$voQ`!{diT)1%I?c2A1KU-Y9c;?ovTbB;1 ze*XOV-eu#>)8!xC-ml8V@b`<;wpm>Jw$Hk8)bRH^tG};QKYn<9V5R86HG$88;3V(r zZpMGVUG}aJdwSDo(-cm31CBqxat<$7`|~s8|KHG4Tjc-!D?PYM>h9gUAK!TWd9Ji` zzTTeYUZ+o=&IlI#_Br6dGNWrJ^!`4P`u{)S@ZrO|S4E%Lo^@oUxEeQuDmTOD4^jXA z7#vvbe{Pq;%y#u3cZBw>^muieck2@M`Mv5PmTU)B``)>_CCZ-l?q(#qM3u zP4!~iIY&~9pCQ?U{pc>&FV8K0e9OIhSjkq2xiFml(<7_*7x>ZxdA7~sd3(?D(<_&g zhZcNzm+<>n*6Ry`pFc)@erECcWA^X2O21yp|9UJxyHn%Ha^CH8`TqSi-@n@b|3CA+ z%iT*;gb%Fo-7#BW#~kTDpL7>a(D?f||L(QzJLdA=zY*Y}%Y1&n^7jYg4{rwUoiC>& z$hd2zhL!;1-sLXm_9^XK;ch9Mb$nT#aClAg)u+@3{Y@R>g z{NJ4A{qf_+|Ns9PMgiUsQ2fcl$iOh4K?kG?lqVQC{xjHfibyatsIzj}Fmf1dSm?kY z7f=$haS<~YKZ6XHPr{R<9L{Dr8d4t*c`&uBmB}1rI@T#=TxPP>a?{}>4*qpn9fB&V ze4IjwQoa*|o%@&jGp=drU_9hHft63jrj$|1jl+r2CNxu^k%3X3e^1j_sfCQf{%pH6 z5)~a7SR``qZ%bXsGJ%mLlkI8Zfd%|hR-LB`7M6H&FSF;+c~H1H{p1{Tt#c(^i=3KT zyykF4Iv8;JEdaXpPU4f);1^7#*L0i`9!y-y&72hf^TWe{H;m%j91I_5Uhb5%;**&$ zMWs{up;g+PgvXi=T^>>yQv^P-atdiVd0n`0K%LduU!uXm{+D5*kC>6K+8+lNmcxOK z(pn-r4=Ns?plE4vM)-*@lcef|3N&qs@2_eDN^`lQOu@b9Rpy0MyTz@{f{`+hC=FOYU)8#*Zh`Mm$!qsC2 z-#!QY{cJI#mV5WA=)bR2zkU05>7eQdDXEJW&-{F4^Z#Grzkj8Fe&sBcl>GJH;I zf4`%StQ5}(75wuvXaE|vc!zWj89X@>c(e3?zzc}4HEcpAK)q$0wE0k3}fBt;qsA04V-@!G3rO6^+ zKPUb9=D&cOYmq z*Zkf^{kIQQzdsQF_{Qt^&yXF8in~=*_O0~z6&&*WSJqW4t9>in_bzw;_fG4;YTuo6 zB=@iO-!ot8{C?&C|IF`Q&<$p1xMF4XxUsm3}>z|8_%g#~kTzcg6mE(tUnL z@K+Z^fnf@R4#*f#o?zhk z&!EXEVxe$AMLxMQeo|xWw8e?$rIv$CIUv zuaUj^)Si<;F9MewpP($8wCFiwqgl1c&xuEN7NP{1U9-ERYW8_<>oT#3DEg4;b6yMCewr~CzV%t2&x-gDVXHO7$LySZ2#wg N1CLmWNq_@`H2|>$hIIe{ diff --git a/public/tiny_mce/plugins/emotions/images/smiley-undecided.gif b/public/tiny_mce/plugins/emotions/images/smiley-undecided.gif deleted file mode 100644 index 2aec732fbfdf8df32f6e527f8e61ab91ae0cbbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1117 zcmZ?wbhEHb6k-r!_&%NC*RNlH|Ni~`&g$DT)1%I&6_uG-@g6x(c;&8kAJ_TZX7lI`Z?*_w{JPILU-@p z{qxE7?-!@NE5r^TKK%b*;lAy&{ymd^|1!M2RO7rYW4CKY#xJKjF`>oPYmHPoF-0aFx{G@3D_=@83CJZ}+O`dzX#3&Eop|N_Fpi zxqBCM|NhP2FCInw9%D|;9+pWCOjw419WS@h30{~vdR zD&jf*{W19T%4P3z_l4~|)|wngR|_0kA-Hpn zYLq>&#`oVlt*x^KB0cz1f(1W+jM}%-LsN|D-(U0huZ#|?_C2vy;P+dlBrn!)Hw3>w z5dZa9e%}iByVtgVc&g^C$I?+I_3f_M$%FG>Ju&=tM`YV9o?kEJ_blLjagyi2YX3d+ zrGEd)x^s1lvjNw=i~9BX;@ju){r_jaf3^SjJ3`;C^Zoeoyf zoR2cKn|7_)VbIdVEiTd)6A`%Nn1gqYM9mF_18!F5q}2nGN}-U3Cw&dEHU>J90L|MDtU7qdy`S9z`RhJ{noX{+eyboSUGtN7cxKX znPT7mt;KWliU|rvzCs=yM?8eYZKh~>&WrK%pQbJ(q|>$7jl1zY%es)0%^eK$^}K{M z3_ibTY`k91aJF;P)9yxg?Sfi11|CsMw57E_}O;y zNW}RVY?<`-52@&&g$K}cb`6e`ug?j z->>HX{+j;zXz}lv^r!z%ru~+q3>WS2}$7@ZZlC zKVRAW`IYnUx697?di%D|+Oyp2|G&aZ2URazxbXgE`2WA5D|@*Aevdu7S>*2ByWc(s z99$)}dsXzNDV(QIpZ@s9>)-FFzpqp;UOaPfP2lQo#y>wpHcyxT^U3www{Lq_i2eU& z|M^4I^XJb$fBw8}7LS2A^S+fHAKw^z8gX7dX0Ug;`=5^*pFc+Z`R2c8qw4;R>LIo~ zJ7x4RIvHah^`L)TMzh25`gbIFtApY{K;QxQ-cdu>VF_-_|1>L`2oc6EwKd{>O+g-8q zhqYhbGd{4!_vIOZ-#sljQfbFoTnmC1rlsm87At}JX|m?&ygl*1w6 zd#g>}ES^KrLx7`)i&@aFz#yUFa61QE$c@HH48anDt^p1Yf)-RTnhOMo2r9A#GpKc? zT;X`c*v`srVZ*Xgv6)M_ZAQxs#|=xIJ(bw`lr%3go@^0V%ryJVgN=(1_4CQrh1@up r>?YjK_2dH+kAliX77l|w6ApVyF&Z$j*)5sS#4ph^;i3a0BZD;n=Khyf diff --git a/public/tiny_mce/plugins/emotions/images/smiley-yell.gif b/public/tiny_mce/plugins/emotions/images/smiley-yell.gif deleted file mode 100644 index 7719bc43d3e92ee5f6024eee94d8dade3df1e6a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1132 zcmdVZ{WF^f0KoC*G1i1M5)x_E(0JLo^Ad_YvT|s|%hg0{vw2(Au`9DJy7NQ#nqb$4 z_Gs(YRrR9Q5n;!bdKu!0pk6ELbtXBbU7CrvL_(hAd9v%DvG0HI`Qe+G%z>glbpc#} zLm7agD1smi3b?bgqu1+=Mq?-yTp11BZ70snP0QQTtw`}m3(c|y84Z^Vds&KRfA##C z?mEYfzlR1TZVH70*|Yq`je=ZiL9~E z!(9EJL`1_v*60>d#aD}zL(QTHkZ zR(+5KDKhM5`Qrf_#{9MFd&?p;Jqphb`Kab1Lft?cRTamuOZ~npy27EO0~hP0p}I6 zUkaa$lpXW+46NDriT^O<6M&WcksxL9?%U^H>n`(gb9VS<;NbQ_T&DO8EAJusk>qKk zPg;ybn*fiOdlVGKxo>I{>r*lzhpVwwupnCyQ~2UlQmyNS-}!j(iFBe3JRuplb+JN3 zvCln^#x*>mp5XK|2-h8+&UljYq&#rA@)((P^TNj`W4$x{WA5jqO6MDY{v$F67oAlu zifvDShgT7h&k=m1DG!#v=1FJ*8aHR0?D(ntaBeK{ F-hb;s-?#t( diff --git a/public/tiny_mce/plugins/emotions/langs/cs.js b/public/tiny_mce/plugins/emotions/langs/cs.js deleted file mode 100644 index 90d1c8b..0000000 --- a/public/tiny_mce/plugins/emotions/langs/cs.js +++ /dev/null @@ -1,4 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Vložit emotikon'; -tinyMCELang['lang_emotions_desc'] = 'Emotikony'; diff --git a/public/tiny_mce/plugins/emotions/langs/de.js b/public/tiny_mce/plugins/emotions/langs/de.js deleted file mode 100644 index e828c76..0000000 --- a/public/tiny_mce/plugins/emotions/langs/de.js +++ /dev/null @@ -1,6 +0,0 @@ -// DE lang variables - - -tinyMCELang['lang_insert_emotions_title'] = 'Emotion einfügen'; -tinyMCELang['lang_emotions_desc'] = 'Emotion'; - diff --git a/public/tiny_mce/plugins/emotions/langs/el.js b/public/tiny_mce/plugins/emotions/langs/el.js deleted file mode 100644 index 607433f..0000000 --- a/public/tiny_mce/plugins/emotions/langs/el.js +++ /dev/null @@ -1,5 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_insert_emotions_title'] = 'ÅéóáãùãÞ åíüò åéêïíéäßïõ emoticon'; -tinyMCELang['lang_emotions_desc'] = 'Åéêïíßäéá emoticons'; - diff --git a/public/tiny_mce/plugins/emotions/langs/en.js b/public/tiny_mce/plugins/emotions/langs/en.js deleted file mode 100644 index 37f549f..0000000 --- a/public/tiny_mce/plugins/emotions/langs/en.js +++ /dev/null @@ -1,5 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Insert emotion'; -tinyMCELang['lang_emotions_desc'] = 'Emotions'; - diff --git a/public/tiny_mce/plugins/emotions/langs/fa.js b/public/tiny_mce/plugins/emotions/langs/fa.js deleted file mode 100644 index fe7db9e..0000000 --- a/public/tiny_mce/plugins/emotions/langs/fa.js +++ /dev/null @@ -1,10 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_insert_emotions_title'] = 'اÙزودن Ø´Ú©Ù„Ú©'; -tinyMCELang['lang_emotions_desc'] = 'شکلکها'; - diff --git a/public/tiny_mce/plugins/emotions/langs/fr.js b/public/tiny_mce/plugins/emotions/langs/fr.js deleted file mode 100644 index b2dbedb..0000000 --- a/public/tiny_mce/plugins/emotions/langs/fr.js +++ /dev/null @@ -1,5 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_insert_emotions_title'] = 'Insèrer un émoticon'; -tinyMCELang['lang_emotions_desc'] = 'Émoticons'; - diff --git a/public/tiny_mce/plugins/emotions/langs/fr_ca.js b/public/tiny_mce/plugins/emotions/langs/fr_ca.js deleted file mode 100644 index 1e8d362..0000000 --- a/public/tiny_mce/plugins/emotions/langs/fr_ca.js +++ /dev/null @@ -1,5 +0,0 @@ -// CAN_FR lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Insérer un émoticon'; -tinyMCELang['lang_emotions_desc'] = 'Émoticons'; - diff --git a/public/tiny_mce/plugins/emotions/langs/it.js b/public/tiny_mce/plugins/emotions/langs/it.js deleted file mode 100644 index fa93e6b..0000000 --- a/public/tiny_mce/plugins/emotions/langs/it.js +++ /dev/null @@ -1,5 +0,0 @@ -//IT lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Inserisci una emoticon'; -tinyMCELang['lang_emotions_desc'] = 'Emoticon'; - diff --git a/public/tiny_mce/plugins/emotions/langs/ko.js b/public/tiny_mce/plugins/emotions/langs/ko.js deleted file mode 100644 index 654193f..0000000 --- a/public/tiny_mce/plugins/emotions/langs/ko.js +++ /dev/null @@ -1,5 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'À̸ðƼÄÜ ³Ö±â'; -tinyMCELang['lang_emotions_desc'] = 'À̸ðƼÄÜ'; - diff --git a/public/tiny_mce/plugins/emotions/langs/pl.js b/public/tiny_mce/plugins/emotions/langs/pl.js deleted file mode 100644 index 63996c9..0000000 --- a/public/tiny_mce/plugins/emotions/langs/pl.js +++ /dev/null @@ -1,4 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Wstaw emtoiconÄ™'; -tinyMCELang['lang_emotions_desc'] = 'Emtoicony'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/emotions/langs/pt_br.js b/public/tiny_mce/plugins/emotions/langs/pt_br.js deleted file mode 100644 index a9fc32e..0000000 --- a/public/tiny_mce/plugins/emotions/langs/pt_br.js +++ /dev/null @@ -1,5 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Inserir Emoticon'; -tinyMCELang['lang_emotions_desc'] = 'Emoticons'; - diff --git a/public/tiny_mce/plugins/emotions/langs/sv.js b/public/tiny_mce/plugins/emotions/langs/sv.js deleted file mode 100644 index 82e1ba3..0000000 --- a/public/tiny_mce/plugins/emotions/langs/sv.js +++ /dev/null @@ -1,4 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_insert_emotions_title'] = 'Klistra in känsla'; -tinyMCELang['lang_emotions_desc'] = 'Känslor'; diff --git a/public/tiny_mce/plugins/emotions/langs/zh_cn.js b/public/tiny_mce/plugins/emotions/langs/zh_cn.js deleted file mode 100644 index cdd4896..0000000 --- a/public/tiny_mce/plugins/emotions/langs/zh_cn.js +++ /dev/null @@ -1,6 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_insert_emotions_title'] = '²åÈë±íÇé'; -tinyMCELang['lang_emotions_desc'] = '±íÇé'; - diff --git a/public/tiny_mce/plugins/emotions/readme.txt b/public/tiny_mce/plugins/emotions/readme.txt deleted file mode 100644 index e2fdeb5..0000000 --- a/public/tiny_mce/plugins/emotions/readme.txt +++ /dev/null @@ -1,20 +0,0 @@ - Emotions plugin for TinyMCE ------------------------------- - -Installation instructions: - * Copy the emotions directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "emotions". - * Add the emotions button name to button list, example: theme_advanced_buttons3_add : "emotions". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "emotions", - theme_advanced_buttons3_add : "emotions" - }); - -Copyright notice: - These emotions where taken from Mozilla Thunderbird. - I hope they don't get angry if I use them here after all this is a open source project - aswell and I realy love their product. diff --git a/public/tiny_mce/plugins/flash/editor_plugin.js b/public/tiny_mce/plugins/flash/editor_plugin.js deleted file mode 100644 index 82ec648..0000000 --- a/public/tiny_mce/plugins/flash/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('flash','en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br');function TinyMCE_flash_initInstance(inst){if(!tinyMCE.settings['flash_skip_plugin_css'])tinyMCE.importCSS(inst.getDoc(),tinyMCE.baseURL+"/plugins/flash/flash.css");}function TinyMCE_flash_getControlHTML(control_name){switch(control_name){case "flash":return '';}return "";}function TinyMCE_flash_parseAttributes(attribute_string){var attributeName="";var attributeValue="";var withInName;var withInValue;var attributes=new Array();var whiteSpaceRegExp=new RegExp('^[ \n\r\t]+','g');if(attribute_string==null||attribute_string.length<2)return null;withInName=withInValue=false;for(var i=0;i','gi'),'');content=content.replace(new RegExp('<[ ]*object','gi'),'','gi'),'');while((startPos=content.indexOf('',startPos);var attribs=TinyMCE_flash_parseAttributes(content.substring(startPos+6,endPos));embedList[embedList.length]=attribs;}var index=0;while((startPos=content.indexOf('=embedList.length)break;var attribs=embedList[index];endPos=content.indexOf('',startPos);endPos+=9;var contentAfter=content.substring(endPos);content=content.substring(0,startPos);content+=''+content.substring(endPos);content+=contentAfter;index++;startPos++;}break;case "get_from_editor":var startPos=-1;while((startPos=content.indexOf('',startPos);var attribs=TinyMCE_flash_parseAttributes(content.substring(startPos+4,endPos));if(attribs['name']!="mce_plugin_flash")continue;endPos+=2;var embedHTML='';embedHTML+='';embedHTML+='';embedHTML+='';embedHTML+='';embedHTML+='';chunkBefore=content.substring(0,startPos);chunkAfter=content.substring(endPos);content=chunkBefore+embedHTML+chunkAfter;}break;}return content;}function TinyMCE_flash_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){function getAttrib(elm,name){return elm.getAttribute(name)?elm.getAttribute(name):"";}tinyMCE.switchClassSticky(editor_id+'_flash','mceButtonNormal');if(node==null)return;do{if(node.nodeName.toLowerCase()=="img"&&getAttrib(node,'name').indexOf('mce_plugin_flash')==0)tinyMCE.switchClassSticky(editor_id+'_flash','mceButtonSelected');}while((node=node.parentNode));return true;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/flash/editor_plugin_src.js b/public/tiny_mce/plugins/flash/editor_plugin_src.js deleted file mode 100644 index 3de1762..0000000 --- a/public/tiny_mce/plugins/flash/editor_plugin_src.js +++ /dev/null @@ -1,225 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('flash', 'en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl,pt_br'); - -function TinyMCE_flash_initInstance(inst) { - if (!tinyMCE.settings['flash_skip_plugin_css']) - tinyMCE.importCSS(inst.getDoc(), tinyMCE.baseURL + "/plugins/flash/flash.css"); -} - -function TinyMCE_flash_getControlHTML(control_name) { - switch (control_name) { - case "flash": - return ''; - } - - return ""; -} - -function TinyMCE_flash_parseAttributes(attribute_string) { - var attributeName = ""; - var attributeValue = ""; - var withInName; - var withInValue; - var attributes = new Array(); - var whiteSpaceRegExp = new RegExp('^[ \n\r\t]+', 'g'); - - if (attribute_string == null || attribute_string.length < 2) - return null; - - withInName = withInValue = false; - - for (var i=0; i','gi'),''); - content = content.replace(new RegExp('<[ ]*object','gi'),'','gi'),''); - - // Parse all embed tags - while ((startPos = content.indexOf('', startPos); - var attribs = TinyMCE_flash_parseAttributes(content.substring(startPos + 6, endPos)); - embedList[embedList.length] = attribs; - } - - // Parse all object tags and replace them with images from the embed data - var index = 0; - while ((startPos = content.indexOf('= embedList.length) - break; - - var attribs = embedList[index]; - - // Find end of object - endPos = content.indexOf('', startPos); - endPos += 9; - - // Insert image - var contentAfter = content.substring(endPos); - content = content.substring(0, startPos); - content += '' + content.substring(endPos); - content += contentAfter; - index++; - - startPos++; - } - break; - - case "get_from_editor": - // Parse all img tags and replace them with object+embed - var startPos = -1; - while ((startPos = content.indexOf('', startPos); - var attribs = TinyMCE_flash_parseAttributes(content.substring(startPos + 4, endPos)); - - // Is not flash, skip it - if (attribs['name'] != "mce_plugin_flash") - continue; - - endPos += 2; - - var embedHTML = ''; - - // Insert object + embed - embedHTML += ''; - embedHTML += ''; - embedHTML += ''; - embedHTML += ''; - embedHTML += ''; - - // Insert embed/object chunk - chunkBefore = content.substring(0, startPos); - chunkAfter = content.substring(endPos); - content = chunkBefore + embedHTML + chunkAfter; - } - break; - } - - // Pass through to next handler in chain - return content; -} - -function TinyMCE_flash_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { - function getAttrib(elm, name) { - return elm.getAttribute(name) ? elm.getAttribute(name) : ""; - } - - tinyMCE.switchClassSticky(editor_id + '_flash', 'mceButtonNormal'); - - if (node == null) - return; - - do { - if (node.nodeName.toLowerCase() == "img" && getAttrib(node, 'name').indexOf('mce_plugin_flash') == 0) - tinyMCE.switchClassSticky(editor_id + '_flash', 'mceButtonSelected'); - } while ((node = node.parentNode)); - - return true; -} diff --git a/public/tiny_mce/plugins/flash/flash.css b/public/tiny_mce/plugins/flash/flash.css deleted file mode 100644 index a05f373..0000000 --- a/public/tiny_mce/plugins/flash/flash.css +++ /dev/null @@ -1,7 +0,0 @@ -.mce_plugin_flash { - border: 1px dotted #cc0000; - background-image: url(images/flash.gif); - background-position: center; - background-repeat: no-repeat; - background-color: #ffffcc; -} diff --git a/public/tiny_mce/plugins/flash/flash.htm b/public/tiny_mce/plugins/flash/flash.htm deleted file mode 100644 index 139c9ca..0000000 --- a/public/tiny_mce/plugins/flash/flash.htm +++ /dev/null @@ -1,182 +0,0 @@ - - -{$lang_insert_flash} - - - - - - -
- - - - - - - - - - - - - - - -
{$lang_insert_flash}

- - - - - - - - - - - -
{$lang_insert_flash_file}: - - - - - -
-
{$lang_insert_flash_size}: - -  x  - -

- -
-
- - diff --git a/public/tiny_mce/plugins/flash/images/flash.gif b/public/tiny_mce/plugins/flash/images/flash.gif deleted file mode 100644 index 4950e673cfe090074b13328ad31d548186b891bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664 zcmV;J0%!e4Nk%w1VH5xq0QLX?|NsB~{{H>_{rLI%_V@Vq_xbhp_4M`k^z`)d^78TX z_VM!d@bdKW@$v8R^zZTW@9*#K?(XdF@$2pI?Ck95>+a|4@#pLC=;-L>=$j{ix&D6)u*Tl@$#?05p%hJNj z)xpTryT;PF#nigO$+o}Ev%t}|yTGu!#i_W;sT0EgOG56l5c;EX@HYyf0Al_k86C1XL*TZ zcZpnik5p)T6I_BIQE>%HZ45wT7C2T1I$Q%gUIsZ_1vXd(H(CWXSOhdy1T$0wFj53D zQUotg1T9SiEJy(-N&o-=000000000000000000000000000000A^8LW000I6EC2ui z02BZe000N|fChqtgoTEOh=~RlOj%=NSxgs-3N%q#Q%FctT2V9#hYmntOFt+iBr{7* zVL%RsH(@v>84?dRc6MY#VK;>qQad9P1p*9cW@Kb0KT;NiN?t4#0{{R}YGha@CM{k{ zgjPNt3jyZ3WkxwEDMMC-U@{v7)';}return "";}function TinyMCE_fullscreen_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceFullScreen":if(tinyMCE.getParam('fullscreen_is_enabled')){window.opener.tinyMCE.execInstanceCommand(tinyMCE.getParam('fullscreen_editor_id'),'mceSetContent',false,tinyMCE.getContent(editor_id));top.close();}else{tinyMCE.setWindowArg('editor_id',editor_id);var win=window.open(tinyMCE.baseURL+"/plugins/fullscreen/fullscreen.htm","mceFullScreenPopup","fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width="+screen.availWidth+",height="+screen.availHeight);}return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/fullscreen/editor_plugin_src.js b/public/tiny_mce/plugins/fullscreen/editor_plugin_src.js deleted file mode 100644 index de9bcba..0000000 --- a/public/tiny_mce/plugins/fullscreen/editor_plugin_src.js +++ /dev/null @@ -1,34 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('fullscreen', 'en,sv,cs'); - -function TinyMCE_fullscreen_getControlHTML(control_name) { - switch (control_name) { - case "fullscreen": - return ''; - } - - return ""; -} - -function TinyMCE_fullscreen_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceFullScreen": - if (tinyMCE.getParam('fullscreen_is_enabled')) { - // In fullscreen mode - window.opener.tinyMCE.execInstanceCommand(tinyMCE.getParam('fullscreen_editor_id'), 'mceSetContent', false, tinyMCE.getContent(editor_id)); - top.close(); - } else { - tinyMCE.setWindowArg('editor_id', editor_id); - - var win = window.open(tinyMCE.baseURL + "/plugins/fullscreen/fullscreen.htm", "mceFullScreenPopup", "fullscreen=yes,menubar=no,toolbar=no,scrollbars=no,resizable=yes,left=0,top=0,width=" + screen.availWidth + ",height=" + screen.availHeight); - } - - return true; - } - - // Pass to next handler in chain - return false; -} - - diff --git a/public/tiny_mce/plugins/fullscreen/fullscreen.htm b/public/tiny_mce/plugins/fullscreen/fullscreen.htm deleted file mode 100644 index 30644e6..0000000 --- a/public/tiny_mce/plugins/fullscreen/fullscreen.htm +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - diff --git a/public/tiny_mce/plugins/fullscreen/images/fullscreen.gif b/public/tiny_mce/plugins/fullscreen/images/fullscreen.gif deleted file mode 100644 index 850ff8d42d926f86c4f9f16e8cbf93d8c1c637fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 391 zcmZ?wbhEHb6k!lyxXJ(m|NsC0@ZtZ38~+<7TnH$*kkIg;pyR@U3;!3aIPl=b|Aqx0 zCT#fcQ1HMZ<3K>gg@ld=1v5T0%($@O#Q%VX2MG-a8Wud5u;Igk1OFFnxNzaYe}{?( z0Tl-lIxaM<_%LAykbA+Q;6TEJ2L%g0G;H{P;KqLkp!pMkx-M)0T5;mPfk(oE9TygC zIB?;`{|6ubfA|4(&VR7Gh$0k!vM@3*7&7R9RD=A)z_#STi~ z';return "";}function TinyMCE_iespell_execCommand(editor_id,element,command,user_interface,value){if(command=="mceIESpell"){try{var ieSpell=new ActiveXObject("ieSpell.ieSpellExtension");ieSpell.CheckDocumentNode(tinyMCE.getInstanceById(editor_id).contentDocument.documentElement);}catch(e){if(e.number==-2146827859){if(confirm(tinyMCE.getLang("lang_iespell_download","",true)))window.open('http://www.iespell.com/download.php','ieSpellDownload','');}else alert("Error Loading ieSpell: Exception "+e.number);}return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/iespell/editor_plugin_src.js b/public/tiny_mce/plugins/iespell/editor_plugin_src.js deleted file mode 100644 index b85ea9f..0000000 --- a/public/tiny_mce/plugins/iespell/editor_plugin_src.js +++ /dev/null @@ -1,37 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('iespell', 'cs,el,en,fr_ca,it,ko,sv,zh_cn,fr,de,pl,pt_br'); - -/** - * Returns the HTML contents of the iespell control. - */ -function TinyMCE_iespell_getControlHTML(control_name) { - // Is it the iespell control and is the brower MSIE. - if (control_name == "iespell" && tinyMCE.isMSIE) - return ''; - - return ""; -} - -/** - * Executes the mceIESpell command. - */ -function TinyMCE_iespell_execCommand(editor_id, element, command, user_interface, value) { - // Handle ieSpellCommand - if (command == "mceIESpell") { - try { - var ieSpell = new ActiveXObject("ieSpell.ieSpellExtension"); - ieSpell.CheckDocumentNode(tinyMCE.getInstanceById(editor_id).contentDocument.documentElement); - } catch (e) { - if (e.number == -2146827859) { - if (confirm(tinyMCE.getLang("lang_iespell_download", "", true))) - window.open('http://www.iespell.com/download.php', 'ieSpellDownload', ''); - } else - alert("Error Loading ieSpell: Exception " + e.number); - } - - return true; - } - - // Pass to next handler in chain - return false; -} \ No newline at end of file diff --git a/public/tiny_mce/plugins/iespell/images/iespell.gif b/public/tiny_mce/plugins/iespell/images/iespell.gif deleted file mode 100644 index 46c0c4a66a49c81d695ebc0ffb12aa991489d4db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmZ?wbhEHb6k!ly*vtR||NsB@^<8F=@gSh#!GsMT3<@6HzH!ml*B2-bmPa8Jf3h$# zFmN*HfJ8xNFtE57ob+71*W&eA-ANq=t&&ANot<^F4Ax|Lbx!TzN_ToK{_1$=^>xaU lLcOv}js`HM@vQfp^7)rwv;Lt_BL$Idlk_Y0^fEA50|3CZG!y^; diff --git a/public/tiny_mce/plugins/iespell/langs/cs.js b/public/tiny_mce/plugins/iespell/langs/cs.js deleted file mode 100644 index c38a480..0000000 --- a/public/tiny_mce/plugins/iespell/langs/cs.js +++ /dev/null @@ -1,4 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_iespell_desc'] = 'Spustit kontrolu pravopisu'; -tinyMCELang['lang_iespell_download'] = "ieSpell nedetekován. Kliknìte na OK a otevøete stahovací stránku." \ No newline at end of file diff --git a/public/tiny_mce/plugins/iespell/langs/de.js b/public/tiny_mce/plugins/iespell/langs/de.js deleted file mode 100644 index 80a3b02..0000000 --- a/public/tiny_mce/plugins/iespell/langs/de.js +++ /dev/null @@ -1,4 +0,0 @@ -// DE lang variables by Tobias Heer - -tinyMCELang['lang_iespell_desc'] = 'Rechtschreibprüfung'; -tinyMCELang['lang_iespell_download'] = "ieSpell nicht gefunden. Klicken Sie OK um auf die Download Seite zu gelangen." diff --git a/public/tiny_mce/plugins/iespell/langs/el.js b/public/tiny_mce/plugins/iespell/langs/el.js deleted file mode 100644 index 7925947..0000000 --- a/public/tiny_mce/plugins/iespell/langs/el.js +++ /dev/null @@ -1,4 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_iespell_desc'] = 'Ïñèïãñáöéêüò Ýëåã÷ïò'; -tinyMCELang['lang_iespell_download'] = "Ôï ðñüãñáììá ieSpell äåí âñÝèçêå. ÐáôÞóôå OK ãéá íá ìåôáâåßôå óôçí éóôïóåëßäá ëÞøçò ôïõ ðñïãñÜììáôïò." diff --git a/public/tiny_mce/plugins/iespell/langs/en.js b/public/tiny_mce/plugins/iespell/langs/en.js deleted file mode 100644 index b7cc3a4..0000000 --- a/public/tiny_mce/plugins/iespell/langs/en.js +++ /dev/null @@ -1,4 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_iespell_desc'] = 'Run spell checking'; -tinyMCELang['lang_iespell_download'] = "ieSpell not detected. Click OK to go to download page." diff --git a/public/tiny_mce/plugins/iespell/langs/fr.js b/public/tiny_mce/plugins/iespell/langs/fr.js deleted file mode 100644 index de66fb0..0000000 --- a/public/tiny_mce/plugins/iespell/langs/fr.js +++ /dev/null @@ -1,4 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_iespell_desc'] = 'Executer le vérificateur d\'orthographe'; -tinyMCELang['lang_iespell_download'] = "ieSpell n\'a pas été trouvé. Cliquez sur OK pour aller au site de téléchargement." diff --git a/public/tiny_mce/plugins/iespell/langs/fr_ca.js b/public/tiny_mce/plugins/iespell/langs/fr_ca.js deleted file mode 100644 index 9c172b0..0000000 --- a/public/tiny_mce/plugins/iespell/langs/fr_ca.js +++ /dev/null @@ -1,4 +0,0 @@ -// CAN_FR lang variables - -tinyMCELang['lang_iespell_desc'] = 'Executer le vérificateur d\'orthographe'; -tinyMCELang['lang_iespell_download'] = "ieSpell n\'a pas été trouvé. Cliquez sur OK pour aller au site de téléchargement."; diff --git a/public/tiny_mce/plugins/iespell/langs/it.js b/public/tiny_mce/plugins/iespell/langs/it.js deleted file mode 100644 index 5f6e2f0..0000000 --- a/public/tiny_mce/plugins/iespell/langs/it.js +++ /dev/null @@ -1,4 +0,0 @@ -// IT lang variables - -tinyMCELang['lang_iespell_desc'] = 'Avvia il controllo ortografico'; -tinyMCELang['lang_iespell_download'] = "ieSpell non trovato. Clicca OK per andare alla pagina di download." diff --git a/public/tiny_mce/plugins/iespell/langs/ko.js b/public/tiny_mce/plugins/iespell/langs/ko.js deleted file mode 100644 index a5bbfe4..0000000 --- a/public/tiny_mce/plugins/iespell/langs/ko.js +++ /dev/null @@ -1,4 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_iespell_desc'] = '¸ÂÃã¹ý °Ë»ç ½ÇÇà'; -tinyMCELang['lang_iespell_download'] = "ieSpellÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù. OK¸¦ ´©¸£¸é ´Ù¿î·Îµå ÆäÀÌÁö·Î À̵¿ÇÕ´Ï´Ù." diff --git a/public/tiny_mce/plugins/iespell/langs/pl.js b/public/tiny_mce/plugins/iespell/langs/pl.js deleted file mode 100644 index 9fcb4e3..0000000 --- a/public/tiny_mce/plugins/iespell/langs/pl.js +++ /dev/null @@ -1,4 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_iespell_desc'] = 'Uruchom sprawdzanie pisowni'; -tinyMCELang['lang_iespell_download'] = "Nie wykryto pluginu, kliknij aby przejść do strony z pluginami." \ No newline at end of file diff --git a/public/tiny_mce/plugins/iespell/langs/pt_br.js b/public/tiny_mce/plugins/iespell/langs/pt_br.js deleted file mode 100644 index dba6e82..0000000 --- a/public/tiny_mce/plugins/iespell/langs/pt_br.js +++ /dev/null @@ -1,4 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_iespell_desc'] = 'Executar verificação ortográfica'; -tinyMCELang['lang_iespell_download'] = "Verificador ieSpell não detectado. Click OK para ir à página de download." diff --git a/public/tiny_mce/plugins/iespell/langs/sv.js b/public/tiny_mce/plugins/iespell/langs/sv.js deleted file mode 100644 index 2230c1c..0000000 --- a/public/tiny_mce/plugins/iespell/langs/sv.js +++ /dev/null @@ -1,4 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_iespell_desc'] = 'Kör rättstavningskontroll'; -tinyMCELang['lang_iespell_download'] = "ieSpell verkar inte vara installerad. Klicka OK för att ladda hem." diff --git a/public/tiny_mce/plugins/iespell/langs/zh_cn.js b/public/tiny_mce/plugins/iespell/langs/zh_cn.js deleted file mode 100644 index 35aeba1..0000000 --- a/public/tiny_mce/plugins/iespell/langs/zh_cn.js +++ /dev/null @@ -1,5 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_iespell_desc'] = 'ÔËÐÐƴд¼ì²é'; -tinyMCELang['lang_iespell_download'] = "δ¼ì²âµ½ieSpellƴд¼ì²é£¬µã»÷ OK Ç°ÍùÏÂÔØÒ³Ãæ¡£" diff --git a/public/tiny_mce/plugins/iespell/readme.txt b/public/tiny_mce/plugins/iespell/readme.txt deleted file mode 100644 index 0371a2a..0000000 --- a/public/tiny_mce/plugins/iespell/readme.txt +++ /dev/null @@ -1,20 +0,0 @@ - ieSpell plugin for TinyMCE ----------------------------- - -Installation instructions: - * Copy the iespell directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "iespell". - * Add the iespell button name to button list, example: theme_advanced_buttons3_add : "iespell". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "iespell", - theme_advanced_buttons3_add : "iespell" - }); - -Requirements: - The end user will need MSIE on Windows with the ieSpell installed. This can be downloaded - from http://www.iespell.com/download.php. Notice on other browsers than MSIE the spellchecking - button will not be visible. diff --git a/public/tiny_mce/plugins/insertdatetime/editor_plugin.js b/public/tiny_mce/plugins/insertdatetime/editor_plugin.js deleted file mode 100644 index 0d4b26b..0000000 --- a/public/tiny_mce/plugins/insertdatetime/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('insertdatetime','cs,el,en,fr_ca,it,ko,sv,zh_cn,fa,fr,de,pl,pt_br');function TinyMCE_insertdatetime_getControlHTML(control_name){var safariPatch='" onclick="';if(tinyMCE.isSafari)safariPatch="";switch(control_name){case "insertdate":return '';case "inserttime":return '';}return "";}function TinyMCE_insertdatetime_execCommand(editor_id,element,command,user_interface,value){function addZeros(value,len){value=""+value;if(value.length'; - - case "inserttime": - return ''; - } - - return ""; -} - -/** - * Executes the mceInsertDate command. - */ -function TinyMCE_insertdatetime_execCommand(editor_id, element, command, user_interface, value) { - /* Adds zeros infront of value */ - function addZeros(value, len) { - value = "" + value; - - if (value.length < len) { - for (var i=0; i<(len-value.length); i++) - value = "0" + value; - } - - return value; - } - - /* Returns the date object in the specified format */ - function getDateTime(date, format) { - format = tinyMCE.regexpReplace(format, "%D", "%m/%d/%y"); - format = tinyMCE.regexpReplace(format, "%r", "%I:%M:%S %p"); - format = tinyMCE.regexpReplace(format, "%Y", "" + date.getFullYear()); - format = tinyMCE.regexpReplace(format, "%y", "" + date.getYear()); - format = tinyMCE.regexpReplace(format, "%m", addZeros(date.getMonth()+1, 2)); - format = tinyMCE.regexpReplace(format, "%d", addZeros(date.getDate(), 2)); - format = tinyMCE.regexpReplace(format, "%H", "" + addZeros(date.getHours(), 2)); - format = tinyMCE.regexpReplace(format, "%M", "" + addZeros(date.getMinutes(), 2)); - format = tinyMCE.regexpReplace(format, "%S", "" + addZeros(date.getSeconds(), 2)); - format = tinyMCE.regexpReplace(format, "%I", "" + (date.getHours() < 12 ? (date.getHours()+1) : 24-date.getHours())); - format = tinyMCE.regexpReplace(format, "%p", "" + (date.getHours() < 12 ? "AM" : "PM")); - format = tinyMCE.regexpReplace(format, "%B", "" + tinyMCE.getLang("lang_inserttime_months_long")[date.getMonth()]); - format = tinyMCE.regexpReplace(format, "%b", "" + tinyMCE.getLang("lang_inserttime_months_short")[date.getMonth()]); - format = tinyMCE.regexpReplace(format, "%A", "" + tinyMCE.getLang("lang_inserttime_day_long")[date.getDay()]); - format = tinyMCE.regexpReplace(format, "%a", "" + tinyMCE.getLang("lang_inserttime_day_short")[date.getDay()]); - format = tinyMCE.regexpReplace(format, "%%", "%"); - - return format; - } - - // Handle commands - switch (command) { - case "mceInsertDate": - tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, getDateTime(new Date(), tinyMCE.getParam("plugin_insertdate_dateFormat", "%Y-%m-%d"))); - return true; - - case "mceInsertTime": - tinyMCE.execInstanceCommand(editor_id, 'mceInsertContent', false, getDateTime(new Date(), tinyMCE.getParam("plugin_insertdate_timeFormat", "%H:%M:%S"))); - return true; - } - - // Pass to next handler in chain - return false; -} diff --git a/public/tiny_mce/plugins/insertdatetime/images/insertdate.gif b/public/tiny_mce/plugins/insertdatetime/images/insertdate.gif deleted file mode 100644 index 5002f8746349bc868efbc06491232dfa97d3c109..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 zcmZ?wbhEHb6k!lyXlDQc0S*BLAkZ){uy8Q&NN@lGkAQ%Pgn$Gv$N-WB2?YfO6$J(f z7Ys5kI21f^sCW?2@F1Y$K>`p>c#tsTL&1y(1weAahlYv%!HNS5HUQCu1v@Tm0HOmI799A$;lhUlI}U)sg##ym=)r*t z4-VY;aN)v(3par1!-WU`9{|CN{|`R=|M23&2O#<5|9>F*{~zp+QDQU%NDcwTpDfG_ z3{DI>Af2E*!NBo^p_N0%W5a@j%^bp7HW7;+atKQ3giKISbUGxY8#Tkgv8knvM_eIB z=c9nL^CSV)pe+^wt`ihYni8&@xTx$gkvVve3c~?K7cOBfw+aV=qrGg*DLYzz2Dwd; z*X9zi5p-d1V6|#4d2pbSkw;!*2_KK(lfw+`ZkZ(s2OJ!jL=rixHaIdca<6in^Nph* z`8elBCR>(DMh1qPdmPPV9!z|^{*Hn}*pC^~&8!>@ashKV7$Z8`CAGsA2*|XwGO=hB tU3s9hz2P-eld|-TLZ)_Z{<++Be7xnG+3#=`?w5O4weaI(HfAOUYXDDa&Tjw! diff --git a/public/tiny_mce/plugins/insertdatetime/images/inserttime.gif b/public/tiny_mce/plugins/insertdatetime/images/inserttime.gif deleted file mode 100644 index eb76a832d4af92c335a27f1d30094cde8b763cc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 958 zcmZ?wbhEHb6k!lyXlDQc1B(DFrwA+02!ntE2af<(pM;?J?AWB@goK31jJAM^4e9x< z2?Y%qbyJJVnv1G?%UY)-bX+LtI8ZR-Lcxp&4Gj|-yJodbo_a5AS^yr2I7Zx1&zu~}x4JZC@xbXkLjsph|95{UV$mx^k4ji~};KYT~ zXD?j4a_#!{8wYOuzwqGygBKqjy!ij%!~YK;@c+Y)|NnvL|9`OOMv2i7z!w6FKUtU= z7(5wtK#D+lf`MZ;!(3ogmQgH Vp#uXWM}duu&yEd=jf{*8)&Tr^#vK3v diff --git a/public/tiny_mce/plugins/insertdatetime/langs/cs.js b/public/tiny_mce/plugins/insertdatetime/langs/cs.js deleted file mode 100644 index 4b674eb..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/cs.js +++ /dev/null @@ -1,8 +0,0 @@ -// CS lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Vložit datum'; -tinyMCELang['lang_inserttime_desc'] = 'Vložit èas'; -tinyMCELang['lang_inserttime_months_long'] = new Array('Leden','Únor','Bøezen','Duben','Kvìten','Èerven','Èervenec','Srpen','Záøí','Øíjen','Listopad','Prosinec'); -tinyMCELang['lang_inserttime_months_short'] = new Array('Led','Úno','Bøe','Dub','Kvì','Èrv','Èvc','Srp','Záø','Øíj','Lis','Pro'); -tinyMCELang['lang_inserttime_day_long'] = new Array('Nedìle','Pondìlí','Úterý','Støeda','Ètvrtek','Pátek','Sobota','Nedìle'); -tinyMCELang['lang_inserttime_day_short'] = new Array('Ne','Po','Út','St','Èt','Pá','So','Ne'); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/de.js b/public/tiny_mce/plugins/insertdatetime/langs/de.js deleted file mode 100644 index 7df43c5..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/de.js +++ /dev/null @@ -1,8 +0,0 @@ -// DE lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Datum einfügen'; -tinyMCELang['lang_inserttime_desc'] = 'Zeit einfügen'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Feb", "M\u00e4r", "Apr", "Mai", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"); -tinyMCELang['lang_inserttime_day_short'] = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/el.js b/public/tiny_mce/plugins/insertdatetime/langs/el.js deleted file mode 100644 index 07addfc..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/el.js +++ /dev/null @@ -1,8 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_insertdate_desc'] = 'ÅéóáãùãÞ çìåñïìçíßáò'; -tinyMCELang['lang_inserttime_desc'] = 'ÅéóáãùãÞ þñáò'; -tinyMCELang['lang_inserttime_months_long'] = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/en.js b/public/tiny_mce/plugins/insertdatetime/langs/en.js deleted file mode 100644 index e203265..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/en.js +++ /dev/null @@ -1,8 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Insert date'; -tinyMCELang['lang_inserttime_desc'] = 'Insert time'; -tinyMCELang['lang_inserttime_months_long'] = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/fa.js b/public/tiny_mce/plugins/insertdatetime/langs/fa.js deleted file mode 100644 index 9a707bb..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/fa.js +++ /dev/null @@ -1,9 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_insertdate_desc'] = 'اÙزودن تاریخ'; -tinyMCELang['lang_inserttime_desc'] = 'اÙزودن زمان'; diff --git a/public/tiny_mce/plugins/insertdatetime/langs/fr.js b/public/tiny_mce/plugins/insertdatetime/langs/fr.js deleted file mode 100644 index e583a73..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/fr.js +++ /dev/null @@ -1,8 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_insertdate_desc'] = 'Insèrer la date'; -tinyMCELang['lang_inserttime_desc'] = 'Insèrer l\'heure'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Dec"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Lun", "Mar", "Mer", "Jeu", "Thu", "Ven", "Sam", "Dim"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/fr_ca.js b/public/tiny_mce/plugins/insertdatetime/langs/fr_ca.js deleted file mode 100644 index 235b25b..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/fr_ca.js +++ /dev/null @@ -1,8 +0,0 @@ -// CAN_FR lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Insérer la date'; -tinyMCELang['lang_inserttime_desc'] = 'Insérer l\'heure'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Dec"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Lun", "Mar", "Mer", "Jeu", "Thu", "Ven", "Sam", "Dim"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/it.js b/public/tiny_mce/plugins/insertdatetime/langs/it.js deleted file mode 100644 index a96b2cb..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/it.js +++ /dev/null @@ -1,8 +0,0 @@ -// IT lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Inserisci data'; -tinyMCELang['lang_inserttime_desc'] = 'Inserisci ora'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre", "Ottobre", "Novembre", "Dicembre"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/ko.js b/public/tiny_mce/plugins/insertdatetime/langs/ko.js deleted file mode 100644 index a2ea29d..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/ko.js +++ /dev/null @@ -1,8 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_insertdate_desc'] = '³¯Â¥ ³Ö±â'; -tinyMCELang['lang_inserttime_desc'] = '½Ã°£ ³Ö±â'; -tinyMCELang['lang_inserttime_months_long'] = new Array("1¿ù", "2¿ù", "3¿ù", "4¿ù", "5¿ù", "6¿ù", "7¿ù", "8¿ù", "9¿ù", "10¿ù", "11¿ù", "12¿ù"); -tinyMCELang['lang_inserttime_months_short'] = new Array("1¿ù", "2¿ù", "3¿ù", "4¿ù", "5¿ù", "6¿ù", "7¿ù", "8¿ù", "9¿ù", "10¿ù", "11¿ù", "12¿ù"); -tinyMCELang['lang_inserttime_day_long'] = new Array("ÀÏ¿äÀÏ", "¿ù¿äÀÏ", "È­¿äÀÏ", "¼ö¿äÀÏ", "¸ñ¿äÀÏ", "±Ý¿äÀÏ", "Åä¿äÀÏ", "ÀÏ¿äÀÏ"); -tinyMCELang['lang_inserttime_day_short'] = new Array("ÀÏ", "¿ù", "È­", "¼ö", "¸ñ", "±Ý", "Åä", "ÀÏ"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/pl.js b/public/tiny_mce/plugins/insertdatetime/langs/pl.js deleted file mode 100644 index 1d7d497..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/pl.js +++ /dev/null @@ -1,9 +0,0 @@ -// PL lang variables - - -tinyMCELang['lang_insertdate_desc'] = 'Wstaw aktualnÄ… datÄ™'; -tinyMCELang['lang_inserttime_desc'] = 'Wstaw aktualny czas'; -tinyMCELang['lang_inserttime_months_long'] = new Array("StyczeÅ„", "Luty", "Marzec", "KwiecieÅ„", "Maj", "Czerwiec", "Lipiec", "SierpieÅ„", "WrzesieÅ„", "Październik", "Listopad", "GrudzieÅ„"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Stcz", "Lut", "Mar", "Kwi", "Maj", "Czer", "Lip", "Sier", "Wrze", "Paź", "List", "Grudz"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Niedziela", "PoniedziaÅ‚ek", "Wtorek", "Åšroda", "Czwartek", "PiÄ…tek", "Sobota", "Niedziela"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Nie", "Pon", "Wto", "Åšro", "Czw", "Pia", "Sob", "Nie"); \ No newline at end of file diff --git a/public/tiny_mce/plugins/insertdatetime/langs/pt_br.js b/public/tiny_mce/plugins/insertdatetime/langs/pt_br.js deleted file mode 100644 index 5138c21..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/pt_br.js +++ /dev/null @@ -1,8 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Inserir data'; -tinyMCELang['lang_inserttime_desc'] = 'Inserir hora'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Domindo", "Segunda-Feira", "Terça-Feira", "Quarta-Feira", "Quinta-Feira", "Sexta-Feira", "Sábado", "Domingo"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/sv.js b/public/tiny_mce/plugins/insertdatetime/langs/sv.js deleted file mode 100644 index d128dd0..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/sv.js +++ /dev/null @@ -1,8 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_insertdate_desc'] = 'Klistra in datum'; -tinyMCELang['lang_inserttime_desc'] = 'Klistra in tid'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Januari", "Februari", "Mars", "April", "Maj", "Juni", "Juli", "Augusti", "September", "Oktober", "November", "December"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Jan","Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"); -tinyMCELang['lang_inserttime_day_long'] = new Array("Söndag", "Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"); -tinyMCELang['lang_inserttime_day_short'] = new Array("Sön", "Mån", "Tis", "Ons", "Tor", "Fre", "Lör", "Sön"); diff --git a/public/tiny_mce/plugins/insertdatetime/langs/zh_cn.js b/public/tiny_mce/plugins/insertdatetime/langs/zh_cn.js deleted file mode 100644 index 172c099..0000000 --- a/public/tiny_mce/plugins/insertdatetime/langs/zh_cn.js +++ /dev/null @@ -1,9 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_insertdate_desc'] = '²åÈ뵱ǰÈÕÆÚ'; -tinyMCELang['lang_inserttime_desc'] = '²åÈ뵱ǰʱ¼ä'; -tinyMCELang['lang_inserttime_months_long'] = new Array("Ò»Ô·Ý", "¶þÔ·Ý", "ÈýÔ·Ý", "ËÄÔ·Ý", "ÎåÔ·Ý", "ÁùÔ·Ý", "ÆßÔ·Ý", "°ËÔ·Ý", "¾ÅÔ·Ý", "ʮԷÝ", "ʮһÔ·Ý", "Ê®¶þÔ·Ý"); -tinyMCELang['lang_inserttime_months_short'] = new Array("Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ", "ËÄÔÂ", "ÎåÔÂ", "ÁùÔÂ", "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ", "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"); -tinyMCELang['lang_inserttime_day_long'] = new Array("ÐÇÆÚÈÕ", "ÐÇÆÚÒ»", "ÐÇÆÚ¶þ", "ÐÇÆÚÈý", "ÐÇÆÚËÄ", "ÐÇÆÚÎå", "ÐÇÆÚÁù", "ÐÇÆÚÈÕ"); -tinyMCELang['lang_inserttime_day_short'] = new Array("ÖÜÈÕ", "ÖÜÒ»", "Öܶþ", "ÖÜÈý", "ÖÜËÄ", "ÖÜÎå", "ÖÜÁù", "ÖÜÈÕ"); diff --git a/public/tiny_mce/plugins/insertdatetime/readme.txt b/public/tiny_mce/plugins/insertdatetime/readme.txt deleted file mode 100644 index 6399d9e..0000000 --- a/public/tiny_mce/plugins/insertdatetime/readme.txt +++ /dev/null @@ -1,35 +0,0 @@ - InsertDateTime plugin for TinyMCE ------------------------------------ - -Installation instructions: - * Copy the insertdatetime directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "insertdatetime". - * Add the insertdate or inserttime button name to button list, example: theme_advanced_buttons3_add : "insertdate,inserttime". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "insertdatetime", - theme_advanced_buttons3_add : "insertdate,inserttime", - plugin_insertdate_dateFormat : "%Y-%m-%d", - plugin_insertdate_timeFormat : "%H:%M:%S" - }); - -Configuration: - plugin_insertdate_dateFormat - Format that the date is output as. Defaults to: "%Y-%m-%d". - Replacement variables: - %y - year as a decimal number without a century (range 00 to 99) - %Y - year as a decimal number including the century - %d - day of the month as a decimal number (range 01 to 31) - %m - month as a decimal number (range 01 to 12) - %D - same as %m/%d/%y - %r - time in a.m. and p.m. notation - %H - hour as a decimal number using a 24-hour clock (range 00 to 23) - %I - hour as a decimal number using a 12-hour clock (range 01 to 12) - %M - minute as a decimal number (range 00-59) - %S - second as a decimal number (range 00-59) - %p - either `am' or `pm' according to the given time value - %% - a literal `%' character - - plugin_insertdate_timeFormat - Format that the time is output as. Defaults to: "%H:%M:%S". diff --git a/public/tiny_mce/plugins/linkattach/attachment.htm b/public/tiny_mce/plugins/linkattach/attachment.htm deleted file mode 100644 index 673377d..0000000 --- a/public/tiny_mce/plugins/linkattach/attachment.htm +++ /dev/null @@ -1,448 +0,0 @@ - - -{$lang_insert_attachment_title} - - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_attachment_title}
{$lang_insert_attachment_url}: - - - - -
{$lang_theme_insert_link_titlefield}:
{$lang_insert_attachment_target}: - - - - - - - - - - - - - - - - - - - - - -
 ({$lang_insert_attachment_target_same})
 ({$lang_insert_attachment_target_parent})
 ({$lang_insert_attachment_target_top})
 ({$lang_insert_attachment_target_blank})
- - - - - - -
 
-
- - - - - - - - - - - - - - - - - -
{$lang_insert_attachment_popup_url}:  - - - - -
{$lang_insert_attachment_popup_name}: 
{$lang_insert_attachment_popup_size}:  - x - px -
{$lang_insert_attachment_popup_position}:  - / - (c /c = center) -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  
 
   
 
-
-
- - diff --git a/public/tiny_mce/plugins/linkattach/editor_plugin.js b/public/tiny_mce/plugins/linkattach/editor_plugin.js deleted file mode 100644 index 1b2fd17..0000000 --- a/public/tiny_mce/plugins/linkattach/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('linkattach','en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl');function TinyMCE_linkattach_getInsertAttachmentTemplate(){var template=new Array();template['file']='../../plugins/linkattach/attachment.htm';template['width']=400;template['height']=420;template['width']+=tinyMCE.getLang('lang_insert_attachment_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_attachment_delta_height',0);return template;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/linkattach/editor_plugin_src.js b/public/tiny_mce/plugins/linkattach/editor_plugin_src.js deleted file mode 100644 index 89e2028..0000000 --- a/public/tiny_mce/plugins/linkattach/editor_plugin_src.js +++ /dev/null @@ -1,18 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('linkattach', 'en,de,sv,zh_cn,cs,fa,fr_ca,fr,pl'); - -/** - * Insert link template function. - */ -function TinyMCE_linkattach_getInsertAttachmentTemplate() { - var template = new Array(); - template['file'] = '../../plugins/linkattach/attachment.htm'; - template['width'] = 400; - template['height'] = 420; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_attachment_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_attachment_delta_height', 0); - - return template; -} \ No newline at end of file diff --git a/public/tiny_mce/plugins/linkattach/langs/en.js b/public/tiny_mce/plugins/linkattach/langs/en.js deleted file mode 100644 index cc6441c..0000000 --- a/public/tiny_mce/plugins/linkattach/langs/en.js +++ /dev/null @@ -1,20 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_insert_attachment_target_same'] = 'Open in this window / frame'; -tinyMCELang['lang_insert_attachment_target_parent'] = 'Open in parent window / frame'; -tinyMCELang['lang_insert_attachment_target_top'] = 'Open in top frame (replaces all frames)'; -tinyMCELang['lang_insert_attachment_target_blank'] = 'Open in new window'; -tinyMCELang['lang_insert_attachment_target_named'] = 'Open in the window'; -tinyMCELang['lang_insert_attachment_popup'] = 'JS-Popup'; -tinyMCELang['lang_insert_attachment_popup_url'] = 'Popup URL'; -tinyMCELang['lang_insert_attachment_popup_name'] = 'Window name'; -tinyMCELang['lang_insert_attachment_popup_return'] = 'insert \'return false\''; -tinyMCELang['lang_insert_attachment_popup_scrollbars'] = 'Show scrollbars'; -tinyMCELang['lang_insert_attachment_popup_statusbar'] = 'Show statusbar'; -tinyMCELang['lang_insert_attachment_popup_toolbar'] = 'Show toolbars'; -tinyMCELang['lang_insert_attachment_popup_menubar'] = 'Show menubar'; -tinyMCELang['lang_insert_attachment_popup_location'] = 'Show locationbar'; -tinyMCELang['lang_insert_attachment_popup_resizable'] = 'Make window resizable'; -tinyMCELang['lang_insert_attachment_popup_size'] = 'Size'; -tinyMCELang['lang_insert_attachment_popup_position'] = 'Position (X/Y)'; -tinyMCELang['lang_insert_attachment_popup_missingtarget'] = 'Please insert a name for the target or choose another option.'; diff --git a/public/tiny_mce/plugins/paste/blank.htm b/public/tiny_mce/plugins/paste/blank.htm deleted file mode 100644 index 104b550..0000000 --- a/public/tiny_mce/plugins/paste/blank.htm +++ /dev/null @@ -1,15 +0,0 @@ - - - -blank_page - - - - - - - diff --git a/public/tiny_mce/plugins/paste/editor_plugin.js b/public/tiny_mce/plugins/paste/editor_plugin.js deleted file mode 100644 index 5aa44cb..0000000 --- a/public/tiny_mce/plugins/paste/editor_plugin.js +++ /dev/null @@ -1,25 +0,0 @@ -// Tiny MCE Paste Plugin -// Updated by speednet 25 May 2005 - IE converts and pastes without opening popup window - tinyMCE.importPluginLanguagePack('paste','en,sv,cs');function TinyMCE_paste_getControlHTML(control_name){switch(control_name){case "pastetext":return '';case "pasteword":return '';case "selectall":return '';}return '';}function TinyMCE_paste_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mcePasteText":if(tinyMCE.isMSIE&&!tinyMCE.getParam('paste_use_dialog',false))TinyMCE_paste__insertText(clipboardData.getData("Text"),true);else{var template=new Array();template['file']='../../plugins/paste/pastetext.htm';template['width']=450;template['height']=400;var plain_text="";tinyMCE.openWindow(template,{editor_id:editor_id,plain_text:plain_text,resizable:"yes",scrollbars:"no",mceDo:'insert'});}return true;case "mcePasteWord":if(tinyMCE.isMSIE&&!tinyMCE.getParam('paste_use_dialog',false)){var html=TinyMCE_paste__clipboardHTML();if(html&&html.length>0)TinyMCE_paste__insertWordContent(html);}else{var template=new Array();template['file']='../../plugins/paste/pasteword.htm';template['width']=450;template['height']=400;var plain_text="";tinyMCE.openWindow(template,{editor_id:editor_id,plain_text:plain_text,resizable:"yes",scrollbars:"no",mceDo:'insert'});}return true;case "mceSelectAll":tinyMCE.execInstanceCommand(editor_id,'selectall');return true;}return false;}function TinyMCE_paste__insertText(content,bLinebreaks){if(content&&content.length>0){if(bLinebreaks){if(tinyMCE.getParam("plaintext_create_paragraphs",true)){content=tinyMCE.regexpReplace(content,"\r\n\r\n","

","gi");content=tinyMCE.regexpReplace(content,"\r\r","

","gi");content=tinyMCE.regexpReplace(content,"\n\n","

","gi");if((pos=content.indexOf('

'))!=-1){tinyMCE.execCommand("Delete");var node=tinyMCE.selectedInstance.getFocusElement();var breakElms=new Array();do{if(node.nodeType==1){if(node.nodeName=="TD"||node.nodeName=="BODY")break;breakElms[breakElms.length]=node;}}while(node=node.parentNode);var before="",after="

";before+=content.substring(0,pos);for(var i=0;i";after+="<"+breakElms[(breakElms.length-1)-i].nodeName+">";}before+="

";content=before+content.substring(pos+7)+after;}}content=tinyMCE.regexpReplace(content,"\r\n","
","gi");content=tinyMCE.regexpReplace(content,"\r","
","gi");content=tinyMCE.regexpReplace(content,"\n","
","gi");}tinyMCE.execCommand("mceInsertRawHTML",false,content);}}function TinyMCE_paste__insertWordContent(content){if(content&&content.length>0){content=content.replace(new RegExp('<(!--)([^>]*)(--)>','g'),"");content=content.replace(/<\/?span[^>]*>/gi,"");content=content.replace(/<(\w[^>]*)style="([^"]*)"([^>]*)/gi, "<$1$3"); - content = content.replace(/<\/?font[^>]*>/gi, ""); - content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); - content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); - content = content.replace(/<\\?\?xml[^>]*>/gi, ""); - content = content.replace(/<\/?\w+:[^>]*>/gi, ""); - content = content.replace(/\/? */gi, ""); - content = content.replace('

 

', '' ,'g'); - - if (!tinyMCE.settings['force_p_newlines']) { - content = content.replace('', '' ,'gi'); - content = content.replace('

', '

' ,'gi'); - } - - if (!tinyMCE.isMSIE && !tinyMCE.settings['force_p_newlines']) { - content = content.replace(/<\/?p[^>]*>/gi, ""); - } - - content = content.replace(/<\/?div[^>]*>/gi, ""); - - // Insert cleaned content - tinyMCE.execCommand("mceAddUndoLevel"); - tinyMCE.execCommand("mceInsertContent",false,content);}}function TinyMCE_paste__clipboardHTML(){var div=document.getElementById('_TinyMCE_clipboardHTML');if(!div){var div=document.createElement('DIV');div.id='_TinyMCE_clipboardHTML';with(div.style){visibility='hidden';overflow='hidden';position='absolute';width=1;height=1;}document.body.appendChild(div);}div.innerHTML='';var rng=document.body.createTextRange();rng.moveToElementText(div);rng.execCommand('Paste');var html=div.innerHTML;div.innerHTML='';return html;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/paste/editor_plugin_src.js b/public/tiny_mce/plugins/paste/editor_plugin_src.js deleted file mode 100644 index 96f00bb..0000000 --- a/public/tiny_mce/plugins/paste/editor_plugin_src.js +++ /dev/null @@ -1,174 +0,0 @@ -// Tiny MCE Paste Plugin -// Updated by speednet 25 May 2005 - IE converts and pastes without opening popup window - -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('paste', 'en,sv,cs'); - -function TinyMCE_paste_getControlHTML(control_name) { - switch (control_name) { - case "pastetext": - return ''; - - case "pasteword": - return ''; - - case "selectall": - return ''; - } - - return ''; -} - -function TinyMCE_paste_execCommand(editor_id, element, command, user_interface, value) { - switch (command) { - case "mcePasteText": - if (tinyMCE.isMSIE && !tinyMCE.getParam('paste_use_dialog', false)) - TinyMCE_paste__insertText(clipboardData.getData("Text"), true); - else { - var template = new Array(); - template['file'] = '../../plugins/paste/pastetext.htm'; // Relative to theme - template['width'] = 450; - template['height'] = 400; - var plain_text = ""; - tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", mceDo : 'insert'}); - } - - return true; - - case "mcePasteWord": - if (tinyMCE.isMSIE && !tinyMCE.getParam('paste_use_dialog', false)) { - var html = TinyMCE_paste__clipboardHTML(); - - if (html && html.length > 0) - TinyMCE_paste__insertWordContent(html); - } else { - var template = new Array(); - template['file'] = '../../plugins/paste/pasteword.htm'; // Relative to theme - template['width'] = 450; - template['height'] = 400; - var plain_text = ""; - tinyMCE.openWindow(template, {editor_id : editor_id, plain_text: plain_text, resizable : "yes", scrollbars : "no", mceDo : 'insert'}); - } - - return true; - - case "mceSelectAll": - tinyMCE.execInstanceCommand(editor_id, 'selectall'); - return true; - - } - - // Pass to next handler in chain - return false; -} - -function TinyMCE_paste__insertText(content, bLinebreaks) { - - if (content && content.length > 0) { - if (bLinebreaks) { - // Special paragraph treatment - if (tinyMCE.getParam("plaintext_create_paragraphs", true)) { - content = tinyMCE.regexpReplace(content, "\r\n\r\n", "

", "gi"); - content = tinyMCE.regexpReplace(content, "\r\r", "

", "gi"); - content = tinyMCE.regexpReplace(content, "\n\n", "

", "gi"); - - // Has paragraphs - if ((pos = content.indexOf('

')) != -1) { - tinyMCE.execCommand("Delete"); - - var node = tinyMCE.selectedInstance.getFocusElement(); - - // Get list of elements to break - var breakElms = new Array(); - - do { - if (node.nodeType == 1) { - // Don't break tables and break at body - if (node.nodeName == "TD" || node.nodeName == "BODY") - break; - - breakElms[breakElms.length] = node; - } - } while(node = node.parentNode); - - var before = "", after = "

"; - before += content.substring(0, pos); - - for (var i=0; i"; - after += "<" + breakElms[(breakElms.length-1)-i].nodeName + ">"; - } - - before += "

"; - content = before + content.substring(pos+7) + after; - } - } - - content = tinyMCE.regexpReplace(content, "\r\n", "
", "gi"); - content = tinyMCE.regexpReplace(content, "\r", "
", "gi"); - content = tinyMCE.regexpReplace(content, "\n", "
", "gi"); - } - - tinyMCE.execCommand("mceInsertRawHTML", false, content); - } -} - -function TinyMCE_paste__insertWordContent(content) { - - if (content && content.length > 0) { - // Cleanup Word content - content = content.replace(new RegExp('<(!--)([^>]*)(--)>', 'g'), ""); // Word comments - content = content.replace(/<\/?span[^>]*>/gi, ""); - content = content.replace(/<(\w[^>]*) style="([^"]*)"([^>]*)/gi, "<$1$3"); - content = content.replace(/<\/?font[^>]*>/gi, ""); - content = content.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); - content = content.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); - content = content.replace(/<\\?\?xml[^>]*>/gi, ""); - content = content.replace(/<\/?\w+:[^>]*>/gi, ""); - content = content.replace(/\/? */gi, ""); - content = content.replace('

 

', '' ,'g'); - - if (!tinyMCE.settings['force_p_newlines']) { - content = content.replace('', '' ,'gi'); - content = content.replace('

', '

' ,'gi'); - } - - if (!tinyMCE.isMSIE && !tinyMCE.settings['force_p_newlines']) { - content = content.replace(/<\/?p[^>]*>/gi, ""); - } - - content = content.replace(/<\/?div[^>]*>/gi, ""); - - // Insert cleaned content - tinyMCE.execCommand("mceAddUndoLevel"); - tinyMCE.execCommand("mceInsertContent", false, content); - } -} - -function TinyMCE_paste__clipboardHTML() { - var div = document.getElementById('_TinyMCE_clipboardHTML'); - - if (!div) { - var div = document.createElement('DIV'); - div.id = '_TinyMCE_clipboardHTML'; - - with (div.style) { - visibility = 'hidden'; - overflow = 'hidden'; - position = 'absolute'; - width = 1; - height = 1; - } - - document.body.appendChild(div); - } - - div.innerHTML = ''; - var rng = document.body.createTextRange(); - rng.moveToElementText(div); - rng.execCommand('Paste'); - var html = div.innerHTML; - div.innerHTML = ''; - return html; -} - diff --git a/public/tiny_mce/plugins/paste/images/pastetext.gif b/public/tiny_mce/plugins/paste/images/pastetext.gif deleted file mode 100644 index 6b9f93fb068a118f8b0a6dc51d5f61c4fae0e2f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1023 zcmXw2e`p(39RFN%X|6NH?%Isfbt8iabt_W0q8Zb)ogv#4XDI=-7Cf^PwVQ6M2Nnr6 zxgKLn{UZw}NMI1k{bTiyQVyow2wjXI0omv>C)w0c&NVGEYkW*9anEJ@Onxsmo&1_Q7jarhx^T0EgI9vibhINU6so#M2q#4 zbwi&u$#PUt4Ko`hbX}6xS(lMr%0VBv8Xl28?!noDY~kVxUh^)(vB>NGh_HGK`GesGEdoD20p5mNFV8bG$jL>nWwd4y`D9)|5xXWL>vPviz~$ zc*u^BC2rn@Di8)Bc(4TQWED^qyb^dHy6i!VW@jg+I)NG>+B-peL0R6%GPQVm4^(s} zZdmj=p56u>12St)eO z=V0%+-EKey;=qy@cX_tFtM^H~uWZA1`QwKcN{PGfT~ zM2Co3xeufr&NBexcXm4#m@TKh|KyDOGA?EikK;uzeE^zRqj9#FpFs$|EkX1v(E677 zDj@yu3*9oeT6<(H{}7?qpuWW9yc!HY*sLW)k$E}V`Nrz~n3z7!=Bt>LF4ue+k<~oS zgN8s=(74Nc5?I5UV<7(_LKG@R{1Zr3)E@EkKYKC2E@+KmT|4p^2tieC(VW+|&EPDa zz7E{9i}%2v2K>M0~O-j3h|_H6R(VUBM-mHj6?!d+Yvx{uE1u1yQ=d&g?L z>)dwlrK_J$ew%b{JGfu?I=S&3zso<8_`c77WV)Syru+Ae69tuP>FG)50ug-H{CIq9 z!%7OmE@b9yu0s{o7W9||A z)GZ#xXPh&4T1L)D>${z?&0)t^WtK)2T>kiGt?PXna zK73g4;lqXn3no0c(eUBLgbODc9^9Dl;l+XrCnkJ&(D30#LP3VZhX)h>e^@Y~BVoae zf)5u09-K({aHHV=hYcTqT246pf3e`f3Wf_a7(VO}xUfLr!w!WH2MiW8D10~(uwh2P zhYJM@CL|o#(2x+}FrlMh!HkBs`s@uWCOlZc@L_|%2cX6Y3?EJud^nKMP!KSoAz{OU zhK2+K2Lpuw2ZMwFhk}HFhJu6%4M0O0HY}Jhp`)Q7A^;d};P9h}Q2fcl$iR@vpaU`m z6ekSqcN;RBnp;}i+B-VCx-3No%+0J2+eVx^psKx_n8sCCJ3g-ZqS#i$h3C zh($#5T62)4xwmJS7z>9miyVuf&hw^JM<-9WP&P)M3JC$F!|j5a9CI@-z4sCoU^J*$ z;n3vR%)rU+dNSz<*F+_Lrhp$C8dy4o8AAk=npwKNb!3@D1QZ)s*fUkQ3I&DP&WHE1m>(nQ*JeFWoB9EWXr>~3uAP)WSWsu z?z(uJ*$g{pf^0qnXQdt8(urfG%^(C_eel6bkvKM&jZ|Fzv_U$#bqII;cJGz3kMH4} z^PTfM=l45&9VgnGUhOf#guem%5qm_8-2SN&JR8hClI_iQ-(c2z+M8R+Nt;rqr!z60 zNH0lT-<&X>TUe2#4T(F+am}1>aLxa&KYb@18IA}Sh03}tKa+hP-}SGr&n?Nmi`j)0 z**Cl<>vp6UE5W|t+9SE;Sc~^9ue2$9J>JA*V&P{g_=S}HL#k}Z+%e97-ak4#>bsQf z9bN;v0Mv~83%Vo=L9s0qwGNCxbpp0113HFU#U|5kl1~y&Ai%lkeTH_$YL^9s%<*_N zO^fyQYO&D`B+VKQk6&mM0agj;`M{U+Pe1QkrVvWG-Fz`=X4Q1$!;hRfkSs+)I!vWNKZZfYhwU2hom#A%Xandw=GrU}va$08 zWLR`Shci^v09w?zq<(etLnU*TMF_t|B?gbh6;=pgCX8GGT^eM{4!#IVvwLst#4?~l z!nc_GlYWIoOjW1}|4~HKWo$Kq71gi>_+LYS!FIMrL1CfYa}7hxUBu!L1e~;zO^|Sz z2+Ct-2o9Jv9FSWe8{6blnkZ(KAz<}W#S&O;xXd#+x*?uY`o7u3ZElsqtSYX{@^*3k z3_J3g5>Md*f45|gYa1pR5C@0|A~>z@A4R#f%!YveO#f{M$%-T-eC*}(g;I&t@DKfN zMJphd6&%!N(CQ$f_=6y1DC?*yNm;2KdwKB+Xhorr4RI&vUepJG_h9Tf58FRD(T;bp zZ)*poEDDFz`PDzMQ-2Rmz11~6F?(6Rr_nb*o!6W9o^BIL1FO;94b|VedOld4v+UNJ zI-UIF6=PlJSjx2&zW3Sw!~UCrSzW}q@43K(?$?hGGNvl-!N|Z&#B{LTWB;DIQH8n# zE!_{}6URq)afy*|KXbL_`4_Jqj^)F<^e - -{$lang_paste_text_desc} - - - - - - - - -
- - - - - - - - - - - - - - - -
{$lang_paste_text_desc} - -
{$lang_paste_text_title}
- -
-
- - \ No newline at end of file diff --git a/public/tiny_mce/plugins/paste/pasteword.htm b/public/tiny_mce/plugins/paste/pasteword.htm deleted file mode 100644 index 0e1e811..0000000 --- a/public/tiny_mce/plugins/paste/pasteword.htm +++ /dev/null @@ -1,111 +0,0 @@ - - -{$lang_paste_word_desc} - - - - - - - - - -
- - - - - - - - - - - - - - -
{$lang_paste_word_desc}
{$lang_paste_word_title}
- -
-
- - \ No newline at end of file diff --git a/public/tiny_mce/plugins/paste/readme.txt b/public/tiny_mce/plugins/paste/readme.txt deleted file mode 100644 index d261ff3..0000000 --- a/public/tiny_mce/plugins/paste/readme.txt +++ /dev/null @@ -1,28 +0,0 @@ - Paste plugin for TinyMCE ------------------------------- - -This plugin adds paste as plain text and paste from Word icons to TinyMCE. This plugin was developed by Ryan Demmer and modified by -the TinyMCE crew to be more general and some extra features where added. - -On 25 May 2005, this plugin was modified by speednet: IE now pastes directly into the editor, bypassing the extra steps of opening the Insert box, selecting options, and clicking Insert. Speednet also added the Select All command, which highlights all the content in the editor when the user clicks the toolbar button. (Other miscellaneous cleanup also.) - - -Installation instructions: - * Add plugin to TinyMCE plugin option list example: plugins : "paste". - * Add the plaintext button name to button list, example: theme_advanced_buttons3_add : "pastetext,pasteword,selectall". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "paste", - theme_advanced_buttons3_add : "pastetext,pasteword,selectall", - paste_create_paragraphs : false, - paste_use_dialog : true - }); - -Options: - [paste_create_paragraphs] - If enabled double linefeeds are converted to paragraph - elements when using the plain text dialog. This is enabled by default. - [paste_use_dialog] - MSIE specific option, if you set this to true both Mozilla and MSIE will present a paste dialog. - if you set it to false pasting in MSIE will be done directly. This option is set to false by default. diff --git a/public/tiny_mce/plugins/preview/editor_plugin.js b/public/tiny_mce/plugins/preview/editor_plugin.js deleted file mode 100644 index 6815de6..0000000 --- a/public/tiny_mce/plugins/preview/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('preview','cs,de,el,en,fr_ca,it,ko,pt,sv,zh_cn,fa,fr,pl,pt_br');function TinyMCE_preview_getControlHTML(control_name){switch(control_name){case "preview":return '';}return "";}function TinyMCE_preview_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mcePreview":var previewPage=tinyMCE.getParam("plugin_preview_pageurl",null);var previewWidth=tinyMCE.getParam("plugin_preview_width","550");var previewHeight=tinyMCE.getParam("plugin_preview_height","600");if(previewPage){var template=new Array();template['file']=previewPage;template['width']=previewWidth;template['height']=previewHeight;tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"yes",content:tinyMCE.getContent(),content_css:tinyMCE.getParam("content_css")});}else{var win=window.open("","mcePreview","menubar=no,toolbar=no,scrollbars=yes,resizable=yes,left=20,top=20,width="+previewWidth+",height="+previewHeight);var html="";html+='';html+='';html+='';html+=''+tinyMCE.getLang('lang_preview_desc')+'';html+='';html+='';html+='';html+='';html+=tinyMCE.getContent();html+='';html+='';win.document.write(html);win.document.close();}return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/preview/editor_plugin_src.js b/public/tiny_mce/plugins/preview/editor_plugin_src.js deleted file mode 100644 index 156a226..0000000 --- a/public/tiny_mce/plugins/preview/editor_plugin_src.js +++ /dev/null @@ -1,61 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('preview', 'cs,de,el,en,fr_ca,it,ko,pt,sv,zh_cn,fa,fr,pl,pt_br'); - -/** - * Returns the HTML contents of the preview control. - */ -function TinyMCE_preview_getControlHTML(control_name) { - switch (control_name) { - case "preview": - return ''; - } - - return ""; -} - -/** - * Executes the mcePreview command. - */ -function TinyMCE_preview_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mcePreview": - var previewPage = tinyMCE.getParam("plugin_preview_pageurl", null); - var previewWidth = tinyMCE.getParam("plugin_preview_width", "550"); - var previewHeight = tinyMCE.getParam("plugin_preview_height", "600"); - - // Use a custom preview page - if (previewPage) { - var template = new Array(); - - template['file'] = previewPage; - template['width'] = previewWidth; - template['height'] = previewHeight; - - tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "yes", content : tinyMCE.getContent(), content_css : tinyMCE.getParam("content_css")}); - } else { - var win = window.open("", "mcePreview", "menubar=no,toolbar=no,scrollbars=yes,resizable=yes,left=20,top=20,width=" + previewWidth + ",height=" + previewHeight); - var html = ""; - - html += ''; - html += ''; - html += ''; - html += '' + tinyMCE.getLang('lang_preview_desc') + ''; - html += ''; - html += ''; - html += ''; - html += ''; - html += tinyMCE.getContent(); - html += ''; - html += ''; - - win.document.write(html); - win.document.close(); - } - - return true; - } - - // Pass to next handler in chain - return false; -} diff --git a/public/tiny_mce/plugins/preview/example.html b/public/tiny_mce/plugins/preview/example.html deleted file mode 100644 index c6f1dfb..0000000 --- a/public/tiny_mce/plugins/preview/example.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - -Example of a custom preview page - - - - -Editor contents:
-{$content} - - - diff --git a/public/tiny_mce/plugins/preview/images/preview.gif b/public/tiny_mce/plugins/preview/images/preview.gif deleted file mode 100644 index 4e7900c3192d4eecbd603575b813791536928f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmeH`!D|yi6o)q^Xc_})YAZ;Bq#=h0C5$D9L@(P`G}6l=A`yg6f?^a8bIifRq%Ca@ z)lNdtr57iOq(MYRQQQ^}n`kt)N~eMlw1qKx=yB_*#lyPkpCNvH?;U=(_k(xg;`vxS zH7E^A^HL9xfHDZc1b_-a3Q&@YtUx)5U{XOD1wxp$AtMYk7$S_a7-#^fGT^ez zkV27CM}QE72_i(H0;(M51*Af5W7y#Y$$D0%1Tg}ciZ}*Bl?9azrkHJr^JH$Jh{*ve zSt>omD#dkz877vL63W=}((1EEkE>-`XOvMZc+JWyFKer>mfx^4sq55|S#qjzrs+)M zm=i3lj5A#@Zs?lcey8acZELvR=FPS5&9$w!>s!3dzjeOq9fNlS?--&Zdh8ft#}tNX z^e~M*!`L%TOVd24?f?208W`Sp*d^(vG}1e!_Y;zHTiS5?6O1-yoSxCE8tN+suMD`Z zr)!nguYjW|pbKbuX8q@CZ&_}#d{z>~ICr1_ZqvbwvdPBCh%cFq|G6>g zJ$&c$Layt0?*&sYqJ@5YzTq2MC!5{$hhlKRT>`t+K-V|%U?l##(wKGxFFg(H&Wd}b ix+j2Xc`SD#z?t*f@A8N`A>H5BXFP7FboMVqlNY)G diff --git a/public/tiny_mce/plugins/preview/langs/cs.js b/public/tiny_mce/plugins/preview/langs/cs.js deleted file mode 100644 index 27502b4..0000000 --- a/public/tiny_mce/plugins/preview/langs/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_preview_desc'] = 'Náhled'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/preview/langs/de.js b/public/tiny_mce/plugins/preview/langs/de.js deleted file mode 100644 index e24e9c4..0000000 --- a/public/tiny_mce/plugins/preview/langs/de.js +++ /dev/null @@ -1,3 +0,0 @@ -// DE lang variables by Tobias Heer - -tinyMCELang['lang_preview_desc'] = 'Vorschau'; diff --git a/public/tiny_mce/plugins/preview/langs/el.js b/public/tiny_mce/plugins/preview/langs/el.js deleted file mode 100644 index d63358e..0000000 --- a/public/tiny_mce/plugins/preview/langs/el.js +++ /dev/null @@ -1,3 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_preview_desc'] = 'Ðñïåðéóêüðçóç éóôïóåëßäáò'; diff --git a/public/tiny_mce/plugins/preview/langs/en.js b/public/tiny_mce/plugins/preview/langs/en.js deleted file mode 100644 index d94866d..0000000 --- a/public/tiny_mce/plugins/preview/langs/en.js +++ /dev/null @@ -1,3 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_preview_desc'] = 'Preview'; diff --git a/public/tiny_mce/plugins/preview/langs/fa.js b/public/tiny_mce/plugins/preview/langs/fa.js deleted file mode 100644 index 46877f4..0000000 --- a/public/tiny_mce/plugins/preview/langs/fa.js +++ /dev/null @@ -1,8 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_preview_desc'] = 'پیش نمایش'; diff --git a/public/tiny_mce/plugins/preview/langs/fr.js b/public/tiny_mce/plugins/preview/langs/fr.js deleted file mode 100644 index 18610dc..0000000 --- a/public/tiny_mce/plugins/preview/langs/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_preview_desc'] = 'Prévisualisation'; diff --git a/public/tiny_mce/plugins/preview/langs/fr_ca.js b/public/tiny_mce/plugins/preview/langs/fr_ca.js deleted file mode 100644 index bdab8c9..0000000 --- a/public/tiny_mce/plugins/preview/langs/fr_ca.js +++ /dev/null @@ -1,3 +0,0 @@ -// CAN_FR lang variables - -tinyMCELang['lang_preview_desc'] = 'Prévisualisation'; diff --git a/public/tiny_mce/plugins/preview/langs/it.js b/public/tiny_mce/plugins/preview/langs/it.js deleted file mode 100644 index 7a13b51..0000000 --- a/public/tiny_mce/plugins/preview/langs/it.js +++ /dev/null @@ -1,3 +0,0 @@ -// IT lang variables - -tinyMCELang['lang_preview_desc'] = 'Anteprima'; diff --git a/public/tiny_mce/plugins/preview/langs/ko.js b/public/tiny_mce/plugins/preview/langs/ko.js deleted file mode 100644 index b3bb1f8..0000000 --- a/public/tiny_mce/plugins/preview/langs/ko.js +++ /dev/null @@ -1,3 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_preview_desc'] = '¹Ì¸®º¸±â'; diff --git a/public/tiny_mce/plugins/preview/langs/pl.js b/public/tiny_mce/plugins/preview/langs/pl.js deleted file mode 100644 index 6998539..0000000 --- a/public/tiny_mce/plugins/preview/langs/pl.js +++ /dev/null @@ -1,4 +0,0 @@ -// PL lang variables - - -tinyMCELang['lang_preview_desc'] = 'PodglÄ…d'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/preview/langs/pt.js b/public/tiny_mce/plugins/preview/langs/pt.js deleted file mode 100644 index bc7e09d..0000000 --- a/public/tiny_mce/plugins/preview/langs/pt.js +++ /dev/null @@ -1,3 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_preview_desc'] = 'Pré-visualização'; diff --git a/public/tiny_mce/plugins/preview/langs/pt_br.js b/public/tiny_mce/plugins/preview/langs/pt_br.js deleted file mode 100644 index 1a501c6..0000000 --- a/public/tiny_mce/plugins/preview/langs/pt_br.js +++ /dev/null @@ -1,3 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_preview_desc'] = 'Visualizar'; diff --git a/public/tiny_mce/plugins/preview/langs/sv.js b/public/tiny_mce/plugins/preview/langs/sv.js deleted file mode 100644 index 32d5850..0000000 --- a/public/tiny_mce/plugins/preview/langs/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_preview_desc'] = 'Förhandsgranska'; diff --git a/public/tiny_mce/plugins/preview/langs/zh_cn.js b/public/tiny_mce/plugins/preview/langs/zh_cn.js deleted file mode 100644 index 2c8a1a3..0000000 --- a/public/tiny_mce/plugins/preview/langs/zh_cn.js +++ /dev/null @@ -1,3 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@etang.com) - -tinyMCELang['lang_preview_desc'] = 'Ô¤ÀÀ'; diff --git a/public/tiny_mce/plugins/preview/readme.txt b/public/tiny_mce/plugins/preview/readme.txt deleted file mode 100644 index 01ca90c..0000000 --- a/public/tiny_mce/plugins/preview/readme.txt +++ /dev/null @@ -1,23 +0,0 @@ - Preview plugin for TinyMCE ------------------------------------ - -Installation instructions: - * Copy the preview directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "preview". - * Add the preview button name to button list, example: theme_advanced_buttons3_add : "preview". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "preview", - theme_advanced_buttons3_add : "preview", - plugin_preview_width : "500", - plugin_preview_height : "600" - }); - -Configuration: - plugin_preview_width - Preview window width. Defaults to 550. - plugin_preview_height - Preview window height. Defaults to 600. - plugin_preview_pageurl - Custom preview page URL relative from theme - use "../../plugins/preview/example.html" for a example. diff --git a/public/tiny_mce/plugins/print/editor_plugin.js b/public/tiny_mce/plugins/print/editor_plugin.js deleted file mode 100644 index 59c2180..0000000 --- a/public/tiny_mce/plugins/print/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import theme specific language pack */ - tinyMCE.importPluginLanguagePack('print','en,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs');function TinyMCE_print_getControlHTML(control_name){switch(control_name){case "print":return '';}return "";}function TinyMCE_print_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mcePrint":tinyMCE.getInstanceById(editor_id).contentWindow.print();return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/print/editor_plugin_src.js b/public/tiny_mce/plugins/print/editor_plugin_src.js deleted file mode 100644 index 423ba0c..0000000 --- a/public/tiny_mce/plugins/print/editor_plugin_src.js +++ /dev/null @@ -1,26 +0,0 @@ -/* Import theme specific language pack */ -tinyMCE.importPluginLanguagePack('print', 'en,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs'); - -function TinyMCE_print_getControlHTML(control_name) { - switch (control_name) { - case "print": - return ''; - } - - return ""; -} - -/** - * Executes the search/replace commands. - */ -function TinyMCE_print_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mcePrint": - tinyMCE.getInstanceById(editor_id).contentWindow.print(); - return true; - } - - // Pass to next handler in chain - return false; -} diff --git a/public/tiny_mce/plugins/print/images/print.gif b/public/tiny_mce/plugins/print/images/print.gif deleted file mode 100644 index 1172f4db8ba0ed5826f859a9f702b2364b26d2f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1013 zcmZ?wbhEHb6k!lyXlDQc1CIoUfC7hzf&d^&0HTI~jE2aJwuFp^go1|j^45fc2?-Sw z7#1)H{AVa=m{8ELprB*HhW`u=9Sd4}7dK2;&@f>`>y%9mGd4_`wP?bO4O8Z9>RGsL z!h#Je*6!M{eb0mi2NtY2uwVlaUD&YUz=j}L@Zs>0gNKiuICT8< z;gjc1o<4El#D&XO?_Iuj|Mu-WckkajaN@y%3l9$5_;BIEgNqj*T(|*5A1*xj@BoNj z0MY*kA3i+z@c#n{{QvOd|9>F*{~zqFQDQU%2#0{;PZnkd26qM>kWx^dVBomK(9a>` zv0=f%W)5Mkm;r8R3(~D z9PM^#Zifdt2cqM|t!627}i8pPQmWegHZ4=^zHF|%AauwmQV K+g!{{4AuY;^xhEw diff --git a/public/tiny_mce/plugins/print/langs/cs.js b/public/tiny_mce/plugins/print/langs/cs.js deleted file mode 100644 index 2c373b4..0000000 --- a/public/tiny_mce/plugins/print/langs/cs.js +++ /dev/null @@ -1,3 +0,0 @@ -// CS lang variables - -tinyMCELang['lang_print_desc'] = 'Tisk'; diff --git a/public/tiny_mce/plugins/print/langs/de.js b/public/tiny_mce/plugins/print/langs/de.js deleted file mode 100644 index b3913d0..0000000 --- a/public/tiny_mce/plugins/print/langs/de.js +++ /dev/null @@ -1,3 +0,0 @@ -// DE lang variables - -tinyMCELang['lang_print_desc'] = 'Drucken'; diff --git a/public/tiny_mce/plugins/print/langs/en.js b/public/tiny_mce/plugins/print/langs/en.js deleted file mode 100644 index fcaa4ef..0000000 --- a/public/tiny_mce/plugins/print/langs/en.js +++ /dev/null @@ -1,3 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_print_desc'] = 'Print'; diff --git a/public/tiny_mce/plugins/print/langs/fa.js b/public/tiny_mce/plugins/print/langs/fa.js deleted file mode 100644 index 3850104..0000000 --- a/public/tiny_mce/plugins/print/langs/fa.js +++ /dev/null @@ -1,8 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_print_desc'] = 'چاپ'; diff --git a/public/tiny_mce/plugins/print/langs/fr.js b/public/tiny_mce/plugins/print/langs/fr.js deleted file mode 100644 index 46e5397..0000000 --- a/public/tiny_mce/plugins/print/langs/fr.js +++ /dev/null @@ -1,3 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_print_desc'] = 'Imprimer'; diff --git a/public/tiny_mce/plugins/print/langs/fr_ca.js b/public/tiny_mce/plugins/print/langs/fr_ca.js deleted file mode 100644 index 9245867..0000000 --- a/public/tiny_mce/plugins/print/langs/fr_ca.js +++ /dev/null @@ -1,3 +0,0 @@ -// CA_FR lang variables - -tinyMCELang['lang_print_desc'] = 'Imprimer'; diff --git a/public/tiny_mce/plugins/print/langs/pl.js b/public/tiny_mce/plugins/print/langs/pl.js deleted file mode 100644 index e3be100..0000000 --- a/public/tiny_mce/plugins/print/langs/pl.js +++ /dev/null @@ -1,4 +0,0 @@ -// PL lang variables - - -tinyMCELang['lang_print_desc'] = 'Drukuj'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/print/langs/pt_br.js b/public/tiny_mce/plugins/print/langs/pt_br.js deleted file mode 100644 index 0111867..0000000 --- a/public/tiny_mce/plugins/print/langs/pt_br.js +++ /dev/null @@ -1,3 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_print_desc'] = 'Imprimir'; diff --git a/public/tiny_mce/plugins/print/langs/sv.js b/public/tiny_mce/plugins/print/langs/sv.js deleted file mode 100644 index 6ef7982..0000000 --- a/public/tiny_mce/plugins/print/langs/sv.js +++ /dev/null @@ -1,3 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_print_desc'] = 'Skriv ut'; diff --git a/public/tiny_mce/plugins/print/langs/zh_cn.js b/public/tiny_mce/plugins/print/langs/zh_cn.js deleted file mode 100644 index de1c60a..0000000 --- a/public/tiny_mce/plugins/print/langs/zh_cn.js +++ /dev/null @@ -1,4 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_print_desc'] = '´òÓ¡'; diff --git a/public/tiny_mce/plugins/print/readme.txt b/public/tiny_mce/plugins/print/readme.txt deleted file mode 100644 index 66d15d1..0000000 --- a/public/tiny_mce/plugins/print/readme.txt +++ /dev/null @@ -1,17 +0,0 @@ - Print plugin for TinyMCE ------------------------------ - -About: - This plugin adds a print button to TinyMCE. - -Installation instructions: - * Copy the print directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "print". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "print", - theme_advanced_buttons1_add : "print", - }); diff --git a/public/tiny_mce/plugins/readme.txt b/public/tiny_mce/plugins/readme.txt deleted file mode 100644 index b694fdb..0000000 --- a/public/tiny_mce/plugins/readme.txt +++ /dev/null @@ -1 +0,0 @@ -This is the location you place TinyMCE plugins. diff --git a/public/tiny_mce/plugins/save/editor_plugin.js b/public/tiny_mce/plugins/save/editor_plugin.js deleted file mode 100644 index 0b4da45..0000000 --- a/public/tiny_mce/plugins/save/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('save','en,zh_cn,cs,fa,fr_ca,fr,de,pl,pt_br');function TinyMCE_save_getControlHTML(control_name){switch(control_name){case "save":return '';}return "";}function TinyMCE_save_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceSave":var formObj=tinyMCE.selectedInstance.formElement.form;if(formObj){tinyMCE.triggerSave();for(var i=0;i'; - } - return ""; -} - -/** - * Executes the save command. - */ -function TinyMCE_save_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceSave": - var formObj = tinyMCE.selectedInstance.formElement.form; - - if (formObj) { - tinyMCE.triggerSave(); - - // Disable all UI form elements that TinyMCE created - for (var i=0; ia@5x3*IY|NQy)=kLFR!2eM&8Uh0o0>H$t z_>+a1f#E-c4k#yp@&p6NF^2z~G9DWi9Bk$g)^gEUw2(tU!LDG&iNt2tW?t(JH%?4E z+QliNksz{g<6?JFULFqv4ks4&$=V?cG&V3Yc?(Kg9dk)+T6VTczM$w%<{}nGZhOum zfy6}Ri$bbQAq5EqnwL3+r9?Cw9A34shDtZRxUg{1Q7&PH2HhQuN$ng3592&eD>NS5 zmZHpHk?_ccjg3d-MymBR=N4wEfCU#E92gr9vY1cNRZwv05LA&9xY2W90XvV7LPyz# U1jnY!9Beu';case "replace":return '';}return "";}function TinyMCE_searchreplace_execCommand(editor_id,element,command,user_interface,value){function defValue(key,default_value){value[key]=typeof(value[key])=="undefined"?default_value:value[key];}function replaceSel(search_str,str){if(!tinyMCE.isMSIE){var sel=instance.contentWindow.getSelection();var rng=sel.getRangeAt(0);}else{var rng=instance.contentWindow.document.selection.createRange();}if(!tinyMCE.isMSIE){var doc=instance.contentWindow.document;if(str.indexOf(search_str)==-1){rng.deleteContents();rng.insertNode(rng.createContextualFragment(str));rng.collapse(false);}else{doc.execCommand("insertimage",false,"#mce_temp_url#");var elm=tinyMCE.getElementByAttributeValue(doc.body,"img","src","#mce_temp_url#");elm.parentNode.replaceChild(doc.createTextNode(str),elm);}}else{if(rng.item)rng.item(0).outerHTML=str;else rng.pasteHTML(str);}}var instance=tinyMCE.getInstanceById(editor_id);if(!value)value=new Array();defValue("editor_id",editor_id);defValue("searchstring","");defValue("replacestring",null);defValue("replacemode","none");defValue("casesensitive",false);defValue("backwards",false);defValue("wrap",false);defValue("wholeword",false);switch(command){case "mceResetSearch":tinyMCE.lastSearchRng=null;return true;case "mceSearch":if(user_interface){var template=new Array();if(value['replacestring']!=null){template['file']='../../plugins/searchreplace/replace.htm';template['width']=310;template['height']=180;}else{template['file']='../../plugins/searchreplace/search.htm';template['width']=280;template['height']=180;}tinyMCE.openWindow(template,value);}else{var win=tinyMCE.getInstanceById(editor_id).contentWindow;var doc=tinyMCE.getInstanceById(editor_id).contentWindow.document;var body=tinyMCE.getInstanceById(editor_id).contentWindow.document.body;if(body.innerHTML==""){alert(tinyMCE.getLang('lang_searchreplace_notfound'));return true;}if(value['replacemode']=="current"){replaceSel(value['string'],value['replacestring']);value['replacemode']="none";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}if(tinyMCE.isMSIE){var rng=tinyMCE.lastSearchRng?tinyMCE.lastSearchRng:doc.selection.createRange();var flags=0;if(value['wholeword'])flags=flags|2;if(value['casesensitive'])flags=flags|4;if(value['replacemode']=="all"){while(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(false);replaceSel(value['string'],value['replacestring']);}alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(rng.findText(value['string'],value['backwards']?-1:1,flags)){rng.scrollIntoView();rng.select();rng.collapse(value['backwards']);tinyMCE.lastSearchRng=rng;}else alert(tinyMCE.getLang('lang_searchreplace_notfound'));}else{if(value['replacemode']=="all"){while(win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))replaceSel(value['string'],value['replacestring']);alert(tinyMCE.getLang('lang_searchreplace_allreplaced'));return true;}if(!win.find(value['string'],value['casesensitive'],value['backwards'],value['wrap'],value['wholeword'],false,false))alert(tinyMCE.getLang('lang_searchreplace_notfound'));}}return true;case "mceSearchReplace":value['replacestring']="";tinyMCE.execInstanceCommand(editor_id,'mceSearch',user_interface,value,false);return true;}return false;}function TinyMCE_searchreplace_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){return true;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/searchreplace/editor_plugin_src.js b/public/tiny_mce/plugins/searchreplace/editor_plugin_src.js deleted file mode 100644 index b62195b..0000000 --- a/public/tiny_mce/plugins/searchreplace/editor_plugin_src.js +++ /dev/null @@ -1,173 +0,0 @@ -/* Import theme specific language pack */ -tinyMCE.importPluginLanguagePack('searchreplace', 'en,sv,zh_cn,fa,fr_ca,fr,de,pl,pt_br,cs'); - -function TinyMCE_searchreplace_getControlHTML(control_name) { - switch (control_name) { - case "search": - return ''; - - case "replace": - return ''; - } - - return ""; -} - -/** - * Executes the search/replace commands. - */ -function TinyMCE_searchreplace_execCommand(editor_id, element, command, user_interface, value) { - function defValue(key, default_value) { - value[key] = typeof(value[key]) == "undefined" ? default_value : value[key]; - } - - function replaceSel(search_str, str) { - // Get current selection - if (!tinyMCE.isMSIE) { - var sel = instance.contentWindow.getSelection(); - var rng = sel.getRangeAt(0); - } else { - var rng = instance.contentWindow.document.selection.createRange(); - } - - // Replace current one - if (!tinyMCE.isMSIE) { - var doc = instance.contentWindow.document; - - // This way works when the replace doesn't contain the search string - if (str.indexOf(search_str) == -1) { - rng.deleteContents(); - rng.insertNode(rng.createContextualFragment(str)); - rng.collapse(false); - } else { - // Insert content ugly way! Needed to move selection to after replace item - doc.execCommand("insertimage", false, "#mce_temp_url#"); - var elm = tinyMCE.getElementByAttributeValue(doc.body, "img", "src", "#mce_temp_url#"); - elm.parentNode.replaceChild(doc.createTextNode(str), elm); - } - } else { - if (rng.item) - rng.item(0).outerHTML = str; - else - rng.pasteHTML(str); - } - } - - var instance = tinyMCE.getInstanceById(editor_id); - - if (!value) - value = new Array(); - - // Setup defualt values - defValue("editor_id", editor_id); - defValue("searchstring", ""); - defValue("replacestring", null); - defValue("replacemode", "none"); - defValue("casesensitive", false); - defValue("backwards", false); - defValue("wrap", false); - defValue("wholeword", false); - - // Handle commands - switch (command) { - case "mceResetSearch": - tinyMCE.lastSearchRng = null; - return true; - - case "mceSearch": - if (user_interface) { - // Open search dialog - var template = new Array(); - - if (value['replacestring'] != null) { - template['file'] = '../../plugins/searchreplace/replace.htm'; // Relative to theme - template['width'] = 310; - template['height'] = 180; - } else { - template['file'] = '../../plugins/searchreplace/search.htm'; // Relative to theme - template['width'] = 280; - template['height'] = 180; - } - - tinyMCE.openWindow(template, value); - } else { - var win = tinyMCE.getInstanceById(editor_id).contentWindow; - var doc = tinyMCE.getInstanceById(editor_id).contentWindow.document; - var body = tinyMCE.getInstanceById(editor_id).contentWindow.document.body; - - // Whats the point - if (body.innerHTML == "") { - alert(tinyMCE.getLang('lang_searchreplace_notfound')); - return true; - } - - // Handle replace current - if (value['replacemode'] == "current") { - replaceSel(value['string'], value['replacestring']); - - // Search next one - value['replacemode'] = "none"; - tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); - - return true; - } - - if (tinyMCE.isMSIE) { - var rng = tinyMCE.lastSearchRng ? tinyMCE.lastSearchRng : doc.selection.createRange(); - var flags = 0; - - if (value['wholeword']) - flags = flags | 2; - - if (value['casesensitive']) - flags = flags | 4; - - // Handle replace all mode - if (value['replacemode'] == "all") { - while (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { - rng.scrollIntoView(); - rng.select(); - rng.collapse(false); - replaceSel(value['string'], value['replacestring']); - } - - alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); - return true; - } - - if (rng.findText(value['string'], value['backwards'] ? -1 : 1, flags)) { - rng.scrollIntoView(); - rng.select(); - rng.collapse(value['backwards']); - tinyMCE.lastSearchRng = rng; - } else - alert(tinyMCE.getLang('lang_searchreplace_notfound')); - } else { - if (value['replacemode'] == "all") { - while (win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) - replaceSel(value['string'], value['replacestring']); - - alert(tinyMCE.getLang('lang_searchreplace_allreplaced')); - return true; - } - - if (!win.find(value['string'], value['casesensitive'], value['backwards'], value['wrap'], value['wholeword'], false, false)) - alert(tinyMCE.getLang('lang_searchreplace_notfound')); - } - } - return true; - - case "mceSearchReplace": - value['replacestring'] = ""; - - tinyMCE.execInstanceCommand(editor_id, 'mceSearch', user_interface, value, false); - return true; - } - - // Pass to next handler in chain - return false; -} - -function TinyMCE_searchreplace_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { - return true; -} diff --git a/public/tiny_mce/plugins/searchreplace/images/replace.gif b/public/tiny_mce/plugins/searchreplace/images/replace.gif deleted file mode 100644 index e62354b0f0154c8cfb0184723ac94fb9a5ddaa94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHb6k!ly*vtR||Ns9t$as)2;lqRtA8y~cxNO-nUteFKAXpNeQ2fcl$iTqC zpaYTsnZdx~Dsa+s^1|T`(K*NFyQ`Q}q=cAwmE;K7Cy4-Oo^b^u6T0HO~EZhW|K4q>gB z6CWOM3yHCvk_b#x - -{$lang_searchreplace_replace_title} - - - - -
- - - - - - - - - - - - - - - -
{$lang_searchreplace_findwhat}: 
{$lang_searchreplace_replacewith}: 
- - - - - - - -
{$lang_searchreplace_direction}: {$lang_searchreplace_up}{$lang_searchreplace_down}
- - - - -
{$lang_searchreplace_case}
- - - - - - - -
-
- - diff --git a/public/tiny_mce/plugins/searchreplace/search.htm b/public/tiny_mce/plugins/searchreplace/search.htm deleted file mode 100644 index 27c2402..0000000 --- a/public/tiny_mce/plugins/searchreplace/search.htm +++ /dev/null @@ -1,77 +0,0 @@ - - -{$lang_searchreplace_search_title} - - - - -
- - - - - - - - - - -
{$lang_searchreplace_findwhat}: 
- - - - - - - -
{$lang_searchreplace_direction}: {$lang_searchreplace_up}{$lang_searchreplace_down}
- - - - -
{$lang_searchreplace_case}
- - - - - -
-
- - diff --git a/public/tiny_mce/plugins/table/cell.htm b/public/tiny_mce/plugins/table/cell.htm deleted file mode 100644 index f9778b7..0000000 --- a/public/tiny_mce/plugins/table/cell.htm +++ /dev/null @@ -1,137 +0,0 @@ - - -{$lang_table_cell_title} - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_table_cell_title}
{$lang_insert_table_align}:{$lang_insert_table_class}:
{$lang_insert_table_valign}:  
{$lang_insert_table_width}:{$lang_insert_table_height}:
  
-
- - diff --git a/public/tiny_mce/plugins/table/editor_plugin.js b/public/tiny_mce/plugins/table/editor_plugin.js deleted file mode 100644 index 839a6d9..0000000 --- a/public/tiny_mce/plugins/table/editor_plugin.js +++ /dev/null @@ -1,2 +0,0 @@ -/* Import plugin specific language pack */ - tinyMCE.importPluginLanguagePack('table','en,ar,cs,da,de,el,es,fi,fr_ca,hu,it,ja,ko,nl,no,pl,pt,sv,tw,zh_cn,fr,de');function TinyMCE_table_initInstance(inst){if(tinyMCE.isGecko)tinyMCE.addEvent(inst.getDoc(),"mouseup",TinyMCE_table_mouseDownHandler);inst.tableRowClipboard=null;}function TinyMCE_table_mouseDownHandler(e){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var focusElm=tinyMCE.selectedInstance.getFocusElement();if(elm.nodeName=="BODY"&&(focusElm.nodeName=="TD"||(focusElm.parentNode&&focusElm.parentNode.nodeName=="TD"))){window.setTimeout(function(){var tableElm=tinyMCE.getParentElement(focusElm,"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual']);},10);}}function TinyMCE_table_getControlHTML(control_name){var controls=new Array(['table','table.gif','{$lang_table_desc}','mceInsertTable',true],['delete_col','table_delete_col.gif','{$lang_table_delete_col_desc}','mceTableDeleteCol'],['delete_row','table_delete_row.gif','{$lang_table_delete_row_desc}','mceTableDeleteRow'],['col_after','table_insert_col_after.gif','{$lang_table_insert_col_after_desc}','mceTableInsertColAfter'],['col_before','table_insert_col_before.gif','{$lang_table_insert_col_before_desc}','mceTableInsertColBefore'],['row_after','table_insert_row_after.gif','{$lang_table_insert_row_after_desc}','mceTableInsertRowAfter'],['row_before','table_insert_row_before.gif','{$lang_table_insert_row_before_desc}','mceTableInsertRowBefore'],['row_props','table_row_props.gif','{$lang_table_row_desc}','mceTableRowProps',true],['cell_props','table_cell_props.gif','{$lang_table_cell_desc}','mceTableCellProps',true],['split_cells','table_split_cells.gif','{$lang_table_split_cells_desc}','mceTableSplitCells',true],['merge_cells','table_merge_cells.gif','{$lang_table_merge_cells_desc}','mceTableMergeCells',true]);for(var i=0;i';else if(but[0]==control_name)return '';}if(control_name=="tablecontrols"){var html="";html+=tinyMCE.getControlHTML("table");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_props");html+=tinyMCE.getControlHTML("cell_props");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("row_before");html+=tinyMCE.getControlHTML("row_after");html+=tinyMCE.getControlHTML("delete_row");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("col_before");html+=tinyMCE.getControlHTML("col_after");html+=tinyMCE.getControlHTML("delete_col");html+=tinyMCE.getControlHTML("separator");html+=tinyMCE.getControlHTML("split_cells");html+=tinyMCE.getControlHTML("merge_cells");return html;}return "";}function TinyMCE_table_execCommand(editor_id,element,command,user_interface,value){var inst=tinyMCE.getInstanceById(editor_id);var focusElm=inst.getFocusElement();var trElm=tinyMCE.getParentElement(focusElm,"tr");var tdElm=tinyMCE.getParentElement(focusElm,"td");var tableElm=tinyMCE.getParentElement(focusElm,"table");var doc=inst.contentWindow.document;var tableBorder=tableElm?tableElm.getAttribute("border"):"";if(trElm&&tdElm==null)tdElm=trElm.cells[0];function inArray(ar,v){for(var i=0;i0&&inArray(ar[i],v))return true;if(ar[i]==v)return true;}return false;}function makeTD(){var newTD=doc.createElement("td");newTD.innerHTML=" ";}function getColRowSpan(td){var colspan=tinyMCE.getAttrib(td,"colspan");var rowspan=tinyMCE.getAttrib(td,"rowspan");colspan=colspan==""?1:parseInt(colspan);rowspan=rowspan==""?1:parseInt(rowspan);return{colspan:colspan,rowspan:rowspan};}function getCellPos(grid,td){for(var y=0;y1){for(var i=x;i1)td.rowSpan=sd.rowspan+1;lastElm=td;}deleteMarked(tableElm);}}function prevElm(node,name){while((node=node.previousSibling)!=null){if(node.nodeName==name)return node;}return null;}function nextElm(node,name){while((node=node.nextSibling)!=null){if(node.nodeName==name)return node;}return null;}function deleteMarked(tbl){if(tbl.rows==0)return;var tr=tbl.rows[0];do{var next=nextElm(tr,"TR");if(tr._delete){tr.parentNode.removeChild(tr);continue;}var td=tr.cells[0];if(td.cells>1){do{var nexttd=nextElm(td,"TD");if(td._delete)td.parentNode.removeChild(td);}while((td=nexttd)!=null);}}while((tr=next)!=null);}function addRows(td_elm,tr_elm,rowspan){td_elm.rowSpan=1;var trNext=nextElm(tr_elm,"TR");for(var i=1;icols)cols=rowsAr[i].cells.length;cols=cols;rows=rowsAr.length;border=tinyMCE.getAttrib(tinyMCE.tableElm,'border',border);cellpadding=tinyMCE.getAttrib(tinyMCE.tableElm,'cellpadding',"");cellspacing=tinyMCE.getAttrib(tinyMCE.tableElm,'cellspacing',"");width=tinyMCE.getAttrib(tinyMCE.tableElm,'width',width);height=tinyMCE.getAttrib(tinyMCE.tableElm,'height',height);bordercolor=tinyMCE.getAttrib(tinyMCE.tableElm,'bordercolor',bordercolor);bgcolor=tinyMCE.getAttrib(tinyMCE.tableElm,'bgcolor',bgcolor);align=tinyMCE.getAttrib(tinyMCE.tableElm,'align',align);className=tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm,'class'),false);if(tinyMCE.isMSIE){width=tinyMCE.tableElm.style.pixelWidth==0?tinyMCE.tableElm.getAttribute("width"):tinyMCE.tableElm.style.pixelWidth;height=tinyMCE.tableElm.style.pixelHeight==0?tinyMCE.tableElm.getAttribute("height"):tinyMCE.tableElm.style.pixelHeight;}action="update";}var template=new Array();template['file']='../../plugins/table/table.htm';if(tinyMCE.settings['table_color_fields']){template['width']=400;template['height']=240;}else{template['width']=340;template['height']=220;}template['width']+=tinyMCE.getLang('lang_insert_table_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_table_delta_height',0);tinyMCE.openWindow(template,{editor_id:inst.editorId,cols:cols,rows:rows,border:border,cellpadding:cellpadding,cellspacing:cellspacing,align:align,width:width,height:height,bordercolor:bordercolor,bgcolor:bgcolor,action:action,className:className});}else{var html='';var cols=2,rows=2,border=0,cellpadding=-1,cellspacing=-1,align,width,height,className,action;if(typeof(value)=='object'){cols=value['cols'];rows=value['rows'];border=value['border']!=""?value['border']:0;cellpadding=value['cellpadding']!=""?value['cellpadding']:-1;cellspacing=value['cellspacing']!=""?value['cellspacing']:-1;align=value['align'];width=value['width'];height=value['height'];bordercolor=value['bordercolor'];bgcolor=value['bgcolor'];className=value['className'];action=value['action'];}if(tinyMCE.tableElm&&action=="update"){inst.execCommand("mceAddUndoLevel");tinyMCE.setAttrib(tinyMCE.tableElm,'cellPadding',cellpadding,true);tinyMCE.setAttrib(tinyMCE.tableElm,'cellSpacing',cellspacing,true);tinyMCE.setAttrib(tinyMCE.tableElm,'border',border,true);tinyMCE.setAttrib(tinyMCE.tableElm,'width',width,true);tinyMCE.setAttrib(tinyMCE.tableElm,'height',height,true);tinyMCE.setAttrib(tinyMCE.tableElm,'bordercolor',bordercolor);tinyMCE.setAttrib(tinyMCE.tableElm,'bgcolor',bgcolor);tinyMCE.setAttrib(tinyMCE.tableElm,'align',align);tinyMCE.setAttrib(tinyMCE.tableElm,'class',className);if(tinyMCE.isMSIE){tinyMCE.tableElm.style.pixelWidth=(width==null||width=="")?0:width;tinyMCE.tableElm.style.pixelHeight=(height==null||height=="")?0:height;tinyMCE.tableElm.borderColor=bordercolor;tinyMCE.tableElm.bgColor=bgcolor;}tinyMCE.handleVisualAid(tinyMCE.tableElm,false,inst.visualAid);tinyMCE.tableElm.outerHTML=tinyMCE.tableElm.outerHTML;tinyMCE.triggerNodeChange();return true;}html+='";for(var x=0;x ';html+="";}html+="
";inst.execCommand('mceInsertContent',false,html);tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings['visual']);}return true;case "mceTableSplitCells":case "mceTableMergeCells":case "mceTableInsertRowBefore":case "mceTableInsertRowAfter":case "mceTableDeleteRow":case "mceTableInsertColBefore":case "mceTableInsertColAfter":case "mceTableDeleteCol":case "mceTableCutRow":case "mceTableCopyRow":case "mceTablePasteRowBefore":case "mceTablePasteRowAfter":inst.execCommand("mceAddUndoLevel");if(!tableElm)return true;if(tableElm.firstChild&&tableElm.firstChild.nodeName.toLowerCase()=="tbody")tableElm=tableElm.firstChild;if(tableElm&&trElm){switch(command){case "mceTableInsertRowBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}trElm.parentNode.insertBefore(newTR,trElm);break;case "mceTableCutRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);inst.execCommand("mceTableDeleteRow");break;case "mceTableCopyRow":if(!trElm||!tdElm)return true;inst.tableRowClipboard=copyRow(doc,tableElm,trElm);break;case "mceTablePasteRowBefore":if(!trElm||!tdElm)return true;var newTR=inst.tableRowClipboard.cloneNode(true);var prevTR=prevElm(trElm,"TR");if(prevTR!=null)trimRow(tableElm,prevTR,prevTR.cells[0],newTR);trElm.parentNode.insertBefore(newTR,trElm);break;case "mceTablePasteRowAfter":if(!trElm||!tdElm)return true;var nextTR=nextElm(trElm,"TR");var newTR=inst.tableRowClipboard.cloneNode(true);trimRow(tableElm,trElm,tdElm,newTR);if(nextTR==null)trElm.parentNode.appendChild(newTR);else nextTR.parentNode.insertBefore(newTR,nextTR);break;case "mceTableInsertRowAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var newTR=doc.createElement("tr");var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['rowspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.colSpan=tdElm.colSpan;newTR.appendChild(newTD);}else tdElm.rowSpan=sd['rowspan']+1;lastTDElm=tdElm;}}if(newTR.hasChildNodes()){var nextTR=nextElm(trElm,"TR");if(nextTR)nextTR.parentNode.insertBefore(newTR,nextTR);else tableElm.appendChild(newTR);}break;case "mceTableDeleteRow":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);if(grid.length==1){tableElm.parentNode.removeChild(tableElm);return true;}var cells=trElm.cells;var nextTR=nextElm(trElm,"TR");for(var x=0;x1){var newTD=cells[x].cloneNode(true);var sd=getColRowSpan(cells[x]);newTD.rowSpan=sd.rowspan-1;var nextTD=nextTR.cells[x];if(nextTD==null)nextTR.appendChild(newTD);else nextTR.insertBefore(newTD,nextTD);}}var lastTDElm=null;for(var x=0;tdElm=getCell(grid,cpos.rowindex,x);x++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd.rowspan>1){tdElm.rowSpan=sd.rowspan-1;}else{trElm=tdElm.parentNode;if(trElm.parentNode)trElm._delete=true;}lastTDElm=tdElm;}}deleteMarked(tableElm);cpos.rowindex--;if(cpos.rowindex<0)cpos.rowindex=0;inst.selectNode(getCell(grid,cpos.rowindex,0),true,true);break;case "mceTableInsertColBefore":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;tdElm.parentNode.insertBefore(newTD,tdElm);}else tdElm.colSpan++;lastTDElm=tdElm;}}break;case "mceTableInsertColAfter":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']==1){var newTD=doc.createElement("td");newTD.innerHTML=" ";newTD.rowSpan=tdElm.rowSpan;var nextTD=nextElm(tdElm,"TD");if(nextTD==null)tdElm.parentNode.appendChild(newTD);else nextTD.parentNode.insertBefore(newTD,nextTD);}else tdElm.colSpan++;lastTDElm=tdElm;}}break;case "mceTableDeleteCol":if(!trElm||!tdElm)return true;var grid=getTableGrid(tableElm);var cpos=getCellPos(grid,tdElm);var lastTDElm=null;if(grid.length>1&&grid[0].length<=1){tableElm.parentNode.removeChild(tableElm);return true;}for(var y=0;tdElm=getCell(grid,y,cpos.cellindex);y++){if(tdElm!=lastTDElm){var sd=getColRowSpan(tdElm);if(sd['colspan']>1)tdElm.colSpan=sd['colspan']-1;else{if(tdElm.parentNode)tdElm.parentNode.removeChild(tdElm);}lastTDElm=tdElm;}}cpos.cellindex--;if(cpos.cellindex<0)cpos.cellindex=0;inst.selectNode(getCell(grid,0,cpos.cellindex),true,true);break;case "mceTableSplitCells":if(!trElm||!tdElm)return true;var spandata=getColRowSpan(tdElm);var colspan=spandata["colspan"];var rowspan=spandata["rowspan"];if(colspan>1||rowspan>1){tdElm.colSpan=1;for(var i=1;i1)addRows(newTD,trElm,rowspan);}addRows(tdElm,trElm,rowspan);}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");break;case "mceTableMergeCells":var rows=new Array();var sel=inst.getSel();var grid=getTableGrid(tableElm);if(tinyMCE.isMSIE||sel.rangeCount==1){if(user_interface){var template=new Array();var sp=getColRowSpan(tdElm);template['file']='../../plugins/table/merge_cells.htm';template['width']=160;template['height']=220;tinyMCE.openWindow(template,{editor_id:inst.editorId,action:"update",numcols:sp.colspan,numrows:sp.rowspan});return true;}else{var numRows=parseInt(value['numrows']);var numCols=parseInt(value['numcols']);var cpos=getCellPos(grid,tdElm);if((""+numRows)=="NaN")numRows=1;if((""+numCols)=="NaN")numCols=1;var tRows=tableElm.rows;for(var y=cpos.rowindex;y0)rows[rows.length]=rowCells;}}}else{var cells=new Array();var sel=inst.getSel();var lastTR=null;var curRow=null;var x1=-1,y1=-1,x2,y2;if(sel.rangeCount<2)return true;for(var i=0;i0)rows[rows.length]=rowCells;}var curRow=new Array();var lastTR=null;for(var y=0;ycolSpan)colSpan=rowColSpan;lastRowSpan=-1;}var lastColSpan=-1;for(var x=0;xrowSpan)rowSpan=colRowSpan;lastColSpan=-1;}tdElm=rows[0][0];tdElm.rowSpan=rowSpan;tdElm.colSpan=colSpan;for(var y=0;y0))tdElm.innerHTML+=html;if(rows[y][x]!=tdElm&&!rows[y][x]._deleted){var cpos=getCellPos(grid,rows[y][x]);var tr=rows[y][x].parentNode;tr.removeChild(rows[y][x]);rows[y][x]._deleted=true;if(!tr.hasChildNodes()){tr.parentNode.removeChild(tr);var lastCell=null;for(var x=0;cellElm=getCell(grid,cpos.rowindex,x);x++){if(cellElm!=lastCell&&cellElm.rowSpan>1)cellElm.rowSpan--;lastCell=cellElm;}if(tdElm.rowSpan>1)tdElm.rowSpan--;}}}}break;}tableElm=tinyMCE.getParentElement(inst.getFocusElement(),"table");tinyMCE.handleVisualAid(tableElm,true,tinyMCE.settings['visual']);tinyMCE.triggerNodeChange();inst.repaint();}return true;}return false;}function TinyMCE_table_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){var colspan="1",rowspan="1";var inst=tinyMCE.getInstanceById(editor_id);tinyMCE.switchClassSticky(editor_id+'_table','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_row_props','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_cell_props','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_row_before','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_row_after','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_delete_row','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_col_before','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_col_after','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_delete_col','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_split_cells','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_merge_cells','mceButtonDisabled',true);if(tinyMCE.getParentElement(node,"tr"))tinyMCE.switchClassSticky(editor_id+'_row_props','mceButtonSelected',false);if(tdElm=tinyMCE.getParentElement(node,"td")){tinyMCE.switchClassSticky(editor_id+'_cell_props','mceButtonSelected',false);tinyMCE.switchClassSticky(editor_id+'_row_before','mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_row_after','mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_delete_row','mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_col_before','mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_col_after','mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_delete_col','mceButtonNormal',false);colspan=tinyMCE.getAttrib(tdElm,"colspan");rowspan=tinyMCE.getAttrib(tdElm,"rowspan");colspan=colspan==""?"1":colspan;rowspan=rowspan==""?"1":rowspan;if(colspan!="1"||rowspan!="1")tinyMCE.switchClassSticky(editor_id+'_split_cells','mceButtonNormal',false);}if(tinyMCE.getParentElement(node,"table")){tinyMCE.switchClassSticky(editor_id+'_table','mceButtonSelected');tinyMCE.switchClassSticky(editor_id+'_merge_cells','mceButtonNormal',false);}} \ No newline at end of file diff --git a/public/tiny_mce/plugins/table/editor_plugin_src.js b/public/tiny_mce/plugins/table/editor_plugin_src.js deleted file mode 100644 index dde12a2..0000000 --- a/public/tiny_mce/plugins/table/editor_plugin_src.js +++ /dev/null @@ -1,1142 +0,0 @@ -/* Import plugin specific language pack */ -tinyMCE.importPluginLanguagePack('table', 'en,ar,cs,da,de,el,es,fi,fr_ca,hu,it,ja,ko,nl,no,pl,pt,sv,tw,zh_cn,fr,de'); - -function TinyMCE_table_initInstance(inst) { - if (tinyMCE.isGecko) - tinyMCE.addEvent(inst.getDoc(), "mouseup", TinyMCE_table_mouseDownHandler); - - inst.tableRowClipboard = null; -} - -function TinyMCE_table_mouseDownHandler(e) { - var elm = tinyMCE.isMSIE ? event.srcElement : e.target; - var focusElm = tinyMCE.selectedInstance.getFocusElement(); - - // If press on special Mozilla create TD/TR thingie - if (elm.nodeName == "BODY" && (focusElm.nodeName == "TD" || (focusElm.parentNode && focusElm.parentNode.nodeName == "TD"))) { - window.setTimeout(function() { - var tableElm = tinyMCE.getParentElement(focusElm, "table"); - tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual']); - }, 10); - } -} - -/** - * Returns the HTML contents of the table control. - */ -function TinyMCE_table_getControlHTML(control_name) { - var controls = new Array( - ['table', 'table.gif', '{$lang_table_desc}', 'mceInsertTable', true], - ['delete_col', 'table_delete_col.gif', '{$lang_table_delete_col_desc}', 'mceTableDeleteCol'], - ['delete_row', 'table_delete_row.gif', '{$lang_table_delete_row_desc}', 'mceTableDeleteRow'], - ['col_after', 'table_insert_col_after.gif', '{$lang_table_insert_col_after_desc}', 'mceTableInsertColAfter'], - ['col_before', 'table_insert_col_before.gif', '{$lang_table_insert_col_before_desc}', 'mceTableInsertColBefore'], - ['row_after', 'table_insert_row_after.gif', '{$lang_table_insert_row_after_desc}', 'mceTableInsertRowAfter'], - ['row_before', 'table_insert_row_before.gif', '{$lang_table_insert_row_before_desc}', 'mceTableInsertRowBefore'], - ['row_props', 'table_row_props.gif', '{$lang_table_row_desc}', 'mceTableRowProps', true], - ['cell_props', 'table_cell_props.gif', '{$lang_table_cell_desc}', 'mceTableCellProps', true], - ['split_cells', 'table_split_cells.gif', '{$lang_table_split_cells_desc}', 'mceTableSplitCells', true], - ['merge_cells', 'table_merge_cells.gif', '{$lang_table_merge_cells_desc}', 'mceTableMergeCells', true]); - - // Render table control - for (var i=0; i'; - else if (but[0] == control_name) - return ''; - } - - // Special tablecontrols - if (control_name == "tablecontrols") { - var html = ""; - - html += tinyMCE.getControlHTML("table"); - html += tinyMCE.getControlHTML("separator"); - html += tinyMCE.getControlHTML("row_props"); - html += tinyMCE.getControlHTML("cell_props"); - html += tinyMCE.getControlHTML("separator"); - html += tinyMCE.getControlHTML("row_before"); - html += tinyMCE.getControlHTML("row_after"); - html += tinyMCE.getControlHTML("delete_row"); - html += tinyMCE.getControlHTML("separator"); - html += tinyMCE.getControlHTML("col_before"); - html += tinyMCE.getControlHTML("col_after"); - html += tinyMCE.getControlHTML("delete_col"); - html += tinyMCE.getControlHTML("separator"); - html += tinyMCE.getControlHTML("split_cells"); - html += tinyMCE.getControlHTML("merge_cells"); - - return html; - } - - return ""; -} - -/** - * Executes the table commands. - */ -function TinyMCE_table_execCommand(editor_id, element, command, user_interface, value) { - var inst = tinyMCE.getInstanceById(editor_id); - var focusElm = inst.getFocusElement(); - var trElm = tinyMCE.getParentElement(focusElm, "tr"); - var tdElm = tinyMCE.getParentElement(focusElm, "td"); - var tableElm = tinyMCE.getParentElement(focusElm, "table"); - var doc = inst.contentWindow.document; - var tableBorder = tableElm ? tableElm.getAttribute("border") : ""; - - // Get first TD if no TD found - if (trElm && tdElm == null) - tdElm = trElm.cells[0]; - - // ------- Inner functions --------- - function inArray(ar, v) { - for (var i=0; i 0 && inArray(ar[i], v)) - return true; - - // Found value - if (ar[i] == v) - return true; - } - - return false; - } - - function makeTD() { - var newTD = doc.createElement("td"); - newTD.innerHTML = " "; - } - - function getColRowSpan(td) { - var colspan = tinyMCE.getAttrib(td, "colspan"); - var rowspan = tinyMCE.getAttrib(td, "rowspan"); - - colspan = colspan == "" ? 1 : parseInt(colspan); - rowspan = rowspan == "" ? 1 : parseInt(rowspan); - - return {colspan : colspan, rowspan : rowspan}; - } - - function getCellPos(grid, td) { - for (var y=0; y 1) { // Remove due to colspan - for (var i=x; i 1) - td.rowSpan = sd.rowspan + 1; - - lastElm = td; - } - - deleteMarked(tableElm); - } - } - - function prevElm(node, name) { - while ((node = node.previousSibling) != null) { - if (node.nodeName == name) - return node; - } - - return null; - } - - function nextElm(node, name) { - while ((node = node.nextSibling) != null) { - if (node.nodeName == name) - return node; - } - - return null; - } - - function deleteMarked(tbl) { - if (tbl.rows == 0) - return; - - var tr = tbl.rows[0]; - do { - var next = nextElm(tr, "TR"); - - // Delete row - if (tr._delete) { - tr.parentNode.removeChild(tr); - continue; - } - - // Delete cells - var td = tr.cells[0]; - if (td.cells > 1) { - do { - var nexttd = nextElm(td, "TD"); - - if (td._delete) - td.parentNode.removeChild(td); - } while ((td = nexttd) != null); - } - } while ((tr = next) != null); - } - - function addRows(td_elm, tr_elm, rowspan) { - // Add rows - td_elm.rowSpan = 1; - var trNext = nextElm(tr_elm, "TR"); - for (var i=1; i cols) - cols = rowsAr[i].cells.length; - - cols = cols; - rows = rowsAr.length; - - border = tinyMCE.getAttrib(tinyMCE.tableElm, 'border', border); - cellpadding = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellpadding', ""); - cellspacing = tinyMCE.getAttrib(tinyMCE.tableElm, 'cellspacing', ""); - width = tinyMCE.getAttrib(tinyMCE.tableElm, 'width', width); - height = tinyMCE.getAttrib(tinyMCE.tableElm, 'height', height); - bordercolor = tinyMCE.getAttrib(tinyMCE.tableElm, 'bordercolor', bordercolor); - bgcolor = tinyMCE.getAttrib(tinyMCE.tableElm, 'bgcolor', bgcolor); - align = tinyMCE.getAttrib(tinyMCE.tableElm, 'align', align); - className = tinyMCE.getVisualAidClass(tinyMCE.getAttrib(tinyMCE.tableElm, 'class'), false); - - if (tinyMCE.isMSIE) { - width = tinyMCE.tableElm.style.pixelWidth == 0 ? tinyMCE.tableElm.getAttribute("width") : tinyMCE.tableElm.style.pixelWidth; - height = tinyMCE.tableElm.style.pixelHeight == 0 ? tinyMCE.tableElm.getAttribute("height") : tinyMCE.tableElm.style.pixelHeight; - } - - action = "update"; - } - - // Setup template - var template = new Array(); - - template['file'] = '../../plugins/table/table.htm'; - if (tinyMCE.settings['table_color_fields']) { - template['width'] = 400; - template['height'] = 240; - } else { - template['width'] = 340; - template['height'] = 220; - } - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_table_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_table_delta_height', 0); - - // Open window - tinyMCE.openWindow(template, {editor_id : inst.editorId, cols : cols, rows : rows, border : border, cellpadding : cellpadding, cellspacing : cellspacing, align : align, width : width, height : height, bordercolor : bordercolor, bgcolor : bgcolor, action : action, className : className}); - } else { - var html = ''; - var cols = 2, rows = 2, border = 0, cellpadding = -1, cellspacing = -1, align, width, height, className, action; - - if (typeof(value) == 'object') { - cols = value['cols']; - rows = value['rows']; - border = value['border'] != "" ? value['border'] : 0; - cellpadding = value['cellpadding'] != "" ? value['cellpadding'] : -1; - cellspacing = value['cellspacing'] != "" ? value['cellspacing'] : -1; - align = value['align']; - width = value['width']; - height = value['height']; - bordercolor = value['bordercolor']; - bgcolor = value['bgcolor']; - className = value['className']; - action = value['action']; - } - - // Update table - if (tinyMCE.tableElm && action == "update") { - inst.execCommand("mceAddUndoLevel"); - - tinyMCE.setAttrib(tinyMCE.tableElm, 'cellPadding', cellpadding, true); - tinyMCE.setAttrib(tinyMCE.tableElm, 'cellSpacing', cellspacing, true); - tinyMCE.setAttrib(tinyMCE.tableElm, 'border', border, true); - tinyMCE.setAttrib(tinyMCE.tableElm, 'width', width, true); - tinyMCE.setAttrib(tinyMCE.tableElm, 'height', height, true); - tinyMCE.setAttrib(tinyMCE.tableElm, 'bordercolor', bordercolor); - tinyMCE.setAttrib(tinyMCE.tableElm, 'bgcolor', bgcolor); - tinyMCE.setAttrib(tinyMCE.tableElm, 'align', align); - tinyMCE.setAttrib(tinyMCE.tableElm, 'class', className); - - if (tinyMCE.isMSIE) { - tinyMCE.tableElm.style.pixelWidth = (width == null || width == "") ? 0 : width; - tinyMCE.tableElm.style.pixelHeight = (height == null || height == "") ? 0 : height; - tinyMCE.tableElm.borderColor = bordercolor; - tinyMCE.tableElm.bgColor = bgcolor; - } - - tinyMCE.handleVisualAid(tinyMCE.tableElm, false, inst.visualAid); - - // Fix for stange MSIE align bug - tinyMCE.tableElm.outerHTML = tinyMCE.tableElm.outerHTML; - - //inst.contentWindow.dispatchEvent(createEvent("click")); - - tinyMCE.triggerNodeChange(); - return true; - } - - // Create new table - html += ' 1) { - var newTD = cells[x].cloneNode(true); - var sd = getColRowSpan(cells[x]); - - newTD.rowSpan = sd.rowspan - 1; - - var nextTD = nextTR.cells[x]; - - if (nextTD == null) - nextTR.appendChild(newTD); - else - nextTR.insertBefore(newTD, nextTD); - } - } - - // Delete cells - var lastTDElm = null; - for (var x=0; tdElm = getCell(grid, cpos.rowindex, x); x++) { - if (tdElm != lastTDElm) { - var sd = getColRowSpan(tdElm); - - if (sd.rowspan > 1) { - tdElm.rowSpan = sd.rowspan - 1; - } else { - trElm = tdElm.parentNode; - - if (trElm.parentNode) - trElm._delete = true; - } - - lastTDElm = tdElm; - } - } - - deleteMarked(tableElm); - - cpos.rowindex--; - if (cpos.rowindex < 0) - cpos.rowindex = 0; - - inst.selectNode(getCell(grid, cpos.rowindex, 0), true, true); - break; - - case "mceTableInsertColBefore": - if (!trElm || !tdElm) - return true; - - var grid = getTableGrid(tableElm); - var cpos = getCellPos(grid, tdElm); - var lastTDElm = null; - - for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { - if (tdElm != lastTDElm) { - var sd = getColRowSpan(tdElm); - - if (sd['colspan'] == 1) { - var newTD = doc.createElement("td"); - - newTD.innerHTML = " "; - newTD.rowSpan = tdElm.rowSpan; - - tdElm.parentNode.insertBefore(newTD, tdElm); - } else - tdElm.colSpan++; - - lastTDElm = tdElm; - } - } - break; - - case "mceTableInsertColAfter": - if (!trElm || !tdElm) - return true; - - var grid = getTableGrid(tableElm); - var cpos = getCellPos(grid, tdElm); - var lastTDElm = null; - - for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { - if (tdElm != lastTDElm) { - var sd = getColRowSpan(tdElm); - - if (sd['colspan'] == 1) { - var newTD = doc.createElement("td"); - - newTD.innerHTML = " "; - newTD.rowSpan = tdElm.rowSpan; - - var nextTD = nextElm(tdElm, "TD"); - if (nextTD == null) - tdElm.parentNode.appendChild(newTD); - else - nextTD.parentNode.insertBefore(newTD, nextTD); - } else - tdElm.colSpan++; - - lastTDElm = tdElm; - } - } - break; - - case "mceTableDeleteCol": - if (!trElm || !tdElm) - return true; - - var grid = getTableGrid(tableElm); - var cpos = getCellPos(grid, tdElm); - var lastTDElm = null; - - // Only one col, remove whole table - if (grid.length > 1 && grid[0].length <= 1) { - tableElm.parentNode.removeChild(tableElm); - return true; - } - - // Delete cells - for (var y=0; tdElm = getCell(grid, y, cpos.cellindex); y++) { - if (tdElm != lastTDElm) { - var sd = getColRowSpan(tdElm); - - if (sd['colspan'] > 1) - tdElm.colSpan = sd['colspan'] - 1; - else { - if (tdElm.parentNode) - tdElm.parentNode.removeChild(tdElm); - } - - lastTDElm = tdElm; - } - } - - cpos.cellindex--; - if (cpos.cellindex < 0) - cpos.cellindex = 0; - - inst.selectNode(getCell(grid, 0, cpos.cellindex), true, true); - break; - - case "mceTableSplitCells": - if (!trElm || !tdElm) - return true; - - var spandata = getColRowSpan(tdElm); - - var colspan = spandata["colspan"]; - var rowspan = spandata["rowspan"]; - - // Needs splitting - if (colspan > 1 || rowspan > 1) { - // Generate cols - tdElm.colSpan = 1; - for (var i=1; i 1) - addRows(newTD, trElm, rowspan); - } - - addRows(tdElm, trElm, rowspan); - } - - // Apply visual aids - tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); - break; - - case "mceTableMergeCells": - var rows = new Array(); - var sel = inst.getSel(); - var grid = getTableGrid(tableElm); - - if (tinyMCE.isMSIE || sel.rangeCount == 1) { - if (user_interface) { - // Setup template - var template = new Array(); - var sp = getColRowSpan(tdElm); - - template['file'] = '../../plugins/table/merge_cells.htm'; - template['width'] = 160; - template['height'] = 220; - - // Open window - tinyMCE.openWindow(template, {editor_id : inst.editorId, action : "update", numcols : sp.colspan, numrows : sp.rowspan}); - - return true; - } else { - var numRows = parseInt(value['numrows']); - var numCols = parseInt(value['numcols']); - var cpos = getCellPos(grid, tdElm); - - if (("" + numRows) == "NaN") - numRows = 1; - - if (("" + numCols) == "NaN") - numCols = 1; - - // Get rows and cells - var tRows = tableElm.rows; - for (var y=cpos.rowindex; y 0) - rows[rows.length] = rowCells; - } - - //return true; - } - } else { - var cells = new Array(); - var sel = inst.getSel(); - var lastTR = null; - var curRow = null; - var x1 = -1, y1 = -1, x2, y2; - - // Only one cell selected, whats the point? - if (sel.rangeCount < 2) - return true; - - // Get all selected cells - for (var i=0; i 0) - rows[rows.length] = rowCells; - } - - // Find selected cells in grid and box - var curRow = new Array(); - var lastTR = null; - for (var y=0; y colSpan) - colSpan = rowColSpan; - - lastRowSpan = -1; - } - - // Validate vertical and get total rowspan - var lastColSpan = -1; - for (var x=0; x rowSpan) - rowSpan = colRowSpan; - - lastColSpan = -1; - } - - // Setup td - tdElm = rows[0][0]; - tdElm.rowSpan = rowSpan; - tdElm.colSpan = colSpan; - - // Merge cells - for (var y=0; y 0)) - tdElm.innerHTML += html; - - // Not current cell - if (rows[y][x] != tdElm && !rows[y][x]._deleted) { - var cpos = getCellPos(grid, rows[y][x]); - var tr = rows[y][x].parentNode; - - tr.removeChild(rows[y][x]); - rows[y][x]._deleted = true; - - // Empty TR, remove it - if (!tr.hasChildNodes()) { - tr.parentNode.removeChild(tr); - - var lastCell = null; - for (var x=0; cellElm = getCell(grid, cpos.rowindex, x); x++) { - if (cellElm != lastCell && cellElm.rowSpan > 1) - cellElm.rowSpan--; - - lastCell = cellElm; - } - - if (tdElm.rowSpan > 1) - tdElm.rowSpan--; - } - } - } - } - - break; - } - - tableElm = tinyMCE.getParentElement(inst.getFocusElement(), "table"); - tinyMCE.handleVisualAid(tableElm, true, tinyMCE.settings['visual']); - tinyMCE.triggerNodeChange(); - inst.repaint(); - } - - return true; - } - - // Pass to next handler in chain - return false; -} - -function TinyMCE_table_handleNodeChange(editor_id, node, undo_index, undo_levels, visual_aid, any_selection) { - var colspan = "1", rowspan = "1"; - - var inst = tinyMCE.getInstanceById(editor_id); - - // Reset table controls - tinyMCE.switchClassSticky(editor_id + '_table', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_row_props', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_cell_props', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_row_before', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_row_after', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_delete_row', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_col_before', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_col_after', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_delete_col', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_split_cells', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_merge_cells', 'mceButtonDisabled', true); - - // Within a tr element - if (tinyMCE.getParentElement(node, "tr")) - tinyMCE.switchClassSticky(editor_id + '_row_props', 'mceButtonSelected', false); - - // Within a td element - if (tdElm = tinyMCE.getParentElement(node, "td")) { - tinyMCE.switchClassSticky(editor_id + '_cell_props', 'mceButtonSelected', false); - tinyMCE.switchClassSticky(editor_id + '_row_before', 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_row_after', 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_delete_row', 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_col_before', 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_col_after', 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_delete_col', 'mceButtonNormal', false); - - colspan = tinyMCE.getAttrib(tdElm, "colspan"); - rowspan = tinyMCE.getAttrib(tdElm, "rowspan"); - - colspan = colspan == "" ? "1" : colspan; - rowspan = rowspan == "" ? "1" : rowspan; - - if (colspan != "1" || rowspan != "1") - tinyMCE.switchClassSticky(editor_id + '_split_cells', 'mceButtonNormal', false); - } - - // Within table - if (tinyMCE.getParentElement(node, "table")) { - tinyMCE.switchClassSticky(editor_id + '_table', 'mceButtonSelected'); - tinyMCE.switchClassSticky(editor_id + '_merge_cells', 'mceButtonNormal', false); - } -} diff --git a/public/tiny_mce/plugins/table/images/buttons.gif b/public/tiny_mce/plugins/table/images/buttons.gif deleted file mode 100644 index e5eacbfa7300a63ba2a4d4b2c177131f954f7009..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2113 zcmeH``&$!t7RGZSFae>u`|AhT{-yhCz=Y8Ju zex9=?JvA=A=pIMHndQ6@>yncN0LO8HAV`v=D2k?OhGAH0m<8<&Ze>x7ASo8r0nCU4 z6M?srgq0#4G&Ri7<1B_VfM6A6G>p>HI21K8SUamO!x0^UTN%Q^D%3!Y(FkB*1XrU3 zf{`eoFr0?fC?FV|WYq|Upa8{i3=jY(al#dWRk+;J0IZ|cMg}obsENkf8DM2a(P{+H zD9&I6i|BCFNMI(Ca4_UBD^eg*7*(h-7y)V&M=$~>8G>S^X_!I-;4&O*r-7B(+1Q~- zLtqW6F2h_25FH>W2DFoiD}j|lF+dJ87{CEe-~{QqoTO;X2!IJEtR(56s9{${E;A(~jq!o|^N;^=(q$UZhzxVvjK|2A|W25x&P(S4$ znQ?k@;u-VP(}`zKUd}n^oU<=xre~&~4?8Z=03Gi6hBBg*4k1tB1d4z-#jE*w7Z?{F z7b+A*MIw<4-7gIPKmNxCWOHs@4yTzTf3yGQCpZwxSt?wdM&La)kY7xmgE05ji^A3( zOY1ygKM)wZ?Vh7E%$|HOc*&G*gBRqxx=pgOA@gLf5D8Cn@@gzskA}>wRGn)VUu(#% z8@G;BAe1>Jv@QLipx6Kv^py=xb;tB2=^~@IjT(`l>K#zD^Z^-Rw(zbraeK4J79J=z z%15x(KjoeC5?Io)F=Yye7p5^OOCY1(%lBPMJEA|-4|WG;U9f6P9D<(m+wz(np9*uj zE*mHJ;GbP?A+7ShtP7q6pY z%r0J@Qq!mM-_PmdGb+P??~-s)HyilvpDt8B|AYPT2m6wKhJ&~~sNv&K=x1m8$dzwH z$=7?&c{TQ{D&+>0T(pzadPG!8rtM+1(62DQOs=p?F-CkG{=zJ-PSFq4W*alg%P2{7 zoAU^qC-3BWyf;kW*?c6W%~sNIqpVo@>E-wC?@ecpWc_}g`_5=%oUIwePBbQXp0@0DXQB>!Wyr4<+l^-A(}{GVISblg6 zE(s>@f`Y1i@rJ*=RjsWHgrelB;a?h8^x$nvWqLHsi(ns?+ppZ}3 zU9t7c5|?%cLTSEaNYlz!geuPo>)j)Vw*TjJf)lL?xKla{_IQXpvVyPYkjp>h%+3I} zgDJ~)7bA4Dwu*>%Pv-?>?z2a)01ImGT;krjh{ z?;sN!y-D)^PT1yc=zcPxs`qNrsnEXL)UF%(kJJGhH!bHDXY{!TB-bccFPV3 zK6atTFK`#8$~5y=ywruB??}isdmyP*ykmoNkAzzD$%oLYAL9IlJ+z(w$vW{9|79i( zm~KXp(!@|W#9k<93S{J( zpr|TyqW=T-^FXKab@n6aMD@p2e#rf~z^=F-E#{S;bG#wBLLkgO^*O&&Dp;ktm@BMP z)X5wzo2LZ%DIlq6TomX_+5`zuZH&byIM3AM{55xD>2|$%HOYT{TeRnepVWh`fMIt`1zTH$-fvg?tT*qk>cL^cShqA+ti3aG=(prfkv@LZ$Q6-p7s9y# zk+j!%@AtuH!?;1V$yzSVy9*dTH(2Houc&_Ox#Mpf&lMhV(VM;h9k<3S4QtR?!yYW= z#d|^JvVSP=NJzDCeNxBa{839(R8B*{#pu)xPpODSQvy#z5l^u-qb$2NX_IXz_N+M~ zDN8NB$Aq5}ee}50v+$eGdSbL!%iEL( znkm&oD0ATCGPgsvyR9`tr>`yOianlMwIxxY|EO{g73oJ)5*r@!UHxeH;rXXgsbgE4 Y^}*9Pw7y-n@Sjv&!nD~}2yqhs3-o?rR{#J2 diff --git a/public/tiny_mce/plugins/table/images/table.gif b/public/tiny_mce/plugins/table/images/table.gif deleted file mode 100644 index f8a00544a9980d38c44d5fe8e9a8457be8339834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmeH`!D|yi6vijCX;K?;HK|5XNfs0Yg$)+cs)rOqvff5dHHc2Uv)oRl&oNM zL_v>pGsp4dsvwhU>0X4Xh+Wac9CC=o!gvw&;JEQG@DJ$6$B*y9ySxux{Y-6ku9*Wl z&;cV^mgTqzF2D-Ju^=LJ*5Me*7UC50Cy+D9dr10NaI7en0;v!yiHT1LWt4Ho80`td zH0fy?J20##7#A#vDOn&n7d(iA=0Y-IcxbrPf)f!?@szE;c^>s&MB!_#s1QkQn7rM&uZWEuIkdp$R4&n$wy)0vxLV{8?)r-!}Ci)!@%sw>s|waN)*>2QU6N zEcoCMP_W>@|A2&s1si~>{x_`nFk#1k1CN9a7d}i_abN*Z@r@4?7Hn9s;lPFi7Y92d!QX$4k!Dftb{ s+*UF&ajfNL-yko!+*y)Snu9~?=u$Dsy_-eOoIQ8e_u{3?u8s`W0Qez_!2kdN diff --git a/public/tiny_mce/plugins/table/images/table_delete_col.gif b/public/tiny_mce/plugins/table/images/table_delete_col.gif deleted file mode 100644 index 0b2f0fb61293b95d119f620c15e12cd3a3e3bb0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmZ?wbhEHb6k!lyXlDQc1CIoUhysI*2L=TX0x}vB3MM!dJSb?G5YX@-VFD0+C|K~J zp<_Zr$ASqH7EGA2V8Vh83l?l>Sn!}>!G{SeK1|r~VZn+68+II6u;asm10Ob=_wF-@g9v?#;*dZ@+%|{O#+PpFh6;{Q2Y8&mX^k|N8U$_y7O@!A=+@ zMnhm=LO}5+3o`?QHiHhxdQhHV;HYB==aBK(u;5@bhp<-6i46*DqFMnSA1*XHGjymj z$?Op*WNGP=)SJbz@M1!Xh>C;FgAEIv8ibYXrszl~ z&MaaYDh9g*7@JwyXK1-BXgI*Il2h;pPeZ6;LmS)vCRL5HH(U%EXSsA%Z__>8z+epk DI%10H diff --git a/public/tiny_mce/plugins/table/images/table_delete_row.gif b/public/tiny_mce/plugins/table/images/table_delete_row.gif deleted file mode 100644 index 1997065fb2b447f498ab7fda4b7e21dcbb25dc81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1CIoUh=PEGhJcKQgo1{IiU|b`3j#VmBuw~FFylkPf)5Q7 z7Bo!QFk!}m2{SfKSg@gC#fJ$SK1|s0VZn+63pO0su;ai2Ap5|F4JUx;|A7nt58U{F z;lck0FaAIH@c#o4{rLYMi2nZv+crv!hQJ^S0mYvz%nS@F3_2h;f${_cM>m5fhm6OD z1qYisgtcN$Ojy9mEvgi>fT8hWN4JEt$%Yw%N7~tCoGZROc*x+)p`mC~@Svg5n~l@8 z>cxRXXEq)or2`@y3m*9JNg2eP*va6?$lx(i=t)DOQwuAXkirbBgarR4#!XpwwGCZQ}j-u$i5iXM38c!-9o(cUMTVu`pNz0PJ9X!TQ3xphWMO7tP+`ykxe1gf7&uxPJUL`M zHY_;U%pokNQs8*7k%5a_=z@SE(i5MkXeC zPNt5?0yW=8hN62%Dla%PGcz-pWCS=goN5wqs`((G@bc1P7WEc}kBSW;s{+{lBo>-5 iu&xUgtrHbga%dGy+03=YpedVyC-?NbIlm1R7_0$Wk9qk3 diff --git a/public/tiny_mce/plugins/table/images/table_insert_col_before.gif b/public/tiny_mce/plugins/table/images/table_insert_col_before.gif deleted file mode 100644 index 5d1ff37afea7bb2e67952400e00184aa275d6764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&uxOJUL`M zHY_;U%)u+PW5EN5h88YU7mp7DN{(zYMmj4p0u!3~q*V&u{5arzY@(RFO-4h5!|^7D zIH?}ZVugm;rn%2dUMy&AWMq^w(NJJWb>vXAtKet|SsBK;hMu<;?0m9#Rd5 h!d40F?cxwzaHwNr1Z$MUMpFj1Z7JoaTqOh;tN|1Me9r&? diff --git a/public/tiny_mce/plugins/table/images/table_insert_row_after.gif b/public/tiny_mce/plugins/table/images/table_insert_row_after.gif deleted file mode 100644 index c3aa15f93a9d50777ca3a3b2309fc807ceabc57a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%)uMAz#x%{g`JbTZ-#`DOLGT{dj|*Oqh`h)X6?Ek4-y$X8X1FD*?2NJv$hH7 z&6{JfXpzqZDa$&I13@aDj5?v~Qf7WQ*v!VmA#i}h;Q=$htVPBS0l|h)240Jt69SHm a!Hpb79uX5BFnBXLF$=_=o|fvsU=08}a&%e% diff --git a/public/tiny_mce/plugins/table/images/table_insert_row_before.gif b/public/tiny_mce/plugins/table/images/table_insert_row_before.gif deleted file mode 100644 index c3271e54937cb8dbfb435ee8bc2d02157cff1448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%pt55lkwqTGaC=w17?0%i;Nu$1RC5Kcr9{H2skpjHgXtwL`-~0*X=}WE7QHI{4WtnErk^c$i_Har&nt0T0z!7V6jbF?3B; b3|uVFrNMjfN;AWXK;{oIr@tjQFjxZsoSk_C diff --git a/public/tiny_mce/plugins/table/images/table_merge_cells.gif b/public/tiny_mce/plugins/table/images/table_merge_cells.gif deleted file mode 100644 index 494887efdd5afe862850a097a6eb079e890d174c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 383 zcmZ?wbhEHb6k!lyxXQp_;E{0u&h-U5E)-1IaO?U7hlB+m-oGiB@nFJ^{|X)x5-Jun ztoRQE6IL8}_T>JC6aObH*pSe$;oH~GZ(co5XgJWY;6XyghJpz|jS~Vg7Ce4%d%=ba z3l99Bu;Kr`YuCPi|6VZTLqNfXS1+Etd-Jkk#(@b74j2Rg%{Z{(!vBJX4G9$o5;`t? zfB$~Lj{glC{x4W@AfRADanD+VhzSlE3mAw1ia%Kx85kHDbU#ckyxU{6|t;g;!L3e zC-rzkjkY#^ewl8LMn?U3&GybN8C?$1z6m^H9aCjEIAq!Tc;mUIbWdNzE#4;}W?(RX zp{yRa!a5g$c;i)Dw=1yka^Axuv0#zjL3ZsUPREQEUgl6ZbZ$Mvt=o6*`rd!=(8ZC# F8UP)*sT=?R diff --git a/public/tiny_mce/plugins/table/images/table_row_props.gif b/public/tiny_mce/plugins/table/images/table_row_props.gif deleted file mode 100644 index a53cdd8bf6b04c1090d9c545963647ad4b6e37d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 367 zcmZ?wbhEHb6k!lyxXJ(m|AFAg{{sguT)6Py!-xM9R(x2n;=qO-7Y>|waN)*>2QU6N zEcoCMP_W>@|A2&s1si~>{x_`nFk#1k1CN9a7d}i_abN*Z@r@4?7Hn9s;lPFi7Yz24J qXJq17&CR}!RdT7bB&Re7ht%Q4Vv@Tzikv!q=Ctqm3m07-8LRYPHG4K-4%K zrLQ<6{!)m7Z@3IAJI+H*sg#gNXc?GdRk4u@a6&I%5-NrzDi9DbF)=xT0U?BjDiVq@ zD#}oy{}jR diff --git a/public/tiny_mce/plugins/table/langs/ar.js b/public/tiny_mce/plugins/table/langs/ar.js deleted file mode 100644 index 9e474b5..0000000 --- a/public/tiny_mce/plugins/table/langs/ar.js +++ /dev/null @@ -1,41 +0,0 @@ -// Arabic lang variables - -tinyMCELang['lang_table_desc'] = 'إدراج/تحرير جدول'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Insert row before'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Insert row after'; -tinyMCELang['lang_table_delete_row_desc'] = 'حذف صفوف'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Insert column before'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Insert column after'; -tinyMCELang['lang_table_delete_col_desc'] = 'حذف أعمدة'; -tinyMCELang['lang_insert_table_title'] = 'إدراج/تحرير جدول'; -tinyMCELang['lang_insert_table_width'] = 'العرض'; -tinyMCELang['lang_insert_table_height'] = 'الارتفاع'; -tinyMCELang['lang_insert_table_cols'] = 'أعمدة'; -tinyMCELang['lang_insert_table_rows'] = 'صفوف'; -tinyMCELang['lang_insert_table_cellspacing'] = 'تباعد الخلايا'; -tinyMCELang['lang_insert_table_cellpadding'] = 'المسافة البادئة'; -tinyMCELang['lang_insert_table_border'] = 'سمك الحدود'; -tinyMCELang['lang_insert_table_align'] = 'المحاذاة'; -tinyMCELang['lang_insert_table_align_default'] = 'Default'; -tinyMCELang['lang_insert_table_align_left'] = 'يسار'; -tinyMCELang['lang_insert_table_align_right'] = 'يمين'; -tinyMCELang['lang_insert_table_align_middle'] = 'وسط'; -tinyMCELang['lang_insert_table_class'] = 'Class'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/cs.js b/public/tiny_mce/plugins/table/langs/cs.js deleted file mode 100644 index 5d45ada..0000000 --- a/public/tiny_mce/plugins/table/langs/cs.js +++ /dev/null @@ -1,41 +0,0 @@ -// CZ lang variables thanks to "Pavel Novák" - -tinyMCELang['lang_table_desc'] = 'Vložit novou tabulku'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Vložit øádek pøed'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Vložit øádek po'; -tinyMCELang['lang_table_delete_row_desc'] = 'Smazat øádek'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Vložit sloupec pøed'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Vložit sloupec po'; -tinyMCELang['lang_table_delete_col_desc'] = 'Odstranit sloupec'; -tinyMCELang['lang_insert_table_title'] = 'Vložit/upravit tabulku'; -tinyMCELang['lang_insert_table_width'] = 'Šíøka'; -tinyMCELang['lang_insert_table_height'] = 'Výška'; -tinyMCELang['lang_insert_table_cols'] = 'Sloupce'; -tinyMCELang['lang_insert_table_rows'] = 'Øádky'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Vnìjší okraj bunìk'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Vnitøní okraj bunìk'; -tinyMCELang['lang_insert_table_border'] = 'Rámeèek'; -tinyMCELang['lang_insert_table_align'] = 'Zarovnání'; -tinyMCELang['lang_insert_table_align_default'] = 'Výchozí'; -tinyMCELang['lang_insert_table_align_left'] = 'Vlevo'; -tinyMCELang['lang_insert_table_align_right'] = 'Vpravo'; -tinyMCELang['lang_insert_table_align_middle'] = 'Na støed'; -tinyMCELang['lang_insert_table_class'] = 'Class'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/da.js b/public/tiny_mce/plugins/table/langs/da.js deleted file mode 100644 index 31d1cf0..0000000 --- a/public/tiny_mce/plugins/table/langs/da.js +++ /dev/null @@ -1,41 +0,0 @@ -// DK lang variables contributed by Jan Moelgaard - -tinyMCELang['lang_table_desc'] = 'Indsætter en ny tabel'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Indsæt række foran'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Indsæt række efter'; -tinyMCELang['lang_table_delete_row_desc'] = 'Slet række'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Indsæt kolonne foran'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Indslt kolonne efter'; -tinyMCELang['lang_table_delete_col_desc'] = 'Fjern kolonne'; -tinyMCELang['lang_insert_table_title'] = 'Indsæt/rediger tabel'; -tinyMCELang['lang_insert_table_width'] = 'Bredde'; -tinyMCELang['lang_insert_table_height'] = 'Højde'; -tinyMCELang['lang_insert_table_cols'] = 'Kolonner'; -tinyMCELang['lang_insert_table_rows'] = 'Rækker'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Afstand mellem celler'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellemargen'; -tinyMCELang['lang_insert_table_border'] = 'Kant'; -tinyMCELang['lang_insert_table_align'] = 'Justering'; -tinyMCELang['lang_insert_table_align_default'] = 'Standard'; -tinyMCELang['lang_insert_table_align_left'] = 'Venstre'; -tinyMCELang['lang_insert_table_align_right'] = 'Højre'; -tinyMCELang['lang_insert_table_align_middle'] = 'Midt i'; -tinyMCELang['lang_insert_table_class'] = 'Klasse'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/de.js b/public/tiny_mce/plugins/table/langs/de.js deleted file mode 100644 index ed228ae..0000000 --- a/public/tiny_mce/plugins/table/langs/de.js +++ /dev/null @@ -1,41 +0,0 @@ -// DE lang variables - -tinyMCELang['lang_table_desc'] = 'Neue Tabelle einfügen / Tabelle bearbeiten'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Zeile davor einfügen'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Zeile danach einfügen'; -tinyMCELang['lang_table_delete_row_desc'] = 'Zeile löschen'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Spalte davor einfügen'; -tinyMCELang['lang_table_insert_col_after_desc'] = ' Spalte danach einfügen'; -tinyMCELang['lang_table_delete_col_desc'] = 'Spalte löschen'; -tinyMCELang['lang_insert_table_title'] = 'Tabelle Einfügen/Bearbeiten'; -tinyMCELang['lang_insert_table_width'] = 'Breite'; -tinyMCELang['lang_insert_table_height'] = 'Höhe'; -tinyMCELang['lang_insert_table_cols'] = 'Spalten'; -tinyMCELang['lang_insert_table_rows'] = 'Zeilen'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Außenabstand'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Innenabstand'; -tinyMCELang['lang_insert_table_border'] = 'Rahmen'; -tinyMCELang['lang_insert_table_align'] = 'Ausrichten'; -tinyMCELang['lang_insert_table_align_default'] = 'Normal'; -tinyMCELang['lang_insert_table_align_left'] = 'Links'; -tinyMCELang['lang_insert_table_align_right'] = 'Rechts'; -tinyMCELang['lang_insert_table_align_middle'] = 'Zentriert'; -tinyMCELang['lang_insert_table_class'] = 'Klasse'; -tinyMCELang['lang_table_row_title'] = 'Zeileneigenschaften'; -tinyMCELang['lang_table_cell_title'] = 'Zelleneigenschaften'; -tinyMCELang['lang_table_row_desc'] = 'Reiheneigenschaften'; -tinyMCELang['lang_table_cell_desc'] = 'Zelleneigenschaften'; -tinyMCELang['lang_insert_table_valign'] = 'Vertikale Ausrichtung'; -tinyMCELang['lang_insert_table_align_top'] = 'Oben'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Unten'; -tinyMCELang['lang_table_props_desc'] = 'Tabelleneigenschaften'; -tinyMCELang['lang_table_bordercolor'] = 'Rahmenfarbe'; -tinyMCELang['lang_table_bgcolor'] = 'Hintergrundfarbe'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/el.js b/public/tiny_mce/plugins/table/langs/el.js deleted file mode 100644 index 672e6ca..0000000 --- a/public/tiny_mce/plugins/table/langs/el.js +++ /dev/null @@ -1,41 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_table_desc'] = 'ÅéóáãùãÞ ðßíáêá'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'ÅéóáãùãÞ ãñáììÞò åðÜíù'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'ÅéóáãùãÞ ãñáììÞò êÜôù'; -tinyMCELang['lang_table_delete_row_desc'] = 'ÄéáãñáöÞ ãñáììÞò'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'ÅéóáãùãÞ óôÞëçò áñéóôåñÜ'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'ÅéóáãùãÞ óôÞëçò äåîéÜ'; -tinyMCELang['lang_table_delete_col_desc'] = 'ÄéáãñáöÞ óôÞëçò'; -tinyMCELang['lang_insert_table_title'] = 'ÅéóáãùãÞ/Äéüñèùóç ðßíáêá'; -tinyMCELang['lang_insert_table_width'] = 'ÐëÜôïò'; -tinyMCELang['lang_insert_table_height'] = '¾øïò'; -tinyMCELang['lang_insert_table_cols'] = 'ÓôÞëåò'; -tinyMCELang['lang_insert_table_rows'] = 'ÃñáììÝò'; -tinyMCELang['lang_insert_table_cellspacing'] = 'ÄéÜóôé÷ï'; -tinyMCELang['lang_insert_table_cellpadding'] = 'ÃÝìéóìá'; -tinyMCELang['lang_insert_table_border'] = 'Ðåñßãñáììá'; -tinyMCELang['lang_insert_table_align'] = 'Óôïß÷éóç'; -tinyMCELang['lang_insert_table_align_default'] = 'Ðñïêáè.'; -tinyMCELang['lang_insert_table_align_left'] = 'ÁñéóôåñÜ'; -tinyMCELang['lang_insert_table_align_right'] = 'ÄåîéÜ'; -tinyMCELang['lang_insert_table_align_middle'] = 'Óôï êÝíôñï'; -tinyMCELang['lang_insert_table_class'] = 'ÊëÜóç'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/en.js b/public/tiny_mce/plugins/table/langs/en.js deleted file mode 100644 index 40282c2..0000000 --- a/public/tiny_mce/plugins/table/langs/en.js +++ /dev/null @@ -1,41 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_table_desc'] = 'Inserts a new table'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Insert row before'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Insert row after'; -tinyMCELang['lang_table_delete_row_desc'] = 'Delete row'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Insert column before'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Insert column after'; -tinyMCELang['lang_table_delete_col_desc'] = 'Remove col'; -tinyMCELang['lang_insert_table_title'] = 'Insert/Modify table'; -tinyMCELang['lang_insert_table_width'] = 'Width'; -tinyMCELang['lang_insert_table_height'] = 'Height'; -tinyMCELang['lang_insert_table_cols'] = 'Columns'; -tinyMCELang['lang_insert_table_rows'] = 'Rows'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Border'; -tinyMCELang['lang_insert_table_align'] = 'Alignment'; -tinyMCELang['lang_insert_table_align_default'] = 'Default'; -tinyMCELang['lang_insert_table_align_left'] = 'Left'; -tinyMCELang['lang_insert_table_align_right'] = 'Right'; -tinyMCELang['lang_insert_table_align_middle'] = 'Center'; -tinyMCELang['lang_insert_table_class'] = 'Class'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/es.js b/public/tiny_mce/plugins/table/langs/es.js deleted file mode 100644 index ab703b5..0000000 --- a/public/tiny_mce/plugins/table/langs/es.js +++ /dev/null @@ -1,41 +0,0 @@ -// ES lang variables by Alvaro Velasco - -tinyMCELang['lang_table_desc'] = 'Insertar una tabla nueva'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Insertar una fila antes'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Insertar una fila despues'; -tinyMCELang['lang_table_delete_row_desc'] = 'Eliminar una fila'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Insertar una columna before'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Insertar columna after'; -tinyMCELang['lang_table_delete_col_desc'] = 'Eliminar una columna'; -tinyMCELang['lang_insert_table_title'] = 'Insertar/Modificar tabla'; -tinyMCELang['lang_insert_table_width'] = 'Anchura'; -tinyMCELang['lang_insert_table_height'] = 'Altura'; -tinyMCELang['lang_insert_table_cols'] = 'Columnas'; -tinyMCELang['lang_insert_table_rows'] = 'Filas'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Espacio entre celdas'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Desplazamiento entre celdas'; -tinyMCELang['lang_insert_table_border'] = 'Borde'; -tinyMCELang['lang_insert_table_align'] = 'Alineamiento'; -tinyMCELang['lang_insert_table_align_default'] = 'Por defecto'; -tinyMCELang['lang_insert_table_align_left'] = 'Izquierda'; -tinyMCELang['lang_insert_table_align_right'] = 'Derecha'; -tinyMCELang['lang_insert_table_align_middle'] = 'Centro'; -tinyMCELang['lang_insert_table_class'] = 'Class'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/fa.js b/public/tiny_mce/plugins/table/langs/fa.js deleted file mode 100644 index 14ed242..0000000 --- a/public/tiny_mce/plugins/table/langs/fa.js +++ /dev/null @@ -1,45 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_table_desc'] = '??? ???? ????'; -tinyMCELang['lang_table_insert_row_before_desc'] = '??? ??? ???? ??? ?? ??? ????'; -tinyMCELang['lang_table_insert_row_after_desc'] = '??? ??? ???? ?? ?? ??? ????'; -tinyMCELang['lang_table_delete_row_desc'] = '??? ???'; -tinyMCELang['lang_table_insert_col_before_desc'] = '??? ???? ???? ??? ?? ???? ????'; -tinyMCELang['lang_table_insert_col_after_desc'] = '??? ???? ???? ?? ?? ???? ????'; -tinyMCELang['lang_table_delete_col_desc'] = '??? ????'; -tinyMCELang['lang_insert_table_title'] = '??? ? ?????? ????'; -tinyMCELang['lang_insert_table_width'] = '???'; -tinyMCELang['lang_insert_table_height'] = '??????'; -tinyMCELang['lang_insert_table_cols'] = '????? ??????'; -tinyMCELang['lang_insert_table_rows'] = '????? ?????'; -tinyMCELang['lang_insert_table_cellspacing'] = '????? ?? ???? ????'; -tinyMCELang['lang_insert_table_cellpadding'] = '????? ??? ?? ?????? ????'; -tinyMCELang['lang_insert_table_border'] = '?????'; -tinyMCELang['lang_insert_table_align'] = '??? ???? ????'; -tinyMCELang['lang_insert_table_align_default'] = '??? ???'; -tinyMCELang['lang_insert_table_align_left'] = '??'; -tinyMCELang['lang_insert_table_align_right'] = '????'; -tinyMCELang['lang_insert_table_align_middle'] = '???'; -tinyMCELang['lang_insert_table_class'] = '????'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/fi.js b/public/tiny_mce/plugins/table/langs/fi.js deleted file mode 100644 index a0866ee..0000000 --- a/public/tiny_mce/plugins/table/langs/fi.js +++ /dev/null @@ -1,41 +0,0 @@ -// FI lang variables by Urho Konttori from Absolutions - -tinyMCELang['lang_table_desc'] = 'Lisää uusi taulu'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Lisää rivi edelle'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Lisää rivi jälkeen'; -tinyMCELang['lang_table_delete_row_desc'] = 'Posita rivi'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Lisää sarake edelle'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Lisää sarake jälkeen'; -tinyMCELang['lang_table_delete_col_desc'] = 'Poista sarake'; -tinyMCELang['lang_insert_table_title'] = 'Lisää/muokkaa taulua'; -tinyMCELang['lang_insert_table_width'] = 'Leveys'; -tinyMCELang['lang_insert_table_height'] = 'Korkeus'; -tinyMCELang['lang_insert_table_cols'] = 'Sarakkeet'; -tinyMCELang['lang_insert_table_rows'] = 'Rivit'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Solujen väli'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Solun reunan ja sisällön väli'; -tinyMCELang['lang_insert_table_border'] = 'Reuna'; -tinyMCELang['lang_insert_table_align'] = 'Asettelu'; -tinyMCELang['lang_insert_table_align_default'] = 'Oletus'; -tinyMCELang['lang_insert_table_align_left'] = 'Vasen'; -tinyMCELang['lang_insert_table_align_right'] = 'Oikea'; -tinyMCELang['lang_insert_table_align_middle'] = 'Keskelle'; -tinyMCELang['lang_insert_table_delta_height'] = 20; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/fr.js b/public/tiny_mce/plugins/table/langs/fr.js deleted file mode 100644 index b4511ac..0000000 --- a/public/tiny_mce/plugins/table/langs/fr.js +++ /dev/null @@ -1,41 +0,0 @@ -// French lang variables by Laurent Dran - -tinyMCELang['lang_table_desc'] = 'Insérer un nouveau tableau'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Insérer une ligne avant'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Insérer une ligne aprés'; -tinyMCELang['lang_table_delete_row_desc'] = 'Supprimer la ligne'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Insérer une colonne avant'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Insérer une colonne aprés'; -tinyMCELang['lang_table_delete_col_desc'] = 'Supprimer la colonne'; -tinyMCELang['lang_insert_table_title'] = 'Insérer/Modifier le tableau'; -tinyMCELang['lang_insert_table_width'] = 'Largeur'; -tinyMCELang['lang_insert_table_height'] = 'Hauteur'; -tinyMCELang['lang_insert_table_cols'] = 'Colonnes'; -tinyMCELang['lang_insert_table_rows'] = 'Lignes'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Bordure'; -tinyMCELang['lang_insert_table_align'] = 'Alignement'; -tinyMCELang['lang_insert_table_align_default'] = 'Défaut'; -tinyMCELang['lang_insert_table_align_left'] = 'Gauche'; -tinyMCELang['lang_insert_table_align_right'] = 'Droit'; -tinyMCELang['lang_insert_table_align_middle'] = 'Milieu'; -tinyMCELang['lang_insert_table_class'] = 'Classe CSS'; -tinyMCELang['lang_table_row_title'] = 'Propriétés de la rangée'; -tinyMCELang['lang_table_cell_title'] = 'Propriétés de la cellule'; -tinyMCELang['lang_table_row_desc'] = 'Propriétés de la rangée'; -tinyMCELang['lang_table_cell_desc'] = 'Propriétés de la cellule'; -tinyMCELang['lang_insert_table_valign'] = 'Alignement Vertical'; -tinyMCELang['lang_insert_table_align_top'] = 'Haut'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bas'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/fr_ca.js b/public/tiny_mce/plugins/table/langs/fr_ca.js deleted file mode 100644 index e9bcdc9..0000000 --- a/public/tiny_mce/plugins/table/langs/fr_ca.js +++ /dev/null @@ -1,41 +0,0 @@ -// Canadian French lang variables by Virtuelcom - -tinyMCELang['lang_table_desc'] = 'Insérer un nouveau tableau'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Insérer une ligne avant'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Insérer une ligne après'; -tinyMCELang['lang_table_delete_row_desc'] = 'Supprimer la ligne'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Insérer une colonne avant'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Insérer une colonne après'; -tinyMCELang['lang_table_delete_col_desc'] = 'Supprimer la colonne'; -tinyMCELang['lang_insert_table_title'] = 'Insérer/Modifier le tableau'; -tinyMCELang['lang_insert_table_width'] = 'Largeur'; -tinyMCELang['lang_insert_table_height'] = 'Hauteur'; -tinyMCELang['lang_insert_table_cols'] = 'Colonnes'; -tinyMCELang['lang_insert_table_rows'] = 'Lignes'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Bordure'; -tinyMCELang['lang_insert_table_align'] = 'Alignement'; -tinyMCELang['lang_insert_table_align_default'] = 'Défaut'; -tinyMCELang['lang_insert_table_align_left'] = 'Gauche'; -tinyMCELang['lang_insert_table_align_right'] = 'Droit'; -tinyMCELang['lang_insert_table_align_middle'] = 'Milieu'; -tinyMCELang['lang_insert_table_class'] = 'Classe CSS'; -tinyMCELang['lang_table_row_title'] = 'Propriétés de ligne'; -tinyMCELang['lang_table_cell_title'] = 'Propriétés de cellule'; -tinyMCELang['lang_table_row_desc'] = 'Propriétés de ligne'; -tinyMCELang['lang_table_cell_desc'] = 'Propriétés de cellule'; -tinyMCELang['lang_insert_table_valign'] = 'Alignement vertical'; -tinyMCELang['lang_insert_table_align_top'] = 'Haut'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bas'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/hu.js b/public/tiny_mce/plugins/table/langs/hu.js deleted file mode 100644 index 2d53b89..0000000 --- a/public/tiny_mce/plugins/table/langs/hu.js +++ /dev/null @@ -1,41 +0,0 @@ -// HU lang variables, Edited by 2XP (2xp@dino.hu) - -tinyMCELang['lang_table_desc'] = 'Új táblázat beillesztése'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Sor beillesztése elé'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Sor beillesztése utána'; -tinyMCELang['lang_table_delete_row_desc'] = 'Sor törlése'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Oszlop beillsztése elé'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Oszlop beillesztése utána'; -tinyMCELang['lang_table_delete_col_desc'] = 'Oszlop eltávolítása'; -tinyMCELang['lang_insert_table_title'] = 'Tábla beillesztése/módosítása'; -tinyMCELang['lang_insert_table_width'] = 'Szélesség'; -tinyMCELang['lang_insert_table_height'] = 'Magasság'; -tinyMCELang['lang_insert_table_cols'] = 'Oszlopok'; -tinyMCELang['lang_insert_table_rows'] = 'Sorok'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Keret'; -tinyMCELang['lang_insert_table_align'] = 'Igazítás'; -tinyMCELang['lang_insert_table_align_default'] = 'Alapértelmezett'; -tinyMCELang['lang_insert_table_align_left'] = 'Balra'; -tinyMCELang['lang_insert_table_align_right'] = 'Jobbra'; -tinyMCELang['lang_insert_table_align_middle'] = 'Középre'; -tinyMCELang['lang_insert_table_class'] = 'Class'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/it.js b/public/tiny_mce/plugins/table/langs/it.js deleted file mode 100644 index 5e9380b..0000000 --- a/public/tiny_mce/plugins/table/langs/it.js +++ /dev/null @@ -1,41 +0,0 @@ -// Variabili di lingua IT - fabrix.xm@lombardiacom.it - -tinyMCELang['lang_table_desc'] = 'Inserisci una nuova tabella'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Inserisci una riga prima'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Inserisci una riga dopo'; -tinyMCELang['lang_table_delete_row_desc'] = 'Cancella riga'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Inserisci colonna prima'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Inserisci colonna dopo'; -tinyMCELang['lang_table_delete_col_desc'] = 'Rimuovi colonna'; -tinyMCELang['lang_insert_table_title'] = 'Inserisci/modifica tabella'; -tinyMCELang['lang_insert_table_width'] = 'Larghezza'; -tinyMCELang['lang_insert_table_height'] = 'Altezza'; -tinyMCELang['lang_insert_table_cols'] = 'Colonne'; -tinyMCELang['lang_insert_table_rows'] = 'Righe'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Bordo'; -tinyMCELang['lang_insert_table_align'] = 'Allineamento'; -tinyMCELang['lang_insert_table_align_default'] = 'Default'; -tinyMCELang['lang_insert_table_align_left'] = 'Sinistra'; -tinyMCELang['lang_insert_table_align_right'] = 'Destra'; -tinyMCELang['lang_insert_table_align_middle'] = 'Centro'; -tinyMCELang['lang_insert_table_class'] = 'Classe'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/ja.js b/public/tiny_mce/plugins/table/langs/ja.js deleted file mode 100644 index 7d02594..0000000 --- a/public/tiny_mce/plugins/table/langs/ja.js +++ /dev/null @@ -1,41 +0,0 @@ -// JP lang variables - -tinyMCELang['lang_table_desc'] = '$B%F!<%V%k(B'; -tinyMCELang['lang_table_insert_row_before_desc'] = '$B9TA^F~(B($BA0(B)'; -tinyMCELang['lang_table_insert_row_after_desc'] = '$B9TA^F~(B($B8e(B)'; -tinyMCELang['lang_table_delete_row_desc'] = '$B9T:o=|(B'; -tinyMCELang['lang_table_insert_col_before_desc'] = '$BNsA^F~(B($BA0(B)'; -tinyMCELang['lang_table_insert_col_after_desc'] = '$BNsA^F~(B($B8e(B)'; -tinyMCELang['lang_table_delete_col_desc'] = '$BNs:o=|(B'; -tinyMCELang['lang_insert_table_title'] = '$B%F!<%V%k$NA^F~(B/$BJT=8(B'; -tinyMCELang['lang_insert_table_cols'] = '$BNs?t(B'; -tinyMCELang['lang_insert_table_rows'] = '$B9T?t(B'; -tinyMCELang['lang_insert_table_cellspacing'] = '$B%;%kM>Gr(B'; -tinyMCELang['lang_insert_table_cellpadding'] = '$B%;%k5M$a(B'; -tinyMCELang['lang_insert_table_align'] = '$B0LCVD4@0(B'; -tinyMCELang['lang_insert_table_align_default'] = '$B0EL[(B'; -tinyMCELang['lang_insert_table_align_left'] = '$B:85M$a(B'; -tinyMCELang['lang_insert_table_align_right'] = '$B1&5M$a(B'; -tinyMCELang['lang_insert_table_align_middle'] = '$BCf1{4s$;(B'; -tinyMCELang['lang_insert_table_width'] = '$BI}(B'; -tinyMCELang['lang_insert_table_height'] = '$B9b$5(B'; -tinyMCELang['lang_insert_table_border'] = '$B6-3&@~(B'; -tinyMCELang['lang_insert_table_class'] = '$B%/%i%9(B'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/ko.js b/public/tiny_mce/plugins/table/langs/ko.js deleted file mode 100644 index 38389f8..0000000 --- a/public/tiny_mce/plugins/table/langs/ko.js +++ /dev/null @@ -1,41 +0,0 @@ -// KO lang variables - -tinyMCELang['lang_table_desc'] = 'Ç¥ ³Ö±â'; -tinyMCELang['lang_table_insert_row_before_desc'] = '¾Õ¿¡ Çà ³Ö±â'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'µÚ¿¡ Çà ³Ö±â'; -tinyMCELang['lang_table_delete_row_desc'] = 'Çà Áö¿ì±â'; -tinyMCELang['lang_table_insert_col_before_desc'] = '¾Õ¿¡ ¿­ ³Ö±â'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'µÚ¿¡ ¿­ ³Ö±â'; -tinyMCELang['lang_table_delete_col_desc'] = '¿­ Áö¿ì±â'; -tinyMCELang['lang_insert_table_title'] = 'Ç¥ ³Ö±â/°íÄ¡±â'; -tinyMCELang['lang_insert_table_width'] = '³Êºñ'; -tinyMCELang['lang_insert_table_height'] = '³ôÀÌ'; -tinyMCELang['lang_insert_table_cols'] = 'Çà'; -tinyMCELang['lang_insert_table_rows'] = '¿­'; -tinyMCELang['lang_insert_table_cellspacing'] = '¼¿ °£°Ý'; -tinyMCELang['lang_insert_table_cellpadding'] = '¼¿ ¿©¹é'; -tinyMCELang['lang_insert_table_border'] = 'Å׵θ®'; -tinyMCELang['lang_insert_table_align'] = 'Á¤·Ä'; -tinyMCELang['lang_insert_table_align_default'] = '±âº»°ª'; -tinyMCELang['lang_insert_table_align_left'] = '¿ÞÂÊ'; -tinyMCELang['lang_insert_table_align_right'] = '¿À¸¥ÂÊ'; -tinyMCELang['lang_insert_table_align_middle'] = '°¡¿îµ¥'; -tinyMCELang['lang_insert_table_class'] = 'Ŭ·¡½º'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/nl.js b/public/tiny_mce/plugins/table/langs/nl.js deleted file mode 100644 index ea48361..0000000 --- a/public/tiny_mce/plugins/table/langs/nl.js +++ /dev/null @@ -1,41 +0,0 @@ -// NL lang variables - -tinyMCELang['lang_table_desc'] = 'Voeg een nieuwe tabel in'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Voeg rij in voor ...'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Voeg rij in na ...'; -tinyMCELang['lang_table_delete_row_desc'] = 'Verwijder rij'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Voeg kolom in voor ...'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Voeg kolom in na ...'; -tinyMCELang['lang_table_delete_col_desc'] = 'Verwijder kolom'; -tinyMCELang['lang_insert_table_title'] = 'Invoegen/Bewerken tabel'; -tinyMCELang['lang_insert_table_width'] = 'Breedte'; -tinyMCELang['lang_insert_table_height'] = 'Hoogte'; -tinyMCELang['lang_insert_table_cols'] = 'Kolommen'; -tinyMCELang['lang_insert_table_rows'] = 'Rijen'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Celafstand'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Celvulling'; -tinyMCELang['lang_insert_table_border'] = 'Omranding'; -tinyMCELang['lang_insert_table_align'] = 'Positionering'; -tinyMCELang['lang_insert_table_align_default'] = 'Standaard'; -tinyMCELang['lang_insert_table_align_left'] = 'Links'; -tinyMCELang['lang_insert_table_align_right'] = 'Rechts'; -tinyMCELang['lang_insert_table_align_middle'] = 'Midden'; -tinyMCELang['lang_insert_table_class'] = 'CSS-Stijl'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/no.js b/public/tiny_mce/plugins/table/langs/no.js deleted file mode 100644 index db1a8d3..0000000 --- a/public/tiny_mce/plugins/table/langs/no.js +++ /dev/null @@ -1,41 +0,0 @@ -// NO lang variables - -tinyMCELang['lang_table_desc'] = 'Opprett/endre tabell'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Opprett rad før'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Opprett rad etter'; -tinyMCELang['lang_table_delete_row_desc'] = 'Fjern rad'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Opprett kolonne før'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Opprett kolonne etter'; -tinyMCELang['lang_table_delete_col_desc'] = 'Fjern kolonne'; -tinyMCELang['lang_insert_table_title'] = 'Opprett/endre tabell'; -tinyMCELang['lang_insert_table_width'] = 'Bredde'; -tinyMCELang['lang_insert_table_height'] = 'Høyde'; -tinyMCELang['lang_insert_table_cols'] = 'Kolonner'; -tinyMCELang['lang_insert_table_rows'] = 'Rader'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Celle-mellomrom'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Celle-padding'; -tinyMCELang['lang_insert_table_border'] = 'Rammebredde'; -tinyMCELang['lang_insert_table_align'] = 'Justering'; -tinyMCELang['lang_insert_table_align_default'] = 'Ingen'; -tinyMCELang['lang_insert_table_align_left'] = 'Venstre'; -tinyMCELang['lang_insert_table_align_right'] = 'Høyre'; -tinyMCELang['lang_insert_table_align_middle'] = 'Midten'; -tinyMCELang['lang_insert_table_class'] = 'Stil'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/pl.js b/public/tiny_mce/plugins/table/langs/pl.js deleted file mode 100644 index 1b1dd30..0000000 --- a/public/tiny_mce/plugins/table/langs/pl.js +++ /dev/null @@ -1,39 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_table_desc'] = 'Wstaw nowa tabele'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Wstaw wiersz przed'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Wstaw wiersz po'; -tinyMCELang['lang_table_delete_row_desc'] = 'Skasuj wiersz'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Wstaw kolumne przed'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Wstaw kolumne po'; -tinyMCELang['lang_table_delete_col_desc'] = 'Skasuj kolumne'; -tinyMCELang['lang_insert_table_title'] = 'Wstaw/Modyfikuj tabele'; -tinyMCELang['lang_insert_table_width'] = 'Szerokosc'; -tinyMCELang['lang_insert_table_height'] = 'Wysokosc'; -tinyMCELang['lang_insert_table_cols'] = 'Kolumny'; -tinyMCELang['lang_insert_table_rows'] = 'Wiersze'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellspacing'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellpadding'; -tinyMCELang['lang_insert_table_border'] = 'Ramka'; -tinyMCELang['lang_insert_table_align'] = 'Wyrównanie'; -tinyMCELang['lang_insert_table_align_default'] = 'Domyslny'; -tinyMCELang['lang_insert_table_align_left'] = 'Do lewej'; -tinyMCELang['lang_insert_table_align_right'] = 'Do prawej'; -tinyMCELang['lang_insert_table_align_middle'] = 'Wycentrowanie'; -tinyMCELang['lang_insert_table_class'] = 'Klasa'; -tinyMCELang['lang_table_row_title'] = 'Wlasciwosci wiersza'; -tinyMCELang['lang_table_cell_title'] = 'Wlasciwosci komórki'; -tinyMCELang['lang_table_row_desc'] = 'Wlasciwosci wiersza'; -tinyMCELang['lang_table_cell_desc'] = 'Wlasciwosci komórki'; -tinyMCELang['lang_insert_table_valign'] = 'Wyrównanie pionowe'; -tinyMCELang['lang_insert_table_align_top'] = 'do góry'; -tinyMCELang['lang_insert_table_align_bottom'] = 'do dolu'; -tinyMCELang['lang_table_props_desc'] = 'Wlasciwosci tabeli'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/pt.js b/public/tiny_mce/plugins/table/langs/pt.js deleted file mode 100644 index 5a1c12a..0000000 --- a/public/tiny_mce/plugins/table/langs/pt.js +++ /dev/null @@ -1,41 +0,0 @@ -// PT lang variables - -tinyMCELang['lang_table_desc'] = 'Insere uma nova tabela'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Inserir linha antes'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Inserir linha depois'; -tinyMCELang['lang_table_delete_row_desc'] = 'Eliminar linha'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Inserir coluna antes'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Inserir coluna depois'; -tinyMCELang['lang_table_delete_col_desc'] = 'Remover coluna'; -tinyMCELang['lang_insert_table_title'] = 'Inserir/Modificar tabela'; -tinyMCELang['lang_insert_table_width'] = 'Largura'; -tinyMCELang['lang_insert_table_height'] = 'Altura'; -tinyMCELang['lang_insert_table_cols'] = 'Colunas'; -tinyMCELang['lang_insert_table_rows'] = 'Linhas'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Espaça
mento'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Margem interior'; -tinyMCELang['lang_insert_table_border'] = 'Borda'; -tinyMCELang['lang_insert_table_align'] = 'Alinhamento'; -tinyMCELang['lang_insert_table_align_default'] = 'Por omissão'; -tinyMCELang['lang_insert_table_align_left'] = 'Esquerda'; -tinyMCELang['lang_insert_table_align_right'] = 'Direita'; -tinyMCELang['lang_insert_table_align_middle'] = 'Centrado'; -tinyMCELang['lang_insert_table_class'] = 'Classe de CSS'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/readme.txt b/public/tiny_mce/plugins/table/langs/readme.txt deleted file mode 100644 index ef48d2b..0000000 --- a/public/tiny_mce/plugins/table/langs/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -Theme specific language packs. - -The language pack codes are based on ISO-639-2 -http://www.loc.gov/standards/iso639-2/englangn.html diff --git a/public/tiny_mce/plugins/table/langs/sv.js b/public/tiny_mce/plugins/table/langs/sv.js deleted file mode 100644 index 96155b7..0000000 --- a/public/tiny_mce/plugins/table/langs/sv.js +++ /dev/null @@ -1,41 +0,0 @@ -// SE lang variables - -tinyMCELang['lang_table_desc'] = 'Skapa ny tabell'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'Skapa rad före'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'Skapa rad efter'; -tinyMCELang['lang_table_delete_row_desc'] = 'Ta bort rad'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'Skapa kolumn före'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'Skapa kolumn efter'; -tinyMCELang['lang_table_delete_col_desc'] = 'Ta bort kolumn'; -tinyMCELang['lang_insert_table_title'] = 'Skapa/Redigera tabell'; -tinyMCELang['lang_insert_table_width'] = 'Bredd'; -tinyMCELang['lang_insert_table_height'] = 'Höjd'; -tinyMCELang['lang_insert_table_cols'] = 'Kolumner'; -tinyMCELang['lang_insert_table_rows'] = 'Rader'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Cellmellanrum'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Cellutfyllnad'; -tinyMCELang['lang_insert_table_border'] = 'Rambredd'; -tinyMCELang['lang_insert_table_align'] = 'Justering'; -tinyMCELang['lang_insert_table_align_default'] = 'Ingen'; -tinyMCELang['lang_insert_table_align_left'] = 'Vänster'; -tinyMCELang['lang_insert_table_align_right'] = 'Höger'; -tinyMCELang['lang_insert_table_align_middle'] = 'Mitten'; -tinyMCELang['lang_insert_table_class'] = 'Stil'; -tinyMCELang['lang_table_row_title'] = 'Tabellradsinställningar'; -tinyMCELang['lang_table_cell_title'] = 'Tabellcellsinställningar'; -tinyMCELang['lang_table_row_desc'] = 'Tabellradsinställningar'; -tinyMCELang['lang_table_cell_desc'] = 'Tabellcellsinställningar'; -tinyMCELang['lang_insert_table_valign'] = 'Vertikal justering'; -tinyMCELang['lang_insert_table_align_top'] = 'Toppen'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Botten'; -tinyMCELang['lang_table_props_desc'] = 'Tabell egenskaper'; -tinyMCELang['lang_table_bordercolor'] = 'Ramfärg'; -tinyMCELang['lang_table_bgcolor'] = 'Bakgrundsfärd'; -tinyMCELang['lang_table_merge_cells_title'] = 'Sammanfoga tabell celler'; -tinyMCELang['lang_table_split_cells_desc'] = 'Delaupp tabell celler'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Sammanfoga tabell celler'; -tinyMCELang['lang_table_cut_row_desc'] = 'Klipput tabell rad'; -tinyMCELang['lang_table_copy_row_desc'] = 'Kopiera tabell rad'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Klistra in tabell rad före'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Klistra in tabell rad efter'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/tw.js b/public/tiny_mce/plugins/table/langs/tw.js deleted file mode 100644 index ba5e763..0000000 --- a/public/tiny_mce/plugins/table/langs/tw.js +++ /dev/null @@ -1,41 +0,0 @@ -// TW lang variables contributed by Jim Kou - -tinyMCELang['lang_insert_table_align'] = '¹ï»ô'; -tinyMCELang['lang_insert_table_align_default'] = '¼Ð·Ç'; -tinyMCELang['lang_insert_table_align_left'] = '»ô¥ª'; -tinyMCELang['lang_insert_table_align_middle'] = '¸m¤¤'; -tinyMCELang['lang_insert_table_align_right'] = '»ô¥k'; -tinyMCELang['lang_insert_table_border'] = '®Ø½u'; -tinyMCELang['lang_insert_table_cellpadding'] = '¦rÅé»PÀx¦s®æ¶¡»Ø'; -tinyMCELang['lang_insert_table_cellspacing'] = 'Àx¦s®æ¶¡»Ø'; -tinyMCELang['lang_insert_table_class'] = '¼Ë¦¡'; -tinyMCELang['lang_insert_table_cols'] = '¦æ'; -tinyMCELang['lang_insert_table_height'] = '°ª«×'; -tinyMCELang['lang_insert_table_rows'] = '¦C'; -tinyMCELang['lang_insert_table_title'] = 'ªí®æ¼ÐÃD'; -tinyMCELang['lang_insert_table_width'] = '¼e«×'; -tinyMCELang['lang_table_delete_col_desc'] = '§R°£¤@¦æÀx¦s®æ'; -tinyMCELang['lang_table_delete_row_desc'] = '§R°£¤@¦CÀx¦s®æ'; -tinyMCELang['lang_table_desc'] = 'ªí®æ'; -tinyMCELang['lang_table_insert_col_after_desc'] = '·s¼W¤@¦æÀx¦s®æ(«á)'; -tinyMCELang['lang_table_insert_col_before_desc'] = '·s¼W¤@¦æÀx¦s®æ(«e)'; -tinyMCELang['lang_table_insert_row_after_desc'] = '·s¼W¤@¦CÀx¦s®æ(«á)'; -tinyMCELang['lang_table_insert_row_before_desc'] = '·s¼W¤@¦CÀx¦s®æ(«e)'; -tinyMCELang['lang_table_row_title'] = 'Table row properties'; -tinyMCELang['lang_table_cell_title'] = 'Table cell properties'; -tinyMCELang['lang_table_row_desc'] = 'Table row properties'; -tinyMCELang['lang_table_cell_desc'] = 'Table cell properties'; -tinyMCELang['lang_insert_table_valign'] = 'Vertical alignment'; -tinyMCELang['lang_insert_table_align_top'] = 'Top'; -tinyMCELang['lang_insert_table_align_bottom'] = 'Bottom'; -tinyMCELang['lang_table_props_desc'] = 'Table properties'; -tinyMCELang['lang_table_bordercolor'] = 'Border color'; -tinyMCELang['lang_table_bgcolor'] = 'Bg color'; -tinyMCELang['lang_table_merge_cells_title'] = 'Merge table cells'; -tinyMCELang['lang_table_split_cells_desc'] = 'Split table cells'; -tinyMCELang['lang_table_merge_cells_desc'] = 'Merge table cells'; -tinyMCELang['lang_table_cut_row_desc'] = 'Cut table row'; -tinyMCELang['lang_table_copy_row_desc'] = 'Copy table row'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'Paste table row before'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'Paste table row after'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/langs/zh_cn.js b/public/tiny_mce/plugins/table/langs/zh_cn.js deleted file mode 100644 index b47fbe3..0000000 --- a/public/tiny_mce/plugins/table/langs/zh_cn.js +++ /dev/null @@ -1,42 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_table_desc'] = '²åÈëбí¸ñ'; -tinyMCELang['lang_table_insert_row_before_desc'] = 'ÔÚÇ°Ãæ²åÈëÐÐ'; -tinyMCELang['lang_table_insert_row_after_desc'] = 'ÔÚºóÃæ²åÈëÐÐ'; -tinyMCELang['lang_table_delete_row_desc'] = 'ɾ³ýÐÐ'; -tinyMCELang['lang_table_insert_col_before_desc'] = 'ÔÚÇ°Ãæ²åÈëÁÐ'; -tinyMCELang['lang_table_insert_col_after_desc'] = 'ÔÚºóÃæ²åÈëÁÐ'; -tinyMCELang['lang_table_delete_col_desc'] = 'ɾ³ýÁÐ'; -tinyMCELang['lang_insert_table_title'] = '²åÈë/ÐÞ¸Ä ±í¸ñ'; -tinyMCELang['lang_insert_table_width'] = '¿í¶È'; -tinyMCELang['lang_insert_table_height'] = '¸ß¶È'; -tinyMCELang['lang_insert_table_cols'] = 'ÁÐÊý'; -tinyMCELang['lang_insert_table_rows'] = 'ÐÐÊý'; -tinyMCELang['lang_insert_table_cellspacing'] = '¼ä¾à'; -tinyMCELang['lang_insert_table_cellpadding'] = 'Ìî³ä'; -tinyMCELang['lang_insert_table_border'] = '±ß¿ò'; -tinyMCELang['lang_insert_table_align'] = '¶ÔÆ뷽ʽ'; -tinyMCELang['lang_insert_table_align_default'] = 'ĬÈÏ'; -tinyMCELang['lang_insert_table_align_left'] = '×ó¶ÔÆë'; -tinyMCELang['lang_insert_table_align_right'] = 'ÓÒ¶ÔÆë'; -tinyMCELang['lang_insert_table_align_middle'] = '¾ÓÖжÔÆë'; -tinyMCELang['lang_insert_table_class'] = 'Àà'; -tinyMCELang['lang_table_row_title'] = '±í¸ñÐÐÊôÐÔ'; -tinyMCELang['lang_table_cell_title'] = 'µ¥Ôª¸ñÊôÐÔ'; -tinyMCELang['lang_table_row_desc'] = '±í¸ñÐÐÊôÐÔ'; -tinyMCELang['lang_table_cell_desc'] = 'µ¥Ôª¸ñÊôÐÔ'; -tinyMCELang['lang_insert_table_valign'] = '´¹Ö±¶ÔÆë'; -tinyMCELang['lang_insert_table_align_top'] = '¶¥¶Ë'; -tinyMCELang['lang_insert_table_align_bottom'] = 'µ×²¿'; -tinyMCELang['lang_table_props_desc'] = '±í¸ñÊôÐÔ'; -tinyMCELang['lang_table_bordercolor'] = '±ß¿òÑÕÉ«'; -tinyMCELang['lang_table_bgcolor'] = '±³¾°ÑÕÉ«'; -tinyMCELang['lang_table_merge_cells_title'] = 'ºÏ²¢µ¥Ôª¸ñ'; -tinyMCELang['lang_table_split_cells_desc'] = '²ð·Öµ¥Ôª¸ñ'; -tinyMCELang['lang_table_merge_cells_desc'] = 'ºÏ²¢µ¥Ôª¸ñ'; -tinyMCELang['lang_table_cut_row_desc'] = '¼ôÇÐÐÐ'; -tinyMCELang['lang_table_copy_row_desc'] = '¸´ÖÆÐÐ'; -tinyMCELang['lang_table_paste_row_before_desc'] = 'ÔÚÇ°Ãæ²åÈëÐÐ'; -tinyMCELang['lang_table_paste_row_after_desc'] = 'ÔÚºóÃæ²åÈëÐÐ'; -tinyMCELang['lang_table_insert_desc'] = 'Insert a new table'; diff --git a/public/tiny_mce/plugins/table/merge_cells.htm b/public/tiny_mce/plugins/table/merge_cells.htm deleted file mode 100644 index 36d6299..0000000 --- a/public/tiny_mce/plugins/table/merge_cells.htm +++ /dev/null @@ -1,56 +0,0 @@ - - -{$lang_table_merge_cells_title} - - - - -
-
-{$lang_table_merge_cells_title} -
- - - - - - - - - - - - -
{$lang_insert_table_cols}: -
{$lang_insert_table_rows}:
- - - - diff --git a/public/tiny_mce/plugins/table/readme.txt b/public/tiny_mce/plugins/table/readme.txt deleted file mode 100644 index ff2741a..0000000 --- a/public/tiny_mce/plugins/table/readme.txt +++ /dev/null @@ -1,44 +0,0 @@ - Table plugin for TinyMCE ------------------------------- - -Installation instructions: - * Copy the table directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "table". - * Add the table button name to button list, example: theme_advanced_buttons3_add_before : "tablecontrols". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "table", - theme_advanced_buttons3_add_before : "tablecontrols" - }); - -Table controls: - tablecontrols All table control below and some separators between them. - table Insert table control. - row_props Edit row properties (tr). - cell_props Edit cell properties (td). - delete_col Delete column control. - delete_row Delete row control. - col_after Column after control. - col_before Column before control. - row_after Row after control. - row_before Row before control. - row_after Row after control. - row_before Row before control. - -Table plugin commands: - mceInsertTable Inserts a new table at cursor location the default size is 2x2. - If the value parameter is specified it should contain a name/value array, - this array has the following options cols, rows, border, cellspacing, cellpadding. - The default border is set to: 0. - mceTableInsertRowBefore Inserts a row before/above the current cursor location. - mceTableInsertRowAfter Inserts a row after/under the current cursor location. - mceTableDeleteRow Deletes the row at the current cursor location. - mceTableInsertColBefore Inserts a column before the current cursor location. - mceTableInsertColAfter Inserts a column after the current cursor location. - mceTableDeleteCol Deletes the column at the current cursor location. - -Options: - table_color_fields If set to true, tables dialogs will have color fields. diff --git a/public/tiny_mce/plugins/table/row.htm b/public/tiny_mce/plugins/table/row.htm deleted file mode 100644 index bb77c2b..0000000 --- a/public/tiny_mce/plugins/table/row.htm +++ /dev/null @@ -1,127 +0,0 @@ - - -{$lang_table_row_title} - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_table_row_title}
{$lang_insert_table_align}:{$lang_insert_table_class}:
{$lang_insert_table_valign}:{$lang_insert_table_height}:
  
-
- - diff --git a/public/tiny_mce/plugins/table/table.htm b/public/tiny_mce/plugins/table/table.htm deleted file mode 100644 index 667949e..0000000 --- a/public/tiny_mce/plugins/table/table.htm +++ /dev/null @@ -1,153 +0,0 @@ - - -{$lang_insert_table_title} - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_table_title}
{$lang_insert_table_cols}:{$lang_insert_table_rows}:
{$lang_insert_table_cellpadding}:{$lang_insert_table_cellspacing}:
{$lang_insert_table_align}:{$lang_insert_table_border}:
{$lang_insert_table_width}:{$lang_insert_table_height}:
{$lang_insert_table_class}: -   
  
-
- - diff --git a/public/tiny_mce/plugins/zoom/editor_plugin.js b/public/tiny_mce/plugins/zoom/editor_plugin.js deleted file mode 100644 index ec349a5..0000000 --- a/public/tiny_mce/plugins/zoom/editor_plugin.js +++ /dev/null @@ -1,7 +0,0 @@ -/* Import plugin specific language pack */ - function TinyMCE_zoom_getControlHTML(control_name){if(!tinyMCE.isMSIE||tinyMCE.isMSIE5_0)return "";switch(control_name){case "zoom":return '';}return "";}function TinyMCE_zoom_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceZoom":tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom=value;tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom=value;return true;}return false;} \ No newline at end of file diff --git a/public/tiny_mce/plugins/zoom/editor_plugin_src.js b/public/tiny_mce/plugins/zoom/editor_plugin_src.js deleted file mode 100644 index e0af5af..0000000 --- a/public/tiny_mce/plugins/zoom/editor_plugin_src.js +++ /dev/null @@ -1,38 +0,0 @@ -/* Import plugin specific language pack */ -//tinyMCE.importPluginLanguagePack('zoom', 'en,sv,pt,fr_ca,fr,de'); - -/** - * Returns the HTML contents of the zoom control. - */ -function TinyMCE_zoom_getControlHTML(control_name) { - if (!tinyMCE.isMSIE || tinyMCE.isMSIE5_0) - return ""; - - switch (control_name) { - case "zoom": - return ''; - } - - return ""; -} - -/** - * Executes the mceZoom command. - */ -function TinyMCE_zoom_execCommand(editor_id, element, command, user_interface, value) { - // Handle commands - switch (command) { - case "mceZoom": - tinyMCE.getInstanceById(editor_id).contentDocument.body.style.zoom = value; - tinyMCE.getInstanceById(editor_id).contentDocument.body.style.mozZoom = value; - return true; - } - - // Pass to next handler in chain - return false; -} diff --git a/public/tiny_mce/plugins/zoom/langs/fa.js b/public/tiny_mce/plugins/zoom/langs/fa.js deleted file mode 100644 index a0414d9..0000000 --- a/public/tiny_mce/plugins/zoom/langs/fa.js +++ /dev/null @@ -1,8 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_zoom_prefix'] = 'بزرگنمایی'; diff --git a/public/tiny_mce/plugins/zoom/langs/fr_ca.js b/public/tiny_mce/plugins/zoom/langs/fr_ca.js deleted file mode 100644 index 11d3604..0000000 --- a/public/tiny_mce/plugins/zoom/langs/fr_ca.js +++ /dev/null @@ -1,3 +0,0 @@ -// CA_FR lang variables - -tinyMCELang['lang_zoom_prefix'] = 'Zoom'; diff --git a/public/tiny_mce/plugins/zoom/langs/pl.js b/public/tiny_mce/plugins/zoom/langs/pl.js deleted file mode 100644 index 1f49adb..0000000 --- a/public/tiny_mce/plugins/zoom/langs/pl.js +++ /dev/null @@ -1,4 +0,0 @@ -// PL lang variables - -tinyMCELang['lang_dir'] = 'ltr'; -tinyMCELang['lang_zoom_prefix'] = 'PowiÄ™kszenie'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/zoom/langs/pt_br.js b/public/tiny_mce/plugins/zoom/langs/pt_br.js deleted file mode 100644 index 43a10c9..0000000 --- a/public/tiny_mce/plugins/zoom/langs/pt_br.js +++ /dev/null @@ -1,3 +0,0 @@ -// pt_BR lang variables - -tinyMCELang['lang_zoom_prefix'] = 'Zoom'; diff --git a/public/tiny_mce/plugins/zoom/langs/zh_cn.js b/public/tiny_mce/plugins/zoom/langs/zh_cn.js deleted file mode 100644 index 2833632..0000000 --- a/public/tiny_mce/plugins/zoom/langs/zh_cn.js +++ /dev/null @@ -1,5 +0,0 @@ -// Simplified Chinese lang variables contributed by cube316 (cube316@gmail.com) -//Çë·ÃÎÊ http://www.cube316.net/ ÒÔ»ñÈ¡TinyMCEµÄÖÐÎÄÖ§³Ö - -tinyMCELang['lang_dir'] = 'ltr'; -tinyMCELang['lang_zoom_prefix'] = 'Ëõ·Å'; \ No newline at end of file diff --git a/public/tiny_mce/plugins/zoom/readme.txt b/public/tiny_mce/plugins/zoom/readme.txt deleted file mode 100644 index bf9e585..0000000 --- a/public/tiny_mce/plugins/zoom/readme.txt +++ /dev/null @@ -1,22 +0,0 @@ - Zoom plugin for TinyMCE --------------------------- - -About: - Adds a zoom drop list in MSIE5.5+, this plugin was mostly created to - show how to add custom droplists as plugins. - -Installation instructions: - * Copy the zoom directory to the plugins directory of TinyMCE (/jscripts/tiny_mce/plugins). - * Add plugin to TinyMCE plugin option list example: plugins : "zoom". - * Add the preview button name to button list, example: theme_advanced_buttons3_add : "zoom". - -Initialization example: - tinyMCE.init({ - theme : "advanced", - mode : "textareas", - plugins : "preview", - theme_advanced_buttons3_add : "zoom" - }); - -Requirement: - This plugin requires MSIE on Mozilla the button will not be visible. diff --git a/public/tiny_mce/themes/advanced/anchor.htm b/public/tiny_mce/themes/advanced/anchor.htm deleted file mode 100644 index 38edd5a..0000000 --- a/public/tiny_mce/themes/advanced/anchor.htm +++ /dev/null @@ -1,45 +0,0 @@ - - -{$lang_insert_anchor_title} - - - - -
- - - - -
- - - - - - - - - - - -
{$lang_insert_anchor_title}
{$lang_insert_anchor_name}:
-
-
- - diff --git a/public/tiny_mce/themes/advanced/charmap.htm b/public/tiny_mce/themes/advanced/charmap.htm deleted file mode 100644 index 71ceb22..0000000 --- a/public/tiny_mce/themes/advanced/charmap.htm +++ /dev/null @@ -1,378 +0,0 @@ - - -{$lang_theme_charmap_title} - - - - - - - - - - - - - - - - -
{$lang_theme_charmap_title}
- - - - - - - - - -
 
 
-
- - - - - - - - - - - - - - - - -
HTML-Code
 
 
NUM-Code
 
-
- - - diff --git a/public/tiny_mce/themes/advanced/color_picker.htm b/public/tiny_mce/themes/advanced/color_picker.htm deleted file mode 100644 index b1dc3aa..0000000 --- a/public/tiny_mce/themes/advanced/color_picker.htm +++ /dev/null @@ -1,271 +0,0 @@ - - -{$lang_theme_colorpicker_title} - - - - -
- -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/about.htm b/public/tiny_mce/themes/advanced/docs/en/about.htm deleted file mode 100644 index 984a990..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/about.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - -About TinyMCE - - - - - - - - - - - -
-
-TinyMCE is a small WYSIWYG editor control for web browsers such as MSIE or Mozilla -that enables you to edit HTML contents in a more user friendly way. It has common -features that are found in most word processors and should not be difficult to -use.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/common_buttons.htm b/public/tiny_mce/themes/advanced/docs/en/common_buttons.htm deleted file mode 100644 index c63d7dc..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/common_buttons.htm +++ /dev/null @@ -1,163 +0,0 @@ - - - -Common buttons - - - - - - - - - - - -
-
-Below is a short description about each button. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bold text style.
Italic text style.
Underline text style.
Strikethrough text style.
Align left.
Align center.
Align right.
Align full.
Unordered list/bullet list.
Ordered list/numbered list
Outdent/decrease indentation.
Indent/incread indentation.
Undo the last operation.
Redo the last operation.
Insert a new link, read more about this function in the Insert - link section.
Unlinks the current selection/removes all selected links.
Insert a new anchor, read more about this function in the Insert anchor section.
Insert a new image, read more about this function in the Insert - image section.
Cleanup code/Removes unwanted formating. This function is useful when - you copy contents from for example a office product.
Shows this help window.
Opens HTML source code editor.
Inserts a new 2x2 table at the current location.
Adds a row above the current one.
Adds a row under the current one.
Removes the row.
Adds a column before the current one.
Adds a column after the current one.
Removes the current column.
Inserts a new horizontal ruler
Removes formatting from the selection.
Makes the selection to be subscript.
Makes the selection to be superscripted.
-
-
- - - - - - - - diff --git a/public/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif b/public/tiny_mce/themes/advanced/docs/en/images/insert_anchor_window.gif deleted file mode 100644 index 5b5f528dd57cae8e062919a66b0ff7fcf8f3bc42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5189 zcmV-L6uRq2Nk%w1VM+mu0QUd@H&l@lEO0qilOsNVFindaHh4i^nHDj05GrpUI(!r_ za}OzQrpoXNBx(yKYi5SIC`5!jS(O+wc1dTTm%8JFrP7M5*m|4FS$M8BQjd0*$5mBT z=;+h``|#@O>def{hpE;xP>o@MwWZ1MmAK&!C~YJ_fOC|^AUu7Ow%}WOucF57OlzZ* zw&0}4?rx62QE;bCYowvX>r85*c$vv8NQW{`j8k!_FH4CuP>z71&z->NKwX$paj0pE zye&zHq{#21$L&sRq?EVen7rhKrqiFo>V2NfQE#UjHF%J+-E@`3GEa?lmc|`9dpK2* zrOEF^Vw{Vv*__V48cJ%W#pxN@<~n zsMJnvrBH9C0A|c`lfyqtRHdBxl zFm#Qu+mEu`CPIROqtR4yshGRuX^FcMEpd*p+f{U`Cqjd5kGv^Gg(pLU88mmC!01S3 zpJ<4>VuH3?day-fos6#9fTGZuyya?&y^pcnB|w2?g}6OhmVBMeXNS5IE^=vtn#p8@xFtb?7czBwoy$gJoo$W3h^p6Mf3qq^g%B%mTzjybzvr605p*>rcFHDMBd9Qt+&3AWqElP-Sk;0I( z-5xo6E=q}UlEZhH$d{pUziytuto-k+j}!kHAxMsSGA;4JT}sxZ;L}hHsC- zGc(Nb@$mp=nVFfH004k9Gc%x*O#}o4z`(%&%$Wc)nKNe0UteD{=KnxIK!AXN)X>NP z00960|M2kcA^8LV00000EC2ui07?Oi000R80Qm_VNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGZNIt&!5MSAVZ2ANwTELlPFWFT*BcR3xlMp%jWXM1X0Dva~1XRJ|EJ6fX z)6SqV!^1$9EM216ilWLFAvnuSO_(4J%%B-8Vh9n#Mavi@FnZiDrzz5>J8v9`1BU@a zH5I9dDOzM_%CTTq_=rHIY>gaUu^v4CpmpjNCm*h!;VJa%#fx(5AbrW!t&E-%OQffv2Za)dSExbcS$tRR!gBo$Op1T)Zt(FO>~0JDV!7T_YqD$Q8p$t#yA zp$$269Fjr{Ly(ZpHxy8?2@$Or1Bf8Sl(NGfMi{|H95OUw$O=KY00a~xFreg;Og8D{ zlTbz(B|k>##MCwFWT~Z=PC+FVRaRl86<1z?B^Fs`p`{jEZowrNU3TH67hiq>CKzFc zA*L8(jzK0FWtL&48E2k>CK_p`p{5#ZuE8c7ZMNa28*jb=CmeCcA*UR3&Os*~b=G00 z9e3V=Cmwm`p{E{u?!hM?efHu1ryqa*0Vp7W1|p~+gAPI{A%zxVs3C_Qf+!-1CZeb! zi!Q<_BaJrVs3VU)0x2YsMj|QYw%m3LC6zfLwbV5vy|aN*PenCVRaa%TRaakyHC9rnq8@FUB}yjW_1FV~;-uIb@MXCdt4``k<|(+6;hu)Rq2p zAotuIywkzC4W#=eyJEioTc*5d*1IOYZtfeWzjOwCC&79i+^52THasZAhEANQ#f)bB zD94h1T&c*Imb@v-o~|6K%cRD9D$T0i+^Wv7_B<=lwho=E(Yz-8E7QV0U98l|R=q6N z&Tbv8*VKl6E!oxStrnem=UubTI^ zsV|)V$oX%b0(+FF!F(qCC&Pk1T&TpP@ra@>)+miZs$-J^nWaXSDU)$3WuIc1s9sho znW3s?tHN11J`y`w{j63(!&T9Cg*0C+Em%$?R@9C~HDz6`Sz3cu*QNzFYmF^iW{ciJ zpeK-h`0$56?4kAloF}~@VozL3fk*ec*MV`gqXQp!$2HF70FZ#GU1NfmndX%yd$GkM zg@d2`5@)AG*v}(4@JRmrw6H)qj8G9f6b}T5IgB}KW0CS0r9vhgk2KH`9>IV|N(ZWz zjS6O_npvuB#;O;1L_QvgmCry@I}v(>guPN4u$ne3s2OW&O7Mu)m=zKkO6zOY5*xP4 zM!h0N4~VeT$@GZGkAC!nAhs0Z^{Rx#2EZc}eqaYX@?5R8Ss^Ewx

E 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 diff --git a/public/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif b/public/tiny_mce/themes/advanced/docs/en/images/insert_image_window.gif deleted file mode 100644 index cdc617eab3be256173af047822671023c41d53c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7195 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 AEdT%j diff --git a/public/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif b/public/tiny_mce/themes/advanced/docs/en/images/insert_table_window.gif deleted file mode 100644 index 6a032c5ae8dfcf3fad7ed65c814c2b1a1e88d25d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7094 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 diff --git a/public/tiny_mce/themes/advanced/docs/en/index.htm b/public/tiny_mce/themes/advanced/docs/en/index.htm deleted file mode 100644 index 0b0526a..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/index.htm +++ /dev/null @@ -1,27 +0,0 @@ - - - -Help Index - - - - - - - - - -


-
-Click the links below to go to the different help sections. - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm b/public/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm deleted file mode 100644 index e1118a2..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/insert_anchor_button.htm +++ /dev/null @@ -1,33 +0,0 @@ - - - -Insert anchor button - - - - - - - - - - - -
-
-This button opens a new window with the insert/edit anchor function.
-
-
-
-There are one field in this window, this is where you enter the name of you anchor point. Remember the anchor name needs to be unique.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/insert_image_button.htm b/public/tiny_mce/themes/advanced/docs/en/insert_image_button.htm deleted file mode 100644 index e101fff..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/insert_image_button.htm +++ /dev/null @@ -1,66 +0,0 @@ - - - -Insert image button - - - - - - - - - - - -
-
-The insert image button opens the window shown below.
-
-
-
-You simply enter a URL to the image you want to link to and enter a image description, -this is then displayed as an alternative text descripton of the image on the page.
-
-Field descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Image URL URL/path to the image.
Image description Alternative description of image contents.
DimentionsImage width/height.
AlignmentImage alignment, useful when wrapping text around images.
BorderBorder thickness.
VSpaceVertical space, useful when wrapping text around images.
HSpaceHorizontal space, useful when wrapping text around images.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/insert_link_button.htm b/public/tiny_mce/themes/advanced/docs/en/insert_link_button.htm deleted file mode 100644 index ddfeb3a..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/insert_link_button.htm +++ /dev/null @@ -1,34 +0,0 @@ - - - -Insert link button - - - - - - - - - - - -
-
-This button opens a new window with the insert/edit link function.
-
-
-
-There are two fields in this window the first one "Link URL" is the -URL of the link. The target enables you to select how the link is to be opened.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/insert_table_button.htm b/public/tiny_mce/themes/advanced/docs/en/insert_table_button.htm deleted file mode 100644 index d3bd196..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/insert_table_button.htm +++ /dev/null @@ -1,72 +0,0 @@ - - - -Insert table button - - - - - - - - - - - -
-
-The insert table button opens the window shown below. This action enables you to create tables.
-
-
-
-Field descriptions:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ColumnsNumber of columns in the table.
RowsNumber of rows in the new table.
CellpaddingCellpadding of the table .
CellspacingCellspacing of the table .
AlignmentTable alignment .
BorderBorder thinkness of table.
WidthWidth in pixels of table .
HeightHeight in pixels of table.
ClassStyle or CSS class of table.
-
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/advanced/docs/en/style.css b/public/tiny_mce/themes/advanced/docs/en/style.css deleted file mode 100644 index 722f537..0000000 --- a/public/tiny_mce/themes/advanced/docs/en/style.css +++ /dev/null @@ -1,28 +0,0 @@ -body { background-color: #FFFFFF; } -body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } -.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } -.subtitle { font-size: 12px; font-weight: bold; } - -.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } -.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } -img { border: #000000 solid 1px; } - -a:visited { color: #666666; text-decoration: underline; } -a:active { color: #666666; text-decoration: underline; } -a:hover { color: #666666; text-decoration: underline; } -a { color: #666666; text-decoration: underline; } - -.pageheader { border: #E0E0E0 solid 1px; } -.pagefooter { border: #E0E0E0 solid 1px; } -.sample { background-color: #FFFFFF; border: #000000 solid 1px; } -.samplecontent { font-size: 10px; } - -.code { background-color: #FFFFFF; border: #000000 solid 1px; } -.codecontent { font-size: 10px; } -.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a { color: #666666; text-decoration: none; font-weight: bold } - -hr { height: 1px; } - diff --git a/public/tiny_mce/themes/advanced/docs/images/table.gif b/public/tiny_mce/themes/advanced/docs/images/table.gif deleted file mode 100644 index f8a00544a9980d38c44d5fe8e9a8457be8339834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmeH`!D|yi6vijCX;K?;HK|5XNfs0Yg$)+cs)rOqvff5dHHc2Uv)oRl&oNM zL_v>pGsp4dsvwhU>0X4Xh+Wac9CC=o!gvw&;JEQG@DJ$6$B*y9ySxux{Y-6ku9*Wl z&;cV^mgTqzF2D-Ju^=LJ*5Me*7UC50Cy+D9dr10NaI7en0;v!yiHT1LWt4Ho80`td zH0fy?J20##7#A#vDOn&n7d(iA=0Y-IcxbrPf)f!?@szE;c^>s&MB!_#s1QkQn7rM&uZWEuIkdp$R4&n$wy)0vxLV{8?)r-!}Ci)!@%sw>sSn!}>!G{SeK1|r~VZn+68+II6u;asm10Ob=_wF-@g9v?#;*dZ@+%|{O#+PpFh6;{Q2Y8&mX^k|N8U$_y7O@!A=+@ zMnhm=LO}5+3o`?QHiHhxdQhHV;HYB==aBK(u;5@bhp<-6i46*DqFMnSA1*XHGjymj z$?Op*WNGP=)SJbz@M1!Xh>C;FgAEIv8ibYXrszl~ z&MaaYDh9g*7@JwyXK1-BXgI*Il2h;pPeZ6;LmS)vCRL5HH(U%EXSsA%Z__>8z+epk DI%10H diff --git a/public/tiny_mce/themes/advanced/docs/images/table_delete_row.gif b/public/tiny_mce/themes/advanced/docs/images/table_delete_row.gif deleted file mode 100644 index 1997065fb2b447f498ab7fda4b7e21dcbb25dc81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1CIoUh=PEGhJcKQgo1{IiU|b`3j#VmBuw~FFylkPf)5Q7 z7Bo!QFk!}m2{SfKSg@gC#fJ$SK1|s0VZn+63pO0su;ai2Ap5|F4JUx;|A7nt58U{F z;lck0FaAIH@c#o4{rLYMi2nZv+crv!hQJ^S0mYvz%nS@F3_2h;f${_cM>m5fhm6OD z1qYisgtcN$Ojy9mEvgi>fT8hWN4JEt$%Yw%N7~tCoGZROc*x+)p`mC~@Svg5n~l@8 z>cxRXXEq)or2`@y3m*9JNg2eP*va6?$lx(i=t)DOQwuAXkirbBgarR4#!XpwwGCZQ}j-u$i5iXM38c!-9o(cUMTVu`pNz0PJ9X!TQ3xphWMO7tP+`ykxe1gf7&uxPJUL`M zHY_;U%pokNQs8*7k%5a_=z@SE(i5MkXeC zPNt5?0yW=8hN62%Dla%PGcz-pWCS=goN5wqs`((G@bc1P7WEc}kBSW;s{+{lBo>-5 iu&xUgtrHbga%dGy+03=YpedVyC-?NbIlm1R7_0$Wk9qk3 diff --git a/public/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif b/public/tiny_mce/themes/advanced/docs/images/table_insert_col_before.gif deleted file mode 100644 index 5d1ff37afea7bb2e67952400e00184aa275d6764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&uxOJUL`M zHY_;U%)u+PW5EN5h88YU7mp7DN{(zYMmj4p0u!3~q*V&u{5arzY@(RFO-4h5!|^7D zIH?}ZVugm;rn%2dUMy&AWMq^w(NJJWb>vXAtKet|SsBK;hMu<;?0m9#Rd5 h!d40F?cxwzaHwNr1Z$MUMpFj1Z7JoaTqOh;tN|1Me9r&? diff --git a/public/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif b/public/tiny_mce/themes/advanced/docs/images/table_insert_row_after.gif deleted file mode 100644 index c3aa15f93a9d50777ca3a3b2309fc807ceabc57a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%)uMAz#x%{g`JbTZ-#`DOLGT{dj|*Oqh`h)X6?Ek4-y$X8X1FD*?2NJv$hH7 z&6{JfXpzqZDa$&I13@aDj5?v~Qf7WQ*v!VmA#i}h;Q=$htVPBS0l|h)240Jt69SHm a!Hpb79uX5BFnBXLF$=_=o|fvsU=08}a&%e% diff --git a/public/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif b/public/tiny_mce/themes/advanced/docs/images/table_insert_row_before.gif deleted file mode 100644 index c3271e54937cb8dbfb435ee8bc2d02157cff1448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%pt55lkwqTGaC=w17?0%i;Nu$1RC5Kcr9{H2skpjHgXtwL`-~0*X=}WE7QHI{4WtnErk^c$i_Har&nt0T0z!7V6jbF?3B; b3|uVFrNMjfN;AWXK;{oIr@tjQFjxZsoSk_C diff --git a/public/tiny_mce/themes/advanced/editor_content.css b/public/tiny_mce/themes/advanced/editor_content.css deleted file mode 100644 index 75290ee..0000000 --- a/public/tiny_mce/themes/advanced/editor_content.css +++ /dev/null @@ -1,27 +0,0 @@ -body { - background-color: #FFFFFF; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -pre { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -.mceVisualAid { - border: 1px dashed #BBBBBB; -} diff --git a/public/tiny_mce/themes/advanced/editor_popup.css b/public/tiny_mce/themes/advanced/editor_popup.css deleted file mode 100644 index d51982c..0000000 --- a/public/tiny_mce/themes/advanced/editor_popup.css +++ /dev/null @@ -1,121 +0,0 @@ -body { - background-color: #F0F0EE; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; -} - -input { - background: #FFFFFF; - border: 1px solid #cccccc; -} - -td, input, select, textarea { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -input, select, textarea { - border: 1px solid #808080; -} - -.input_noborder { - border: 0px solid #808080; -} - -#insert { - font-weight: bold; -} - -#cancel { - font-weight: bold; -} - -.title { - font-size: 12px; - font-weight: bold; -} - -table.charmap { - border-style: solid; - border-width: 1px; - border-color: #AAAAAA; -} - -td.charmap, td.charmapOver { - color: #000000; - border-color: #AAAAAA; - border-style: solid; - border-width: 1px; - text-align: center; - font-size: 12px; -} - -td.charmapOver { - background-color: #CCCCCC; - cursor: arrow; -} - -a.charmap { - color: #000000; - text-decoration: none -} - -.wordWrapCode { - vertical-align: middle; - border: 1px none #000000; - background-color: transparent; -} - -input.radio { - border: 1px none #000000; - background-color: transparent; - vertical-align: middle; -} - -input.checkbox { - border: 1px none #000000; - background-color: transparent; - vertical-align: middle; -} - -.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { - margin-left: 1px; -} - -.mceButtonNormal { - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceButtonOver { - border: 1px solid #0A246A; - cursor: arrow; - background-color: #B6BDD2; -} - -.mceButtonDown { - cursor: arrow; - border: 1px solid #0A246A; - background-color: #8592B5; -} - -legend { - font-weight: bold; -} diff --git a/public/tiny_mce/themes/advanced/editor_template.js b/public/tiny_mce/themes/advanced/editor_template.js deleted file mode 100644 index 473e7cc..0000000 --- a/public/tiny_mce/themes/advanced/editor_template.js +++ /dev/null @@ -1,31 +0,0 @@ -/* Import theme specific language pack */ - tinyMCE.importThemeLanguagePack('advanced');var TinyMCE_advanced_autoImportCSSClasses=true;var TinyMCE_advanced_foreColor="#000000";var TinyMCE_advanced_anchorName="";var TinyMCE_advanced_buttons=[['bold','{$lang_bold_img}','{$lang_bold_desc}','Bold'],['italic','{$lang_italic_img}','{$lang_italic_desc}','Italic'],['underline','{$lang_underline_img}','{$lang_underline_desc}','Underline'],['strikethrough','strikethrough.gif','{$lang_striketrough_desc}','Strikethrough'],['justifyleft','left.gif','{$lang_justifyleft_desc}','JustifyLeft'],['justifycenter','center.gif','{$lang_justifycenter_desc}','JustifyCenter'],['justifyright','right.gif','{$lang_justifyright_desc}','JustifyRight'],['justifyfull','full.gif','{$lang_justifyfull_desc}','JustifyFull'],['bullist','bullist.gif','{$lang_bullist_desc}','InsertUnorderedList'],['numlist','numlist.gif','{$lang_numlist_desc}','InsertOrderedList'],['outdent','outdent.gif','{$lang_outdent_desc}','Outdent'],['indent','indent.gif','{$lang_indent_desc}','Indent'],['cut','cut.gif','{$lang_cut_desc}','Cut'],['copy','copy.gif','{$lang_copy_desc}','Copy'],['paste','paste.gif','{$lang_paste_desc}','Paste'],['undo','undo.gif','{$lang_undo_desc}','Undo'],['redo','redo.gif','{$lang_redo_desc}','Redo'],['link','link.gif','{$lang_link_desc}','mceLink',true],['attachment','attachment.gif','{$lang_attachment_desc}','mceAttachment',true],['unlink','unlink.gif','{$lang_unlink_desc}','unlink'],['image','image.gif','{$lang_image_desc}','mceImage',true],['cleanup','cleanup.gif','{$lang_cleanup_desc}','mceCleanup'],['help','help.gif','{$lang_help_desc}','mceHelp'],['code','code.gif','{$lang_theme_code_desc}','mceCodeEditor'],['hr','hr.gif','{$lang_theme_hr_desc}','inserthorizontalrule'],['removeformat','removeformat.gif','{$lang_theme_removeformat_desc}','removeformat'],['sub','sub.gif','{$lang_theme_sub_desc}','subscript'],['sup','sup.gif','{$lang_theme_sup_desc}','superscript'],['forecolor','forecolor.gif','{$lang_theme_forecolor_desc}','mceForeColor',true],['backcolor','backcolor.gif','{$lang_theme_backcolor_desc}','mceBackColor',true],['charmap','charmap.gif','{$lang_theme_charmap_desc}','mceCharMap'],['visualaid','visualaid.gif','{$lang_theme_visualaid_desc}','mceToggleVisualAid'],['anchor','anchor.gif','{$lang_theme_anchor_desc}','mceInsertAnchor']];function TinyMCE_advanced_getControlHTML(button_name){var buttonTileMap=new Array('anchor.gif','backcolor.gif','bullist.gif','center.gif','charmap.gif','cleanup.gif','code.gif','copy.gif','custom_1.gif','cut.gif','forecolor.gif','full.gif','help.gif','hr.gif','image.gif','indent.gif','left.gif','link.gif','attachment.gif','numlist.gif','outdent.gif','paste.gif','redo.gif','removeformat.gif','right.gif','strikethrough.gif','sub.gif','sup.gif','undo.gif','unlink.gif','visualaid.gif');for(var i=0;i';}}}return '';}}switch(button_name){case "formatselect":var html='';return html;case "styleselect":return '';case "fontselect":return '';case "fontsizeselect":return '';case "|":case "separator":return '';case "spacer":return '';case "rowseparator":return '
';}return "";}function TinyMCE_advanced_execCommand(editor_id,element,command,user_interface,value){switch(command){case "mceForeColor":var template=new Array();var inputColor=TinyMCE_advanced_foreColor;if(!inputColor){inputColor="#000000";}template['file']='color_picker.htm';template['width']=210;template['height']=200;tinyMCE.openWindow(template,{editor_id:editor_id,command:"forecolor",input_color:inputColor});return true;case "mceBackColor":var template=new Array();var inputColor=TinyMCE_advanced_foreColor;if(!inputColor){inputColor="#000000";}template['file']='color_picker.htm';template['width']=210;template['height']=200;tinyMCE.openWindow(template,{editor_id:editor_id,command:"HiliteColor",input_color:inputColor});return true;case "mceCodeEditor":var template=new Array();template['file']='source_editor.htm';template['width']=tinyMCE.getParam("theme_advanced_source_editor_width",500);template['height']=tinyMCE.getParam("theme_advanced_source_editor_height",400);tinyMCE.openWindow(template,{editor_id:editor_id,resizable:"yes",scrollbars:"no"});return true;case "mceCharMap":var template=new Array();template['file']='charmap.htm';template['width']=550;template['height']=280;tinyMCE.openWindow(template,{editor_id:editor_id});return true;case "mceInsertAnchor":var template=new Array();template['file']='anchor.htm';template['width']=320;template['height']=130;tinyMCE.openWindow(template,{editor_id:editor_id,name:TinyMCE_advanced_anchorName,action:(TinyMCE_advanced_anchorName==""?"insert":"update")});return true;}return false;}function TinyMCE_advanced_getEditorTemplate(settings,editorId){function removeFromArray(in_array,remove_array){var outArray=new Array();for(var i=0;i'+key+'';}TinyMCE_advanced_autoImportCSSClasses=false;}switch(layoutManager){case "SimpleLayout":var toolbarHTML="";var toolbarLocation=tinyMCE.getParam("theme_advanced_toolbar_location","bottom");var toolbarAlign=tinyMCE.getParam("theme_advanced_toolbar_align","center");var pathLocation=tinyMCE.getParam("theme_advanced_path_location","none");var buttonNamesRow1=tinyMCE.getParam("theme_advanced_buttons1","bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect",true,',');buttonNamesRow1=removeFromArray(buttonNamesRow1,tinyMCE.getParam("theme_advanced_disable","",true,','));buttonNamesRow1=addToArray(buttonNamesRow1,tinyMCE.getParam("theme_advanced_buttons1_add","",true,','));buttonNamesRow1=addToArray(tinyMCE.getParam("theme_advanced_buttons1_add_before","",true,','),buttonNamesRow1);for(var i=0;i0){toolbarHTML+="
";deltaHeight-=23;}var buttonNamesRow2=tinyMCE.getParam("theme_advanced_buttons2","bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,attachment,anchor,image,cleanup,help,code",true,',');buttonNamesRow2=removeFromArray(buttonNamesRow2,tinyMCE.getParam("theme_advanced_disable","",true,','));buttonNamesRow2=addToArray(buttonNamesRow2,tinyMCE.getParam("theme_advanced_buttons2_add","",true,','));buttonNamesRow2=addToArray(tinyMCE.getParam("theme_advanced_buttons2_add_before","",true,','),buttonNamesRow2);for(var i=0;i0){toolbarHTML+="
";deltaHeight-=23;}var buttonNamesRow3=tinyMCE.getParam("theme_advanced_buttons3","hr,removeformat,visualaid,separator,sub,sup,separator,charmap",true,',');buttonNamesRow3=removeFromArray(buttonNamesRow3,tinyMCE.getParam("theme_advanced_disable","",true,','));buttonNamesRow3=addToArray(buttonNamesRow3,tinyMCE.getParam("theme_advanced_buttons3_add","",true,','));buttonNamesRow3=addToArray(tinyMCE.getParam("theme_advanced_buttons3_add_before","",true,','),buttonNamesRow3);for(var i=0;i0){deltaHeight-=20;}template['html']='';if(toolbarLocation=="top"){template['html']+='';}if(pathLocation=="top"){template['html']+='';deltaHeight-=23;}template['html']+='';if(toolbarLocation=="bottom"){template['html']+='';}if(toolbarLocation=="external"){var bod=document.body;var elm=document.createElement("div");toolbarHTML=tinyMCE.replaceVars(toolbarHTML,tinyMCE.settings);toolbarHTML=tinyMCE.replaceVars(toolbarHTML,tinyMCELang);toolbarHTML=tinyMCE.replaceVar(toolbarHTML,'style_select_options',styleSelectHTML);toolbarHTML=tinyMCE.replaceVar(toolbarHTML,"editor_id",editorId);toolbarHTML=tinyMCE.replaceVar(toolbarHTML,"default_document",tinyMCE.baseURL+"/blank.htm");elm.className="mceToolbarExternal";elm.id="mceExternalToolbar";elm.innerHTML='
'+toolbarHTML+'
'+pathHTML+'
'+toolbarHTML+'
'+toolbarHTML+'
';bod.appendChild(elm);bod.style.marginTop=elm.offsetHeight+"px";tinyMCE.isExternalToolbar=true;}else{tinyMCE.isExternalToolbar=false;}if(pathLocation=="bottom"){template['html']+=''+pathHTML+'';deltaHeight-=23;}template['html']+='';break;case "RowLayout":template['html']='';var containers=tinyMCE.getParam("theme_advanced_containers","",true,",");var defaultContainerCSS=tinyMCE.getParam("theme_advanced_containers_default_class","container");var defaultContainerAlign=tinyMCE.getParam("theme_advanced_containers_default_align","center");for(var i=0;i';}else if(containers[i]=="mceElementpath"){var pathClass="mcePath";if(i==containers.length-1){pathClass="mcePathBottom";}else if(i==0){pathClass="mcePathTop";}else{deltaHeight-=2;}template['html']+='';deltaHeight-=22;}else{var curContainer=tinyMCE.getParam("theme_advanced_container_"+containers[i],"",true,',');var curContainerHTML="";var curAlign=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align",defaultContainerAlign);var curCSS=tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class",defaultContainerCSS);for(var j=0;j0){curContainerHTML+="
";deltaHeight-=23;}template['html']+='
';}}template['html']+='
\ - \ -
'+pathHTML+'
'+curContainerHTML+'
';break;case "BorderLayout":break;case "CustomLayout":var customLayout=tinyMCE.getParam("theme_advanced_custom_layout","");if(customLayout!=""&&eval("typeof("+customLayout+")")!="undefined"){template=eval(customLayout+"(template);");}break;default:alert('UNDEFINED LAYOUT MANAGER! PLEASE CHECK YOUR TINYMCE CONFIG!');break;}template['html']=tinyMCE.replaceVar(template['html'],'style_select_options',styleSelectHTML);template['delta_width']=0;template['delta_height']=deltaHeight;return template;}function TinyMCE_advanced_getInsertLinkTemplate(){var template=new Array();template['file']='link.htm';template['width']=300;template['height']=150;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);return template;};function TinyMCE_advanced_getInsertAttachmentTemplate(){var template=new Array();template['file']='attachment.htm';template['width']=300;template['height']=150;template['width']+=tinyMCE.getLang('lang_insert_attachment_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_attachment_delta_height',0);return template;}function TinyMCE_advanced_getInsertImageTemplate(){var template=new Array();template['file']='image.htm?src={$src}';template['width']=340;template['height']=280;template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);return template;};function TinyMCE_advanced_handleNodeChange(editor_id,node,undo_index,undo_levels,visual_aid,any_selection){function selectByValue(select_elm,value){if(select_elm){for(var i=0;i=0;i--){var nodeName=path[i].nodeName.toLowerCase();var nodeData="";if(nodeName=="b"){nodeName="strong";}if(nodeName=="i"){nodeName="em";}if(getAttrib(path[i],'id')!=""){nodeData+="id: "+path[i].getAttribute('id')+" ";}if(getAttrib(path[i],'class')!=""){nodeData+="class: "+path[i].getAttribute('class')+" ";}if(getAttrib(path[i],'className')!=""){nodeData+="class: "+path[i].getAttribute('className')+" ";}if(getAttrib(path[i],'src')!=""){nodeData+="src: "+path[i].getAttribute('src')+" ";}if(getAttrib(path[i],'href')!=""){nodeData+="href: "+path[i].getAttribute('href')+" ";}if(nodeName=="img"&&getAttrib(path[i],'name')=="mce_plugin_flash"){nodeName="flash";nodeData="";}if(getAttrib(path[i],'name').indexOf("mce_")!=0){if(getAttrib(path[i],"className")!=""){nodeName+="."+getAttrib(path[i],"className");}else if(getAttrib(path[i],"class")!=""){nodeName+="."+getAttrib(path[i],"class");}}if(tinyMCE.isMSIE){html+=''+nodeName+'';}else{html+=''+nodeName+'';}if(i>0){html+=" » ";}}pathElm.innerHTML=html+" ";}var colorElm=tinyMCE.getParentElement(node,"font","color");if(colorElm){TinyMCE_advanced_foreColor=""+colorElm.color.toUpperCase();}tinyMCE.switchClassSticky(editor_id+'_justifyleft','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_justifyright','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_justifycenter','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_justifyfull','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_sub','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_sup','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_anchor','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_link','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_attachment','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_unlink','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_outdent','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_image','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_hr','mceButtonNormal');var anchorName=tinyMCE.getParentElement(node,"a","name");TinyMCE_advanced_anchorName="";if(anchorName){TinyMCE_advanced_anchorName=anchorName.getAttribute("name");tinyMCE.switchClassSticky(editor_id+'_anchor','mceButtonSelected');}var anchorLink=tinyMCE.getParentElement(node,"a","href");if(anchorLink||any_selection){tinyMCE.switchClassSticky(editor_id+'_link',anchorLink?'mceButtonSelected':'mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_attachment',anchorLink?'mceButtonSelected':'mceButtonNormal',false);tinyMCE.switchClassSticky(editor_id+'_unlink',anchorLink?'mceButtonSelected':'mceButtonNormal',false);}tinyMCE.switchClassSticky(editor_id+'_visualaid',visual_aid?'mceButtonSelected':'mceButtonNormal',false);if(undo_levels!=-1){tinyMCE.switchClassSticky(editor_id+'_undo','mceButtonDisabled',true);tinyMCE.switchClassSticky(editor_id+'_redo','mceButtonDisabled',true);}if(tinyMCE.getParentElement(node,"li,blockquote")){tinyMCE.switchClassSticky(editor_id+'_outdent','mceButtonNormal',false);}if(undo_index!=-1&&(undo_index0)){tinyMCE.switchClassSticky(editor_id+'_redo','mceButtonNormal',false);}if(undo_index!=-1&&(undo_index>0&&undo_levels>0)){tinyMCE.switchClassSticky(editor_id+'_undo','mceButtonNormal',false);}var selectElm=document.getElementById(editor_id+"_styleSelect");if(selectElm){TinyMCE_advanced_setupCSSClasses(editor_id);classNode=node;breakOut=false;var index=0;do{if(classNode&&classNode.className){for(var i=0;i");}else{selectByValue(selectElm,"");}}var selectElm=document.getElementById(editor_id+"_fontNameSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"font","face");if(elm){selectByValue(selectElm,elm.getAttribute("face"));}else{selectByValue(selectElm,"");}}var selectElm=document.getElementById(editor_id+"_fontSizeSelect");if(selectElm){var elm=tinyMCE.getParentElement(node,"font","size");if(elm&&getAttrib(elm,"size")!=""){selectByValue(selectElm,elm.getAttribute("size"));}else{selectByValue(selectElm,"0");}}alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align')){continue;}switch(alignNode.getAttribute('align').toLowerCase()){case "left":tinyMCE.switchClassSticky(editor_id+'_justifyleft','mceButtonSelected');breakOut=true;break;case "right":tinyMCE.switchClassSticky(editor_id+'_justifyright','mceButtonSelected');breakOut=true;break;case "middle":case "center":tinyMCE.switchClassSticky(editor_id+'_justifycenter','mceButtonSelected');breakOut=true;break;case "justify":tinyMCE.switchClassSticky(editor_id+'_justifyfull','mceButtonSelected');breakOut=true;break;}}while(!breakOut&&(alignNode=alignNode.parentNode));if(tinyMCE.isGecko&&node.nodeType==3){var inst=tinyMCE.getInstanceById(editor_id);var doc=inst.getDoc();if(doc.queryCommandState("Bold")){tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonSelected');}if(doc.queryCommandState("Italic")){tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonSelected');}if(doc.queryCommandState("Underline")&&(node.parentNode==null||node.parentNode.nodeName!="A")){tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonSelected');}if(doc.queryCommandState("Strikethrough")){tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonSelected');}}do{switch(node.nodeName.toLowerCase()){case "b":case "strong":tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonSelected');break;case "i":case "em":tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonSelected');break;case "u":tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonSelected');break;case "strike":tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonSelected');break;case "ul":tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonSelected');break;case "ol":tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonSelected');break;case "sub":tinyMCE.switchClassSticky(editor_id+'_sub','mceButtonSelected');break;case "sup":tinyMCE.switchClassSticky(editor_id+'_sup','mceButtonSelected');break;case "hr":tinyMCE.switchClassSticky(editor_id+'_hr','mceButtonSelected');break;case "img":if(getAttrib(node,'name').indexOf('mce_')!=0){tinyMCE.switchClassSticky(editor_id+'_image','mceButtonSelected');}break;}}while((node=node.parentNode));};function TinyMCE_advanced_setupCSSClasses(editor_id){if(!TinyMCE_advanced_autoImportCSSClasses){return;}var selectElm=document.getElementById(editor_id+'_styleSelect');if(selectElm&&selectElm.getAttribute('cssImported')!='true'){var csses=tinyMCE.getCSSClasses(editor_id);if(csses&&selectElm){for(var i=0;i0){selectElm.setAttribute('cssImported','true');}}}; \ No newline at end of file diff --git a/public/tiny_mce/themes/advanced/editor_template_src.js b/public/tiny_mce/themes/advanced/editor_template_src.js deleted file mode 100644 index d8f8180..0000000 --- a/public/tiny_mce/themes/advanced/editor_template_src.js +++ /dev/null @@ -1,1010 +0,0 @@ -/* Import theme specific language pack */ -tinyMCE.importThemeLanguagePack('advanced'); - -// Variable declarations -var TinyMCE_advanced_autoImportCSSClasses = true; -var TinyMCE_advanced_foreColor = "#000000"; -var TinyMCE_advanced_anchorName = ""; -var TinyMCE_advanced_buttons = [ - // Control id, button img, button title, command, user_interface, value - ['bold', '{$lang_bold_img}', '{$lang_bold_desc}', 'Bold'], - ['italic', '{$lang_italic_img}', '{$lang_italic_desc}', 'Italic'], - ['underline', '{$lang_underline_img}', '{$lang_underline_desc}', 'Underline'], - ['strikethrough', 'strikethrough.gif', '{$lang_striketrough_desc}', 'Strikethrough'], - ['justifyleft', 'left.gif', '{$lang_justifyleft_desc}', 'JustifyLeft'], - ['justifycenter', 'center.gif', '{$lang_justifycenter_desc}', 'JustifyCenter'], - ['justifyright', 'right.gif', '{$lang_justifyright_desc}', 'JustifyRight'], - ['justifyfull', 'full.gif', '{$lang_justifyfull_desc}', 'JustifyFull'], - ['bullist', 'bullist.gif', '{$lang_bullist_desc}', 'InsertUnorderedList'], - ['numlist', 'numlist.gif', '{$lang_numlist_desc}', 'InsertOrderedList'], - ['outdent', 'outdent.gif', '{$lang_outdent_desc}', 'Outdent'], - ['indent', 'indent.gif', '{$lang_indent_desc}', 'Indent'], - ['cut', 'cut.gif', '{$lang_cut_desc}', 'Cut'], - ['copy', 'copy.gif', '{$lang_copy_desc}', 'Copy'], - ['paste', 'paste.gif', '{$lang_paste_desc}', 'Paste'], - ['undo', 'undo.gif', '{$lang_undo_desc}', 'Undo'], - ['redo', 'redo.gif', '{$lang_redo_desc}', 'Redo'], - ['link', 'link.gif', '{$lang_link_desc}', 'mceLink', true], - ['attachment', 'attachment.gif', '{$lang_attachment_desc}', 'mceAttachment', true], - ['unlink', 'unlink.gif', '{$lang_unlink_desc}', 'unlink'], - ['image', 'image.gif', '{$lang_image_desc}', 'mceImage', true], - ['cleanup', 'cleanup.gif', '{$lang_cleanup_desc}', 'mceCleanup'], - ['help', 'help.gif', '{$lang_help_desc}', 'mceHelp'], - ['code', 'code.gif', '{$lang_theme_code_desc}', 'mceCodeEditor'], - ['hr', 'hr.gif', '{$lang_theme_hr_desc}', 'inserthorizontalrule'], - ['removeformat', 'removeformat.gif', '{$lang_theme_removeformat_desc}', 'removeformat'], - ['sub', 'sub.gif', '{$lang_theme_sub_desc}', 'subscript'], - ['sup', 'sup.gif', '{$lang_theme_sup_desc}', 'superscript'], - ['forecolor', 'forecolor.gif', '{$lang_theme_forecolor_desc}', 'mceForeColor', true], - ['backcolor', 'backcolor.gif', '{$lang_theme_backcolor_desc}', 'mceBackColor', true], - ['charmap', 'charmap.gif', '{$lang_theme_charmap_desc}', 'mceCharMap'], - ['visualaid', 'visualaid.gif', '{$lang_theme_visualaid_desc}', 'mceToggleVisualAid'], - ['anchor', 'anchor.gif', '{$lang_theme_anchor_desc}', 'mceInsertAnchor'] -]; - -/** - * Returns HTML code for the specificed control. - */ -function TinyMCE_advanced_getControlHTML(button_name) -{ - var buttonTileMap = new Array('anchor.gif','backcolor.gif','bullist.gif','center.gif', - 'charmap.gif','cleanup.gif','code.gif','copy.gif','custom_1.gif', - 'cut.gif','forecolor.gif','full.gif','help.gif','hr.gif', - 'image.gif','indent.gif','left.gif','link.gif','attachment.gif','numlist.gif', - 'outdent.gif','paste.gif','redo.gif','removeformat.gif', - 'right.gif','strikethrough.gif','sub.gif','sup.gif','undo.gif', - 'unlink.gif','visualaid.gif'); - - // Lookup button in button list - for (var i=0; i'; - } - } - } - - // Old style - return ''; - } - } - - // Custom controlls other than buttons - switch (button_name) - { - case "formatselect": - var html = ''; - //formatselect - return html; - - case "styleselect": - //styleselect - return ''; - - case "fontselect": - //fontselect - return ''; - - case "fontsizeselect": - //fontsizeselect - return ''; - - case "|": - case "separator": - return ''; - - case "spacer": - return ''; - - case "rowseparator": - return '
'; - } - - return ""; -} - -/** - * Theme specific exec command handeling. - */ -function TinyMCE_advanced_execCommand(editor_id, element, command, user_interface, value) -{ - switch (command) - { - case "mceForeColor": - var template = new Array(); - var inputColor = TinyMCE_advanced_foreColor; - - if (!inputColor) - { - inputColor = "#000000"; - } - - template['file'] = 'color_picker.htm'; - template['width'] = 210; - template['height'] = 200; - - tinyMCE.openWindow(template, {editor_id : editor_id, command : "forecolor", input_color : inputColor}); - //mceForeColor - return true; - - case "mceBackColor": - var template = new Array(); - var inputColor = TinyMCE_advanced_foreColor; - - if (!inputColor) - { - inputColor = "#000000"; - } - - template['file'] = 'color_picker.htm'; - template['width'] = 210; - template['height'] = 200; - - tinyMCE.openWindow(template, {editor_id : editor_id, command : "HiliteColor", input_color : inputColor}); - //mceBackColor - return true; - - case "mceCodeEditor": - var template = new Array(); - - template['file'] = 'source_editor.htm'; - template['width'] = tinyMCE.getParam("theme_advanced_source_editor_width", 500); - template['height'] = tinyMCE.getParam("theme_advanced_source_editor_height", 400); - - tinyMCE.openWindow(template, {editor_id : editor_id, resizable : "yes", scrollbars : "no"}); - //mceCodeEditor - return true; - - case "mceCharMap": - var template = new Array(); - - template['file'] = 'charmap.htm'; - template['width'] = 550; - template['height'] = 280; - - tinyMCE.openWindow(template, {editor_id : editor_id}); - //mceCharMap - return true; - - case "mceInsertAnchor": - var template = new Array(); - - template['file'] = 'anchor.htm'; - template['width'] = 320; - template['height'] = 130; - - tinyMCE.openWindow(template, {editor_id : editor_id, name : TinyMCE_advanced_anchorName, action : (TinyMCE_advanced_anchorName == "" ? "insert" : "update")}); - //mceInsertAnchor - return true; - } - - // Default behavior - return false; -} - -/** - * Editor instance template function. - */ -function TinyMCE_advanced_getEditorTemplate(settings, editorId) -{ - function removeFromArray(in_array, remove_array) - { - var outArray = new Array(); - - for (var i=0; i' + key + ''; - } - - TinyMCE_advanced_autoImportCSSClasses = false; - } - - switch(layoutManager) - { - case "SimpleLayout" : //the default TinyMCE Layout (for backwards compatibility)... - var toolbarHTML = ""; - var toolbarLocation = tinyMCE.getParam("theme_advanced_toolbar_location", "bottom"); - var toolbarAlign = tinyMCE.getParam("theme_advanced_toolbar_align", "center"); - var pathLocation = tinyMCE.getParam("theme_advanced_path_location", "none"); - - // Render row 1 - var buttonNamesRow1 = tinyMCE.getParam("theme_advanced_buttons1", "bold,italic,underline,strikethrough,separator,justifyleft,justifycenter,justifyright,justifyfull,separator,styleselect,formatselect", true, ','); - buttonNamesRow1 = removeFromArray(buttonNamesRow1, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); - buttonNamesRow1 = addToArray(buttonNamesRow1, tinyMCE.getParam("theme_advanced_buttons1_add", "", true, ',')); - buttonNamesRow1 = addToArray(tinyMCE.getParam("theme_advanced_buttons1_add_before", "", true, ','), buttonNamesRow1); - - for (var i=0; i 0) - { - toolbarHTML += "
"; - deltaHeight -= 23; - } - - // Render row 2 - var buttonNamesRow2 = tinyMCE.getParam("theme_advanced_buttons2", "bullist,numlist,separator,outdent,indent,separator,undo,redo,separator,link,unlink,attachment,anchor,image,cleanup,help,code", true, ','); - buttonNamesRow2 = removeFromArray(buttonNamesRow2, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); - buttonNamesRow2 = addToArray(buttonNamesRow2, tinyMCE.getParam("theme_advanced_buttons2_add", "", true, ',')); - buttonNamesRow2 = addToArray(tinyMCE.getParam("theme_advanced_buttons2_add_before", "", true, ','), buttonNamesRow2); - - for (var i=0; i 0) - { - toolbarHTML += "
"; - deltaHeight -= 23; - } - - // Render row 3 - var buttonNamesRow3 = tinyMCE.getParam("theme_advanced_buttons3", "hr,removeformat,visualaid,separator,sub,sup,separator,charmap", true, ','); - buttonNamesRow3 = removeFromArray(buttonNamesRow3, tinyMCE.getParam("theme_advanced_disable", "", true, ',')); - buttonNamesRow3 = addToArray(buttonNamesRow3, tinyMCE.getParam("theme_advanced_buttons3_add", "", true, ',')); - buttonNamesRow3 = addToArray(tinyMCE.getParam("theme_advanced_buttons3_add_before", "", true, ','), buttonNamesRow3); - - for (var i=0; i 0) - { - deltaHeight -= 20; - } - - // Setup template html - template['html'] = ''; - - if (toolbarLocation == "top") - { - template['html'] += ''; - } - - if (pathLocation == "top") - { - template['html'] += ''; - deltaHeight -= 23; - } - - template['html'] += ''; - - if (toolbarLocation == "bottom") - { - template['html'] += ''; - } - - // External toolbar changes - if (toolbarLocation == "external") - { - var bod = document.body; - var elm = document.createElement ("div"); - - toolbarHTML = tinyMCE.replaceVars(toolbarHTML, tinyMCE.settings); - toolbarHTML = tinyMCE.replaceVars(toolbarHTML, tinyMCELang); - toolbarHTML = tinyMCE.replaceVar(toolbarHTML, 'style_select_options', styleSelectHTML); - toolbarHTML = tinyMCE.replaceVar(toolbarHTML, "editor_id", editorId); - toolbarHTML = tinyMCE.replaceVar(toolbarHTML, "default_document", tinyMCE.baseURL + "/blank.htm"); - - elm.className = "mceToolbarExternal"; - elm.id = "mceExternalToolbar"; - elm.innerHTML = '
' + toolbarHTML + '
' + pathHTML + '
' + toolbarHTML + '
'+toolbarHTML+'
'; - bod.appendChild (elm); - bod.style.marginTop = elm.offsetHeight + "px"; - - tinyMCE.isExternalToolbar = true; - - //template['html'] = '
'+toolbarHTML+'
' + template["html"]; - } - else - { - tinyMCE.isExternalToolbar = false; - } - - if (pathLocation == "bottom") - { - template['html'] += '' + pathHTML + ''; - deltaHeight -= 23; - } - - template['html'] += ''; - //"SimpleLayout" - break; - - case "RowLayout" : //Container Layout - containers defined in "theme_advanced_containers" are rendered from top to bottom. - template['html'] = ''; - - var containers = tinyMCE.getParam("theme_advanced_containers", "", true, ","); - var defaultContainerCSS = tinyMCE.getParam("theme_advanced_containers_default_class", "container"); - var defaultContainerAlign = tinyMCE.getParam("theme_advanced_containers_default_align", "center"); - - //Render Containers: - for (var i = 0; i < containers.length; i++) - { - if (containers[i] == "mceEditor") //Exceptions for mceEditor and ... - { - template['html'] += ''; - } - else if (containers[i] == "mceElementpath") // ... mceElementpath: - { - var pathClass = "mcePath"; - - if (i == containers.length-1) - { - pathClass = "mcePathBottom"; - } - else if (i == 0) - { - pathClass = "mcePathTop"; - } - else - { - deltaHeight-=2; - } - - template['html'] += ''; - deltaHeight -= 22; - } - else //Render normal Container: - { - var curContainer = tinyMCE.getParam("theme_advanced_container_"+containers[i], "", true, ','); - var curContainerHTML = ""; - var curAlign = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_align", defaultContainerAlign); - var curCSS = tinyMCE.getParam("theme_advanced_container_"+containers[i]+"_class", defaultContainerCSS); - - for (var j=0; j 0) - { - curContainerHTML += "
"; - deltaHeight -= 23; - } - - template['html'] += '
'; - } - } - - template['html'] += '
\ - \ -
' + pathHTML + '
' + curContainerHTML + '
'; - //RowLayout - break; - - case "BorderLayout" : //will be like java.awt.BorderLayout of SUN Java... - // Not implemented yet... - break; - - case "CustomLayout" : //User defined layout callback... - var customLayout = tinyMCE.getParam("theme_advanced_custom_layout",""); - - if (customLayout != "" && eval("typeof(" + customLayout + ")") != "undefined") - { - template = eval(customLayout + "(template);"); - } - break; - - default: - alert('UNDEFINED LAYOUT MANAGER! PLEASE CHECK YOUR TINYMCE CONFIG!'); - //CustomLayout - break; - } - - template['html'] = tinyMCE.replaceVar(template['html'], 'style_select_options', styleSelectHTML); - template['delta_width'] = 0; - template['delta_height'] = deltaHeight; - - return template; -} - -/** - * Insert link template function. - */ -function TinyMCE_advanced_getInsertLinkTemplate() -{ - var template = new Array(); - - template['file'] = 'link.htm'; - template['width'] = 300; - template['height'] = 150; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); - - return template; -}; - -/** - * Insert attachment template function. - */ -function TinyMCE_advanced_getInsertAttachmentTemplate() { - var template = new Array(); - - template['file'] = 'attachment.htm'; - template['width'] = 300; - template['height'] = 150; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_attachment_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_attachment_delta_height', 0); - - return template; -} - -/** - * Insert image template function. - */ -function TinyMCE_advanced_getInsertImageTemplate() -{ - var template = new Array(); - - template['file'] = 'image.htm?src={$src}'; - template['width'] = 340; - template['height'] = 280; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); - - return template; -}; - -/** - * Node change handler. - */ -function TinyMCE_advanced_handleNodeChange (editor_id, node, undo_index, - undo_levels, visual_aid, any_selection) -{ - function selectByValue(select_elm, value) - { - if (select_elm) - { - for (var i=0; i=0; i--) - { - var nodeName = path[i].nodeName.toLowerCase(); - var nodeData = ""; - - if (nodeName == "b") - { - nodeName = "strong"; - } - - if (nodeName == "i") - { - nodeName = "em"; - } - - if (getAttrib(path[i], 'id') != "") - { - nodeData += "id: " + path[i].getAttribute('id') + " "; - } - - if (getAttrib(path[i], 'class') != "") - { - nodeData += "class: " + path[i].getAttribute('class') + " "; - } - - if (getAttrib(path[i], 'className') != "") - { - nodeData += "class: " + path[i].getAttribute('className') + " "; - } - - if (getAttrib(path[i], 'src') != "") - { - nodeData += "src: " + path[i].getAttribute('src') + " "; - } - - if (getAttrib(path[i], 'href') != "") - { - nodeData += "href: " + path[i].getAttribute('href') + " "; - } - - if (nodeName == "img" && getAttrib(path[i], 'name') == "mce_plugin_flash") - { - nodeName = "flash"; - nodeData = ""; - } - - if (getAttrib(path[i], 'name').indexOf("mce_") != 0) - { - if (getAttrib(path[i], "className") != "") - { - nodeName += "." + getAttrib(path[i], "className"); - } - else if (getAttrib(path[i], "class") != "") - { - nodeName += "." + getAttrib(path[i], "class"); - } - } - - if (tinyMCE.isMSIE) - { - html += '' + nodeName + ''; - } - else - { - html += '' + nodeName + ''; - } - - if (i > 0) - { - html += " » "; - } - } - - pathElm.innerHTML = html + " "; - } - - // Get element color - var colorElm = tinyMCE.getParentElement(node, "font", "color"); - - if (colorElm) - { - TinyMCE_advanced_foreColor = "" + colorElm.color.toUpperCase(); - } - - // Reset old states - tinyMCE.switchClassSticky(editor_id + '_justifyleft', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_justifyright', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_justifycenter', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_justifyfull', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_sub', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_sup', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_anchor', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_link', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_attachment', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_unlink', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_outdent', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_image', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_hr', 'mceButtonNormal'); - - // Get anchor name - var anchorName = tinyMCE.getParentElement(node, "a", "name"); - - TinyMCE_advanced_anchorName = ""; - - if (anchorName) - { - TinyMCE_advanced_anchorName = anchorName.getAttribute("name"); - tinyMCE.switchClassSticky(editor_id + '_anchor', 'mceButtonSelected'); - } - - // Get link - var anchorLink = tinyMCE.getParentElement(node, "a", "href"); - - if (anchorLink || any_selection) - { - tinyMCE.switchClassSticky(editor_id + '_link', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_attachment', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal', false); - tinyMCE.switchClassSticky(editor_id + '_unlink', anchorLink ? 'mceButtonSelected' : 'mceButtonNormal', false); - } - - // Handle visual aid - tinyMCE.switchClassSticky(editor_id + '_visualaid', visual_aid ? 'mceButtonSelected' : 'mceButtonNormal', false); - - if (undo_levels != -1) - { - tinyMCE.switchClassSticky(editor_id + '_undo', 'mceButtonDisabled', true); - tinyMCE.switchClassSticky(editor_id + '_redo', 'mceButtonDisabled', true); - } - - // Within li, blockquote - if (tinyMCE.getParentElement(node, "li,blockquote")) - { - tinyMCE.switchClassSticky(editor_id + '_outdent', 'mceButtonNormal', false); - } - - // Has redo levels - if (undo_index != -1 && (undo_index < undo_levels-1 && undo_levels > 0)) - { - tinyMCE.switchClassSticky(editor_id + '_redo', 'mceButtonNormal', false); - } - - // Has undo levels - if (undo_index != -1 && (undo_index > 0 && undo_levels > 0)) - { - tinyMCE.switchClassSticky(editor_id + '_undo', 'mceButtonNormal', false); - } - - // Select class in select box - var selectElm = document.getElementById(editor_id + "_styleSelect"); - - if (selectElm) - { - TinyMCE_advanced_setupCSSClasses(editor_id); - - classNode = node; - breakOut = false; - var index = 0; - - do - { - if (classNode && classNode.className) - { - for (var i=0; i"); - } - else - { - selectByValue(selectElm, ""); - } - } - - // Select fontselect - var selectElm = document.getElementById(editor_id + "_fontNameSelect"); - - if (selectElm) - { - var elm = tinyMCE.getParentElement(node, "font", "face"); - - if (elm) - { - selectByValue(selectElm, elm.getAttribute("face")); - } - else - { - selectByValue(selectElm, ""); - } - } - - // Select fontsize - var selectElm = document.getElementById(editor_id + "_fontSizeSelect"); - - if (selectElm) - { - var elm = tinyMCE.getParentElement(node, "font", "size"); - - if (elm && getAttrib(elm, "size") != "") - { - selectByValue(selectElm, elm.getAttribute("size")); - } - else - { - selectByValue(selectElm, "0"); - } - } - - // Handle align attributes - alignNode = node; - breakOut = false; - do - { - if (!alignNode.getAttribute || !alignNode.getAttribute('align')) - { - continue; - } - - switch (alignNode.getAttribute('align').toLowerCase()) - { - case "left": - tinyMCE.switchClassSticky(editor_id + '_justifyleft', 'mceButtonSelected'); - breakOut = true; - break; - - case "right": - tinyMCE.switchClassSticky(editor_id + '_justifyright', 'mceButtonSelected'); - breakOut = true; - break; - - case "middle": - case "center": - tinyMCE.switchClassSticky(editor_id + '_justifycenter', 'mceButtonSelected'); - breakOut = true; - break; - - case "justify": - tinyMCE.switchClassSticky(editor_id + '_justifyfull', 'mceButtonSelected'); - breakOut = true; - break; - } - } while (!breakOut && (alignNode = alignNode.parentNode)); - - // Do special text - if (tinyMCE.isGecko && node.nodeType == 3) - { - var inst = tinyMCE.getInstanceById(editor_id); - var doc = inst.getDoc(); - - if (doc.queryCommandState("Bold")) - { - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); - } - - if (doc.queryCommandState("Italic")) - { - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); - } - - if (doc.queryCommandState("Underline") && - (node.parentNode == null || node.parentNode.nodeName != "A")) - { - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); - } - - if (doc.queryCommandState("Strikethrough")) - { - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); - } - } - - // Handle elements - do - { - switch (node.nodeName.toLowerCase()) - { - case "b": - case "strong": - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); - break; - - case "i": - case "em": - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); - break; - - case "u": - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); - break; - - case "strike": - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); - break; - - case "ul": - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonSelected'); - break; - - case "ol": - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonSelected'); - break; - - case "sub": - tinyMCE.switchClassSticky(editor_id + '_sub', 'mceButtonSelected'); - break; - - case "sup": - tinyMCE.switchClassSticky(editor_id + '_sup', 'mceButtonSelected'); - break; - - case "hr": - tinyMCE.switchClassSticky(editor_id + '_hr', 'mceButtonSelected'); - break; - - case "img": - if (getAttrib(node, 'name').indexOf('mce_') != 0) - { - tinyMCE.switchClassSticky(editor_id + '_image', 'mceButtonSelected'); - } - break; - } - } while ((node = node.parentNode)); -}; - -// This function auto imports CSS classes into the class selection droplist -function TinyMCE_advanced_setupCSSClasses(editor_id) -{ - if (!TinyMCE_advanced_autoImportCSSClasses) - { - return; - } - - var selectElm = document.getElementById(editor_id + '_styleSelect'); - - if (selectElm && selectElm.getAttribute('cssImported') != 'true') - { - var csses = tinyMCE.getCSSClasses(editor_id); - if (csses && selectElm) - { - for (var i=0; i 0) - { - selectElm.setAttribute('cssImported', 'true'); - } - } -}; diff --git a/public/tiny_mce/themes/advanced/editor_ui.css b/public/tiny_mce/themes/advanced/editor_ui.css deleted file mode 100644 index fd0bd76..0000000 --- a/public/tiny_mce/themes/advanced/editor_ui.css +++ /dev/null @@ -1,199 +0,0 @@ -.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { - margin-top: 1px; - margin-left: 1px; -} - -.mceButtonNormal { - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceButtonOver { -/* border-top: 1px solid buttonhighlight; - border-left: 1px solid buttonhighlight; - border-bottom: 1px solid buttonshadow; - border-right: 1px solid buttonshadow;*/ - border: 1px solid #0A246A; - cursor: arrow; - background-color: #B6BDD2; -} - -.mceButtonDown { -/* border-bottom: 1px solid buttonhighlight; - border-right: 1px solid buttonhighlight; - border-top: 1px solid buttonshadow; - border-left: 1px solid buttonshadow;*/ - cursor: arrow; - border: 1px solid #0A246A; - background-color: #8592B5; -} - -.mceButtonSelected { - border: 1px solid; - border-color: #C0C0BB; - cursor: arrow; -} - -.mceButtonDisabled { - filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); - -moz-opacity:0.3; - opacity: 0.3; - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceSeparator { - border-top: 1px solid buttonhighlight; - border-left: 1px solid buttonhighlight; - border-bottom: 1px solid buttonshadow; - border-right: 1px solid buttonshadow; - margin-right: 2px; - margin-left: 2px; -} - -.mceSeparatorLine { - margin:2px; - margin-left: 4px; - background-color: #F0F0EE; - border-top: 1px solid buttonshadow; - border-left: 1px solid buttonshadow; - border-bottom: 1px solid buttonhighlight; - border-right: 1px solid buttonhighlight; - width: 0px; - height: 15px; -} - -.mceSelectList { - font-family: "MS Sans Serif"; - font-size: 7pt; - font-weight: normal; - margin-top: 3px; - padding: 0px; - display: inline; - vertical-align: top; - background-color: #F0F0EE -} - -.mceLabel, .mceLabelDisabled { - font-family: "MS Sans Serif"; - font-size: 9pt; -} - -.mceLabel { - color: #000000; -} - -.mceLabelDisabled { - cursor: text; - color: #999999; -} - -.mceEditor { - background: #F0F0EE; - border: 1px solid #cccccc; -} - -.mceEditorArea { - font-family: "MS Sans Serif"; - background: #FFFFFF; -} - -.mceToolbarTop, .mceToolbarBottom { - background: #F0F0EE; -} - -.mceToolbarTop { - border-bottom: 1px solid #cccccc; -} - -.mceToolbarBottom { - border-top: 1px solid #cccccc; -} - -.mcePathTop, .mcePathBottom, .mcePath { - font-family: "MS Sans Serif"; - font-size: 9pt; - padding: 2px; - height: 20px; -} - -.mcePathTop { - border-bottom: 1px solid #cccccc; -} - -.mcePathBottom { - border-top: 1px solid #cccccc; -} - -.mcePathItem, .mcePathItem:link, .mcePathItem:visited, .mcePathItem:hover { - text-decoration: none; - font-family: "MS Sans Serif"; - font-size: 9pt; - color: #000000; -} - -.mcePathItem:hover { - text-decoration: underline; -} - -.mcePath { - border-bottom: 1px solid #cccccc; -} - -.mceDialog { - position: absolute; - left: 100px; - top: 100px; - z-index: 1000; -} - -.mceDialogHeader { - background: #F0F0EE; - width: 100%; - height: 16px; - margin: 0px; - padding: 0px; - border: 1px solid black; - border-bottom: 0px; -} - -.mceDialogTitle { - float: left; - font-family: "MS Sans Serif"; - font-size: 9pt; - height: 14px; -} - -.mceDialogClose { - float: right; - width: 16px; - height: 16px; - background-image: url('images/close.gif'); - background-repeat: no-repeat; - background-position: 0px 1px; - margin: 0px; - padding: 0px; -} - -.mceDialogClose a { - width: 16px; - height: 14px; - display: block; - font-family: "MS Sans Serif"; - font-size: 9pt; - margin: 0px; - padding: 0px; -} - -.mceDialogIFrameWrapper { - border: 1px solid black; - clear: both; -} diff --git a/public/tiny_mce/themes/advanced/image.htm b/public/tiny_mce/themes/advanced/image.htm deleted file mode 100644 index 61238e3..0000000 --- a/public/tiny_mce/themes/advanced/image.htm +++ /dev/null @@ -1,186 +0,0 @@ - - -{$lang_insert_image_title} - - - - - -
- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_image_title}
{$lang_insert_image_src}: - - - - -
{$lang_insert_image_alt}:
{$lang_insert_image_align}:
{$lang_insert_image_dimensions}: - x -
{$lang_insert_image_border}:
{$lang_insert_image_vspace}:
{$lang_insert_image_hspace}:
-
-
- - diff --git a/public/tiny_mce/themes/advanced/images/anchor.gif b/public/tiny_mce/themes/advanced/images/anchor.gif deleted file mode 100644 index ae7b2f39599479d0f43adc553d39059498a1d4e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmZ?wbhEHb6k!lyXlDQc1%m_yiv$CQ0t1f%E6+0LfHME6S_6*;g8(3!;1JN@5YgZn zF~u`sN_1*#OipV+!i2c2i2)f4BJvjp6f8(6*pN^GL8y84Ai13>-ZS#T+so8x|aF<`CA3u_$0>ljPwnvS@U6Jklth){;;VxS)$e(8XYn zV}VmkhYCkngu@1wL%eEiQ62^YM_F3L^)?7(Fg6~L5|5DEvVlq2w^5T#;Y>oJ3y-vT z&9(~<7BCzV=hce&;gHzC!p_1{;=#ep#K^?VvP6`jX<;`z827peSLk3ii&b_a{vGTA^8LW000jFEC2ui01yBW000DI@X1N5y?CCTCwhSLWzD02 zOL;L*(j*{j5iQFMiDL!NK|44HU&PKE`6P+J{^h87V3I}uz-Hvj+t diff --git a/public/tiny_mce/themes/advanced/images/backcolor.gif b/public/tiny_mce/themes/advanced/images/backcolor.gif deleted file mode 100644 index d44277dd6c671bc9b25a8e566ade2e0ebe3eb4c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 943 zcmZ?wbhEHb6k!lyXlDQc0RaI81pxyC0RsyG0}TZOkA#2#g8&Z)hkycyh=PKQ0EdKz zgn|j>ZA%I|HcV(pSTLht!HR$l8v+g-0HT5i4+1q&J)W*nF~^UQ<= z2NrC&u;Ijp3pW}LoLF$-#DWhG8vcLSaOTXJ0~a0~xbWe_j|1=DzyJULKiCPQ#ApZ% zOb96cWMO7t&}Ps9Sr5t+3>-ZS;T$p^8x|aF<`CA3IkDlP6OVu*S4W4VqAQQEGS{66 z4;>vjnOHmyNEAKk;^ng`NO1VjL zCpIi}W)M(z%8>|6INB<%uXV;kaPg5oImQTd02Z Z;=Q4=W(@*2r{2+6_Ky4bCm(SJYXFy%8g2jp diff --git a/public/tiny_mce/themes/advanced/images/bold_fr.gif b/public/tiny_mce/themes/advanced/images/bold_fr.gif deleted file mode 100644 index 7782282838436ab0e31947ec16760295fa0bd6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcJCaNqy~1B2pE7Dgb&paUX6G7e0tE&VGca(SoE5w@yYb2R2y dd8Oiq(r2B^mWS!(e$R~f*|oLnxd$VIH2@Wf8BPEI diff --git a/public/tiny_mce/themes/advanced/images/bold_ru.gif b/public/tiny_mce/themes/advanced/images/bold_ru.gif deleted file mode 100644 index c9e89b27e548815114e78462553c6e0016aeddc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77 zcmZ?wbhEHb6k!lyXkcXU_4U1dV4AuZOG#Ksx diff --git a/public/tiny_mce/themes/advanced/images/browse.gif b/public/tiny_mce/themes/advanced/images/browse.gif deleted file mode 100644 index 590f2de43f0db8d6ff7d0be42228f9266b29da8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmZ?wbhEHb6k!lzn8?g9o0C(|rRYBxDE?$&WME)s&|v@qkURsE)13a5r=|E8^Js8b zKVG{toUv_@hwL;4h9s}Lj8*&Ir1h0WNImEIwB=qiYx>TEFU_>xB^?a&6>B~^#bfrS N$(b43?=Ue~0{~lFDy9Gc diff --git a/public/tiny_mce/themes/advanced/images/bullist.gif b/public/tiny_mce/themes/advanced/images/bullist.gif deleted file mode 100644 index 12d0ec2299b415c1f1f8caeccbe6d36469314ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 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 YtZGunM1~7!-9j&9Ku>L uCpIWFv}so=tE$;n5v@(<=#UXg8k zAUpNFdCUF4)=M$HS7LjwxXpSS*ZLrI%KO;WZ-bWo%AInve(tsG+3(AizpGgCv}EI( zhSoEU)6aHIyD_!<xa~}2e0FSj*uu!jU=0BCE7-39 diff --git a/public/tiny_mce/themes/advanced/images/cleanup.gif b/public/tiny_mce/themes/advanced/images/cleanup.gif deleted file mode 100644 index 87b8f87a2f4445bb1ffff657c5b6d5c9b947df24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 977 zcmeH`L2DC10ENeFf=R6lYQR#0q#6+2`F0?^-yqZ56wYj5riB(j705< zVyCe!YXljiLO^P#O&b$wVQK^f*gCwVz_&4<9@p#ww;GKvb4p__+D;+lIH4d7 zq6DHiL<~r<#L3{ zVnPVJZvS27zx@*n^fjFl0D~adY1{b(aK8jax38a)<)nMt-a(yrb#EW&ktco)-FCXW zUSzF?^X5H|EC-%tB319cJwxaScYN90d+hAx8&{u~Bq`Yan-3(TQ^Dw|_)nB!88EpFaMT6=+Em0o-!%GK+|z`(|!15yD}%fM`$ zvFpx1gHxWX_wL}_+HUS5A;r2`^7#URglIjdIqP(P7wuShZQacGYZO)%oR;W6v7{)| Ihk?Nw0PoW%qyPW_ diff --git a/public/tiny_mce/themes/advanced/images/copy.gif b/public/tiny_mce/themes/advanced/images/copy.gif deleted file mode 100644 index f0b51871e24fb0b0a427be5a3929549431439a84..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 987 zcmeH`ziSg=9LC?6kh`|prkEk9Ay?>7+721o($El7g?eu15{}a0q7EHz=-{CA?GN!R zDSZWpj<2}fBD~`v9lpVUSGDvjT8vQP6%{i$yko`TZPGu%xep(n@!{ct=hp3o*-|}A zvg8Trsc3svm0DG1*VxwDJjxx4UVuJBe-}L_{oO9g=aO;3LZDpI zP*EXSD49@9Xcj3R0vBCSM93q_BP9U$T3`0|k2xqFYXMS#60s7f-yIx6jPDQd zOF+5*`4^yqw#K%^wnC|7N1aKl6Ro>weOCY6&KLOq1xEg+l7w6*lf8)ECx{u5Rr8uH zcyq(NJiZh&Z!0@$Z<55zdVeAJ=%J_9N1iq+laY;g>tN#J!z- zsYY8AHs^;b&PrVUo{IY>2A_{DH;tiu$q!U>?aj7n4Ccn%HRDcyX6pXWXB+9@Rchi7 z)Nd{{1}a56K%NLLEG0Wf|HzNUE8~@n+X3U->r3T}wTK$Q+d|pR31_~ROq-dU#b5kB KXM6AT>24D1{-9vc=M zY~~QwiaD`i;o)`xWiJ^8hXaSZ#1xZyA_9|-F*522@mNk=;xbt{cvXm`0E0CE2~igA diff --git a/public/tiny_mce/themes/advanced/images/cut.gif b/public/tiny_mce/themes/advanced/images/cut.gif deleted file mode 100644 index 6a969e55bd55d5e878a7ea7c7389f24df84bc924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358 zcmZ?wbhEHb6k!lyxN60a)wD6TV(o-!3(lN6eC5K41*`V%+Ix86($$-{Y-RM>$mqCC zBW^vT({i)44Y4&F8NJr8T(f@Cf?WamtJiKh5L>nW@S*+F=C7CYoK@B^fzfSsYEkEg z?T70+=PX&ZHNB*RF>;?q;G)uoi5jU}Iw#Ic%x_@~-^1v#a{AomlV-1Bv|F5z*D`8Iv8#2$;{X5uGoS*+ zpDc_F3|0&}AYqW77}%N}<`#J9NcEpkVF_}PndIb>kh%*Xi@|me}vhvFt^98V}F$kGh z@h}SUvw5;|u`nuGDKM~cv3d$ia`OPK*5u|C_GA&^Wprlb6=7*TcKpOiM+R#EaBGJ* diff --git a/public/tiny_mce/themes/advanced/images/forecolor.gif b/public/tiny_mce/themes/advanced/images/forecolor.gif deleted file mode 100644 index db21e1cbee4f70329d1b62fb7f88a8df8e14c85d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmbV}?@JS50LLF~wv4D%%cf=B%IVbIT2MA8)f!@r3NM2i{je*wnXm3m5d?9h-KHZt zBXES!N`nOvj}2?si{=VcOxRhmlR_SUB*!uLJiQEpi=+Rb&)W}tUwppD{Y~!rt7c#Z zD?mrnGyqs&g1`=e8&UzticpM0F$n>u8!8N3B4Cn$lPMOOMA^&60UCu%aUP7uUlbc-N9w+xBQVmU~Vm|u9hy7*FEo?KOCNQNOY zrxB>mzn0#3(D(_IVo*9jGAx!liOiEZfk>VB%U!(mKDYRhBq;=`RFulZT_oj2V}3Hp zq+(t?75MhHZQ&C)H~kEK9f4sAC7Zv0xQQj<=S=_n^dRI-pqMvsJZ#avM>rSz!FAKEUdA&1eF%}i>X*%B^`0UXg7R%Z- z25Y7Nq)>6JdS|w3uhmLdUTF!{969Q>**0(7Vry(Y+qL wCpIWFvS<$*F5=IYCbgBlgia8mS;J{!F0C7th00000 diff --git a/public/tiny_mce/themes/advanced/images/help.gif b/public/tiny_mce/themes/advanced/images/help.gif deleted file mode 100644 index a5d67714bc9becca85232849b8b3cf24bddba494..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1027 zcmZ?wbhEHb6k!lyXlDQc0gnv=0UOLCyDXx66e57^0|EgT1R^dd1RPL^0HOy92_F

OYT29% z2@^gfO!!|g;X}a;Ao^dw=yLgz2NUPan>2UXq*eQO?A_C_;6nTIt8Hs8PFj0l(%R#b z*Bx(I@t|SF|NhO7CaiccVa10D8~!ibb#~FNiwkyNU9|Vcf*lW*?0&Fd$A<+w{;xT9 zbM3KPdk!7ickIOGqn8#O_`l)AgAE5hY&Zc#{|}wJa_rKrYqxG3IPu`jjR)s$Jw9;Z z!+{I`58U|h;KhdrAAsop2N3xG;m3a<00-VEF|d!pfx>f8vWp(T46` z;}8RjlOAnu!baL#Bz%O}c-W*eHXJ!n^z6`7EjylF7RpDMxReE?PB;WRwa(;Wb6;S{ z`0yYzyMcvTKto%DqdL kCpIiR+%BN(HRpst!_jUDW2OZsHZDHiui#w7!@*z;0CG_jN&o-= diff --git a/public/tiny_mce/themes/advanced/images/image.gif b/public/tiny_mce/themes/advanced/images/image.gif deleted file mode 100644 index 36109de73c7e54428c194da374db4f19fec7f61a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194 zcmZ?wbhEHb6k!ly*v!Q+$3pADg9paO#xrNmR83}>b53;5xi1Ve8PaAl{09RDRG|2i zg^_`Qi$Mn@3^Id(B|qS#=jy#bmYv#4Q?pI*p?bZf4}wuZF{77A-PoE+3|-pFfbP)NAju!pljG~x9eYlg<-JldC77_7r5 f{>fl-My`~!@aq=WMO6iW(6IPA3%A6fg_wj zlS9U1!-9j&9Ku>L76J^1+c_CMN-Q=ma_Qif)R=JL!lNTi!a@oe0*y__`gwv2mKHE`lo$G!K;8!B2?h>J26he^ zj|~eBHggDT#hlo%(7B00$*smhVG%zmfg!{2D b7vIYJUmKs@=zXM?o5*?mlh5@MMh0sD=}{cF diff --git a/public/tiny_mce/themes/advanced/images/italic_ru.gif b/public/tiny_mce/themes/advanced/images/italic_ru.gif deleted file mode 100644 index 5c2f7fec2748d16db2da76bcb933e2f581c9f4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcXU_4U1d@| g-;s5$kL wCpIWFvpyBZ3(cKF-9?V<3rgqY@;KZ5_@87K3dCt-&=hpQLZ(cqB z_Vsf{S?~Qj*OzQPw(ro%o&{SUy!i0)`I8Sn{%boV9k}sf_R6DY&Yb!G|G#@k!GawZ zo;|t$?#;^$2OeCw@nOP(1Km?s+`D$|`}_CVt@93?crb6xuJ7N!Z`g6+!h`=o$;F$t z?iSDp*m2-^@1kwdSuGDf{LiiITd?86r1`5GW^8Z?%sP4D+SDb7jvT+RWb?(s>i%Wx zwz);;UwH6g<@U>ymhSlQ|NpENTQ6U`KYPQG4JRH~#%{P0cN>ZS5VMUEMvsef`aj?qa&CZj7Gn zVge32ZH~4!62i_b-U}Bm)oNuI6yRWWk}{OFFwt}|v}`q#5D|Bku-DfRH4qmNR&0X1HvvY{w_B*J`S(E~jG5Y9w&)0V{KxxdN-ChZQ6LYe}9L6TW@_@$=X3u0{rH E042uB(f|Me diff --git a/public/tiny_mce/themes/advanced/images/newdocument.gif b/public/tiny_mce/themes/advanced/images/newdocument.gif deleted file mode 100644 index 79a93da5cc9e3e9d82c582c9e89b22f95b250b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 230 zcmZ?wbhEHb6k!lyIKlt||AFAg{|gr$Jb3Wo!-xM1Rvg%{aq-7@e#pEg;4hCxgAlE{= diff --git a/public/tiny_mce/themes/advanced/images/outdent.gif b/public/tiny_mce/themes/advanced/images/outdent.gif deleted file mode 100644 index 53e89a77f471fe02d405d9fa6c0f4f48e67ffffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmZ?wbhEHb6k!lyXlDQcgMbMR5fg%PCOIT5a7fq?P;nuk0f-(1bUY~QJDJe&p=;XS zuKCBNY<@gtPamxHZD0im!sN>#cN9P#l_srObpflu{uB& diff --git a/public/tiny_mce/themes/advanced/images/paste.gif b/public/tiny_mce/themes/advanced/images/paste.gif deleted file mode 100644 index a676604cf68baab73af5ce50cc4a6934c447bd4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmeH`O>0v@6ow~hG`Cf2QY(p=>W#WEZIO$(h#!kdikgbbXhDipn1VvU3R89Au46+@ zx)4SbNkPiAP{?w0p_L-cjR?2kVpeiN(Gh|KTsX_RiW7f^`0((;*&H}8ob%)7@+YSU z!62xDF3@vf-b2uXmJ)&pqe+5G5F>~uA?b=p84_$0Axu%3V#4qPMkuG)W5lHdQGy@M z-R9I~6tfy;l&~5Rb;KFwb)pzhb!$TLgyujufU$~%S+}}IdM1D-Kt>@QU?Z^!hzYS# zHtiltYn(E{>Vk2>8Rd1#ITM`PK{Oa|NG_yUS3)W&s0yr1hg65mgw$v&Gi@vHw7D_7 zV{D3!5i(FR&{Am?8l{bH8%t-aWBFUm|M>SC$o`J?0B{40c2Dj81aLls4JT6)+^;x$ zhNr@{Qu5%=4Y1@i7oQ&4btW`4QG1p{MYxGu#f9`pCKEe;tFLXh zBJUUCyECK0jr#t9iDhr)%4)7RiMC~0-*1jTPUY^mz!EoNc=-*`;Se%E^iJ* z=KY}y*9Dr6##7niJbnm2z{36$KUTfju{+O4uJxynLdxU&hOfRz7YaMRx~FPwm87`3 s7p+{*&#d)5$&TeyU$pB}Fd$}@-@U!pbRu_uej0lD=GV7aPZXT~1EP=l`~Uy| diff --git a/public/tiny_mce/themes/advanced/images/redo.gif b/public/tiny_mce/themes/advanced/images/redo.gif deleted file mode 100644 index 26a146bdaf3bff7c5366806ff64685cb9a9e291f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1&;{^0TV2vXBh-6Fo*!64OR(D3=%e2rEj***lbYnz&(1F zL&k=nf~6sK+cGOwI%FL1EI;H>a3Q|_cx2s0hl&SYbr0ei_eQq8kL-OP(C{Ik<3mpG z!=%Y?Gp4>znDC)s#)pE1Z_AgwFIezl`s%Z7OWyaaf7c5{8{W;{`F_HV536?HUAgz( zqP_2y?0&y;@4J=z-tRbgare<{E04ZkbM(#TL+`g9d$IlK`|T&5Z94UK$H^zVPP{mD z`q6>Y&kme>a{SVZQ{V__6h5*SSp!k!8nSsHHK?kH0lqVQCx*1wIWIQ%3IM~b~ ztQB)YAW=Zpput2WL)nc>MBV2{LdWBytgO5$H4-14AF#BTScp_KC^9k$D3x95Xb3pk z%E;s`qwt{7g@eUZ-$KHInTb)PD=Se_9LqfrXf`$bR6E?I> z-8^Bzfdv~bY&h`X7Et!?(;IglU%&n6^7VTK9UB^E9GI};!mYcH?%sc7-~rUMA)#VI zLC1oI85CMpwFNK(gX4n16$#N=>;A-QvD~E6rGHb((C0_zT6VS#CULl zQ>5Fvn@tH@0^|-biFXPFsHkR`-fnjAd-S@2eTik#hvFIycX6hOqN*Bo4?bNLJtoyo tDNRo?ekElV)oLjnM1~7!-9j&9Ku>L uCpIWFvaOo5kkGsR6pzPYmZ>z@A8Mwr4f?DvZn3YBf4AuY|n-yCC diff --git a/public/tiny_mce/themes/advanced/images/spacer.gif b/public/tiny_mce/themes/advanced/images/spacer.gif deleted file mode 100644 index fc2560981ee1caca400e225e48d282106f907f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 ucmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Df>utpmhBaYhCPCMFj~25SJyItL8^ diff --git a/public/tiny_mce/themes/advanced/images/strikethrough.gif b/public/tiny_mce/themes/advanced/images/strikethrough.gif deleted file mode 100644 index ce7b65304e85e57d803d69ad14a8f1e19389a5ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0e~nM1~7!-9j&9Ku>L zCpIiR+|J6#!Qv43$fb*2mu-W_#Ki}@gq^eg?D)9oc)w`yDi+UxWcP`ZhU;Wb2rW80 O+oJf@ok{}*25SImDA+u352i-1z@WyU19A;0PcU#K zGWc@Hcx+g3u$ee6)z3=D@^XDF(=2s8#TFz_A+u352i|<1Z?vtF&Y8`90H0zS(q6ZG#GS1 z?f~Tp299)wKn@v?4GRu7a|mn2oY?Ttfm6`MLdE0IL6=5VxgLid3XJTHihL{%j0+i= zTco)pUOZUHz`(_8Ea70l;J_-(r+y`*fJxn1K#%dpmz5uw85tz>I9hiGFfi~k>2mD# P*t+WK>Ii){76xkoFRNeL diff --git a/public/tiny_mce/themes/advanced/images/table.gif b/public/tiny_mce/themes/advanced/images/table.gif deleted file mode 100644 index f8a00544a9980d38c44d5fe8e9a8457be8339834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmeH`!D|yi6vijCX;K?;HK|5XNfs0Yg$)+cs)rOqvff5dHHc2Uv)oRl&oNM zL_v>pGsp4dsvwhU>0X4Xh+Wac9CC=o!gvw&;JEQG@DJ$6$B*y9ySxux{Y-6ku9*Wl z&;cV^mgTqzF2D-Ju^=LJ*5Me*7UC50Cy+D9dr10NaI7en0;v!yiHT1LWt4Ho80`td zH0fy?J20##7#A#vDOn&n7d(iA=0Y-IcxbrPf)f!?@szE;c^>s&MB!_#s1QkQn7rM&uZWEuIkdp$R4&n$wy)0vxLV{8?)r-!}Ci)!@%sw>sSn!}>!G{SeK1|r~VZn+68+II6u;asm10Ob=_wF-@g9v?#;*dZ@+%|{O#+PpFh6;{Q2Y8&mX^k|N8U$_y7O@!A=+@ zMnhm=LO}5+3o`?QHiHhxdQhHV;HYB==aBK(u;5@bhp<-6i46*DqFMnSA1*XHGjymj z$?Op*WNGP=)SJbz@M1!Xh>C;FgAEIv8ibYXrszl~ z&MaaYDh9g*7@JwyXK1-BXgI*Il2h;pPeZ6;LmS)vCRL5HH(U%EXSsA%Z__>8z+epk DI%10H diff --git a/public/tiny_mce/themes/advanced/images/table_delete_row.gif b/public/tiny_mce/themes/advanced/images/table_delete_row.gif deleted file mode 100644 index 1997065fb2b447f498ab7fda4b7e21dcbb25dc81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1CIoUh=PEGhJcKQgo1{IiU|b`3j#VmBuw~FFylkPf)5Q7 z7Bo!QFk!}m2{SfKSg@gC#fJ$SK1|s0VZn+63pO0su;ai2Ap5|F4JUx;|A7nt58U{F z;lck0FaAIH@c#o4{rLYMi2nZv+crv!hQJ^S0mYvz%nS@F3_2h;f${_cM>m5fhm6OD z1qYisgtcN$Ojy9mEvgi>fT8hWN4JEt$%Yw%N7~tCoGZROc*x+)p`mC~@Svg5n~l@8 z>cxRXXEq)or2`@y3m*9JNg2eP*va6?$lx(i=t)DOQwuAXkirbBgarR4#!XpwwGCZQ}j-u$i5iXM38c!-9o(cUMTVu`pNz0PJ9X!TQ3xphWMO7tP+`ykxe1gf7&uxPJUL`M zHY_;U%pokNQs8*7k%5a_=z@SE(i5MkXeC zPNt5?0yW=8hN62%Dla%PGcz-pWCS=goN5wqs`((G@bc1P7WEc}kBSW;s{+{lBo>-5 iu&xUgtrHbga%dGy+03=YpedVyC-?NbIlm1R7_0$Wk9qk3 diff --git a/public/tiny_mce/themes/advanced/images/table_insert_col_before.gif b/public/tiny_mce/themes/advanced/images/table_insert_col_before.gif deleted file mode 100644 index 5d1ff37afea7bb2e67952400e00184aa275d6764..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 935 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&uxOJUL`M zHY_;U%)u+PW5EN5h88YU7mp7DN{(zYMmj4p0u!3~q*V&u{5arzY@(RFO-4h5!|^7D zIH?}ZVugm;rn%2dUMy&AWMq^w(NJJWb>vXAtKet|SsBK;hMu<;?0m9#Rd5 h!d40F?cxwzaHwNr1Z$MUMpFj1Z7JoaTqOh;tN|1Me9r&? diff --git a/public/tiny_mce/themes/advanced/images/table_insert_row_after.gif b/public/tiny_mce/themes/advanced/images/table_insert_row_after.gif deleted file mode 100644 index c3aa15f93a9d50777ca3a3b2309fc807ceabc57a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%)uMAz#x%{g`JbTZ-#`DOLGT{dj|*Oqh`h)X6?Ek4-y$X8X1FD*?2NJv$hH7 z&6{JfXpzqZDa$&I13@aDj5?v~Qf7WQ*v!VmA#i}h;Q=$htVPBS0l|h)240Jt69SHm a!Hpb79uX5BFnBXLF$=_=o|fvsU=08}a&%e% diff --git a/public/tiny_mce/themes/advanced/images/table_insert_row_before.gif b/public/tiny_mce/themes/advanced/images/table_insert_row_before.gif deleted file mode 100644 index c3271e54937cb8dbfb435ee8bc2d02157cff1448..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 928 zcmZ?wbhEHb6k!lyXlDQc1CNA&goc2OhJ=EKgo+6T6%!mP9uzc82Q3xphWMO7tP+`ykxe1gf7&vMfJUL`M zHY_;U%pt55lkwqTGaC=w17?0%i;Nu$1RC5Kcr9{H2skpjHgXtwL`-~0*X=}WE7QHI{4WtnErk^c$i_Har&nt0T0z!7V6jbF?3B; b3|uVFrNMjfN;AWXK;{oIr@tjQFjxZsoSk_C diff --git a/public/tiny_mce/themes/advanced/images/underline.gif b/public/tiny_mce/themes/advanced/images/underline.gif deleted file mode 100644 index d6b8afdabd9b6a8eae84df6c7427d2dc3eba592d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 872 zcmZ?wbhEHb6k!lyXlDR{>gsARJxYv*z=#V0#h)z93=B*RIv}5e@&p5iD+4QsjK_ur z2b(#BwPH?uP-tjpU~%Z#@!_FEH;#u+G?QQ1HMZVSz)!28WCdp>^9bD_1#W z9B?QAq6=|#M*}J@MAThysCeL2_aLrmZ$QI?$hHRo4IctJJ|s+dkTLar!h{b6GaeMo z_)xImL;tGFGuNJLSn;8E!}|#kz2AK7?e?SZH=lmL?c|#)*REc= zcK7o2`{%DdKYiuh>6>rCo){%YLx7wRQ2fcl%)sEtpaaqj$`cG6eGJVUG9DWi9Bk$g z)`~e1peP`&U-TzKVo58fkdn)u4HFAm4oIt+Sa<{^FmcOpIA6GssN~GdCL$tpz<^n? zolnk0!GXc)K?A3%K-!KC2M;qzFiSGHMjSlQ$|qT)vULN~LKb!&4h{~53GB=~rW#x! liiyn;jr;~n1a334wsE8>f{lbk0FP}g8@Z*1AO8JBZ2V4TPjvT)boz>E_VC#h&A2w~>{r~^} zcW+)kdvgEYwQCPveE9zU{iUl{4&3-KZ_Td4>V5-{f`ozz0RL8z#>2v34FK-Fw;KQe diff --git a/public/tiny_mce/themes/advanced/images/visualaid.gif b/public/tiny_mce/themes/advanced/images/visualaid.gif deleted file mode 100644 index 188b3487adccadc6bb87790ababd89c3f77ac906..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 zcmZ?wbhEHb6k!lyXlDQc1CNA&j0pi53jzujBvdR&Xjo9tu%V!1L&1a%4L~#lhz?9x zaA3lU0}UHKOaP)C9~P`QuwcW11v`M`g#|k|3CnC$S5%y0`v|6#h)z9 z3=FyqIv|Tdd4hrCG($9pjK_ur2b(#BwPH?8Na$!+aL70@;o%`xE@3r~2@eh^a*OfW zb){@fYV8uyU=m>YIPsvzB(=b0F*h9!vas_>nIvp*aAaa(=UE{$c%a#~LRYWm%E`;>0nDsi0u0%SIVS};0~WjpSa5`cBSCvh z%*PFx?Yyk-9;sS1rktPecv(onz=7cgr>f|JF9`=+IyqQeYAP7QnojPJdlA=WkYJqN WB*e5L?(DA8!`C+?3-fR=SOWle^sxB= diff --git a/public/tiny_mce/themes/advanced/langs/ar.js b/public/tiny_mce/themes/advanced/langs/ar.js deleted file mode 100644 index 29d93cf..0000000 --- a/public/tiny_mce/themes/advanced/langs/ar.js +++ /dev/null @@ -1,60 +0,0 @@ -// Arabic lang variables - -tinyMCELang['lang_theme_style_select'] = 'تصاميم'; -tinyMCELang['lang_theme_code_desc'] = 'شفرة المصدر'; -tinyMCELang['lang_theme_code_title'] = 'شفرة المصدر'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'منخفض'; -tinyMCELang['lang_theme_sup_desc'] = 'مرتفع'; -tinyMCELang['lang_theme_hr_desc'] = 'إدراج خط فاصل'; -tinyMCELang['lang_theme_removeformat_desc'] = 'إزالة التنسيقات'; -tinyMCELang['lang_theme_custom1_desc'] = 'Your custom description here'; -tinyMCELang['lang_insert_image_border'] = 'سمك الحدود'; -tinyMCELang['lang_insert_image_dimensions'] = 'المواصفات'; -tinyMCELang['lang_insert_image_vspace'] = 'تباعد عمودي'; -tinyMCELang['lang_insert_image_hspace'] = 'تباعد أفقي'; -tinyMCELang['lang_insert_image_align'] = 'محاذاة'; -tinyMCELang['lang_insert_image_align_default'] = 'Default'; -tinyMCELang['lang_insert_image_align_baseline'] = 'على السطر'; -tinyMCELang['lang_insert_image_align_top'] = 'أعلى'; -tinyMCELang['lang_insert_image_align_middle'] = 'وسط'; -tinyMCELang['lang_insert_image_align_bottom'] = 'أسفل'; -tinyMCELang['lang_insert_image_align_texttop'] = 'أعلى النص'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'وسط السطر'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'أسفل النص'; -tinyMCELang['lang_insert_image_align_left'] = 'يسار'; -tinyMCELang['lang_insert_image_align_right'] = 'يمين'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraph'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Address'; -tinyMCELang['lang_theme_pre'] = 'Preformatted'; -tinyMCELang['lang_theme_h1'] = 'Heading 1'; -tinyMCELang['lang_theme_h2'] = 'Heading 2'; -tinyMCELang['lang_theme_h3'] = 'Heading 3'; -tinyMCELang['lang_theme_h4'] = 'Heading 4'; -tinyMCELang['lang_theme_h5'] = 'Heading 5'; -tinyMCELang['lang_theme_h6'] = 'Heading 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'لون النص'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Apply'; -tinyMCELang['lang_theme_forecolor_desc'] = 'لون النص'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'إدراج رمز..ِ'; -tinyMCELang['lang_theme_charmap_desc'] = 'إدراج رمز..ِ'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Toggle guidelines/invisible elements'; -tinyMCELang['lang_insert_anchor_title'] = 'Insert/edit anchor'; -tinyMCELang['lang_insert_anchor_name'] = 'Anchor name'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insert/edit anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/ca.js b/public/tiny_mce/themes/advanced/langs/ca.js deleted file mode 100644 index 989532a..0000000 --- a/public/tiny_mce/themes/advanced/langs/ca.js +++ /dev/null @@ -1,61 +0,0 @@ -// CA lang variables by Marc Bria - -tinyMCELang['lang_theme_style_select'] = 'Estils'; -tinyMCELang['lang_theme_code_desc'] = 'Editar codi HTML'; -tinyMCELang['lang_theme_code_title'] = 'Editor codi HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Ajustar salt de línea'; -tinyMCELang['lang_theme_sub_desc'] = 'Subíndex'; -tinyMCELang['lang_theme_sup_desc'] = 'Superíndex'; -tinyMCELang['lang_theme_hr_desc'] = 'Insertar un separador horitzontal'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Eliminar format'; -tinyMCELang['lang_theme_custom1_desc'] = 'La teva descripció'; -tinyMCELang['lang_insert_image_border'] = 'Marc'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensions'; -tinyMCELang['lang_insert_image_vspace'] = 'Espai vertical'; -tinyMCELang['lang_insert_image_hspace'] = 'Espai horizontal'; -tinyMCELang['lang_insert_image_align'] = 'Alineament'; -tinyMCELang['lang_insert_image_align_default'] = 'Per defecte'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Línea base'; -tinyMCELang['lang_insert_image_align_top'] = 'Superior'; -tinyMCELang['lang_insert_image_align_middle'] = 'Centre'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Inferior'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Alinear text amunt'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Centrat horitzontal'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Centrat a baix'; -tinyMCELang['lang_insert_image_align_left'] = 'Esquerra'; -tinyMCELang['lang_insert_image_align_right'] = 'Dreta'; -tinyMCELang['lang_insert_image_delta_height'] = 10; -tinyMCELang['lang_theme_font_size'] = '-- Mida font --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraph'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Address'; -tinyMCELang['lang_theme_pre'] = 'Preformatejat'; -tinyMCELang['lang_theme_h1'] = 'Capçalera 1'; -tinyMCELang['lang_theme_h2'] = 'Capçalera 2'; -tinyMCELang['lang_theme_h3'] = 'Capçalera 3'; -tinyMCELang['lang_theme_h4'] = 'Capçalera 4'; -tinyMCELang['lang_theme_h5'] = 'Capçalera 5'; -tinyMCELang['lang_theme_h6'] = 'Capçalera 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Selecciona el color'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Apply'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Selecciona color frontal'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Selecciona color de fons'; -tinyMCELang['lang_theme_charmap_title'] = 'Selecciona un caràcter especial'; -tinyMCELang['lang_theme_charmap_desc'] = 'Inserta un caràcter especial'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Alterna líniesguia/elements invisibles'; -tinyMCELang['lang_insert_anchor_title'] = 'Inserta/edita àncora'; -tinyMCELang['lang_insert_anchor_name'] = 'Nom de l´àncora'; -tinyMCELang['lang_theme_anchor_desc'] = 'Inserta/edita un àncora'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Títlo'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copiar/Tallar/Enganxar no és possible amb Mozilla i Firefox.\nVols més informació sobre aquest problema de seguretat?'; -tinyMCELang['lang_theme_path'] = 'Camí'; -tinyMCELang['lang_cut_desc'] = 'Retallar'; -tinyMCELang['lang_copy_desc'] = 'Copiar'; -tinyMCELang['lang_paste_desc'] = 'Enganxar'; -tinyMCELang['lang_link_list'] = 'Llistat d´enllaços'; -tinyMCELang['lang_image_list'] = 'Llistat d´imatges'; -tinyMCELang['lang_browse'] = 'Explorar'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/cs.js b/public/tiny_mce/themes/advanced/langs/cs.js deleted file mode 100644 index be75bc3..0000000 --- a/public/tiny_mce/themes/advanced/langs/cs.js +++ /dev/null @@ -1,60 +0,0 @@ -// CZ lang variables thanks to "Pavel Novák", repaired by Josef Klimosz - -tinyMCELang['lang_theme_style_select'] = 'Styly'; -tinyMCELang['lang_theme_code_desc'] = 'Zobrazit HTML'; -tinyMCELang['lang_theme_code_title'] = 'Editace HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Bez dìlení slov'; -tinyMCELang['lang_theme_sub_desc'] = 'Dolní index'; -tinyMCELang['lang_theme_sup_desc'] = 'Horní index'; -tinyMCELang['lang_theme_hr_desc'] = 'Vložit vodorovný oddìlovaè'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Zrušit formátování'; -tinyMCELang['lang_theme_custom1_desc'] = 'Libovolný popisek'; -tinyMCELang['lang_insert_image_border'] = 'Rámeèek'; -tinyMCELang['lang_insert_image_dimensions'] = 'Rozmìry'; -tinyMCELang['lang_insert_image_vspace'] = 'Vertikální okraj'; -tinyMCELang['lang_insert_image_hspace'] = 'Horizontální okraj'; -tinyMCELang['lang_insert_image_align'] = 'Zarovnání'; -tinyMCELang['lang_insert_image_align_default'] = 'Výchozí'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Na úèaøí'; -tinyMCELang['lang_insert_image_align_top'] = 'Nahoru'; -tinyMCELang['lang_insert_image_align_middle'] = 'Na støed'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Dolù'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Nejvyšší bod textu'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Støed øádku'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Spodek øádku'; -tinyMCELang['lang_insert_image_align_left'] = 'Vlevo'; -tinyMCELang['lang_insert_image_align_right'] = 'Vpravo'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Odstavec'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Adresa'; -tinyMCELang['lang_theme_pre'] = 'Pøedformát'; -tinyMCELang['lang_theme_h1'] = 'Nadpis 1'; -tinyMCELang['lang_theme_h2'] = 'Nadpis 2'; -tinyMCELang['lang_theme_h3'] = 'Nadpis 3'; -tinyMCELang['lang_theme_h4'] = 'Nadpis 4'; -tinyMCELang['lang_theme_h5'] = 'Nadpis 5'; -tinyMCELang['lang_theme_h6'] = 'Nadpis 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Výbìr barvy'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Vybrat'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Barva popøedí'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Barva pozadí'; -tinyMCELang['lang_theme_charmap_title'] = 'Výbìr uživ. znaku'; -tinyMCELang['lang_theme_charmap_desc'] = 'Vložit znak'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Zapnout znaèky/neviditelné prvky'; -tinyMCELang['lang_insert_anchor_title'] = 'Vložení/editace záložky'; -tinyMCELang['lang_insert_anchor_name'] = 'Název'; -tinyMCELang['lang_theme_anchor_desc'] = 'Vložit/editovat záložku'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Název'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste není použitelné v Mozille a Firefoxu.\nChcete více informací o tomto problému?'; -tinyMCELang['lang_theme_path'] = 'Cesta'; -tinyMCELang['lang_cut_desc'] = 'Vyjmout'; -tinyMCELang['lang_copy_desc'] = 'Kopírovat'; -tinyMCELang['lang_paste_desc'] = 'Vložit'; -tinyMCELang['lang_link_list'] = 'Seznam'; -tinyMCELang['lang_image_list'] = 'Seznam'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Vlastnosti obrázku'; -tinyMCELang['lang_newdocument_desc'] = 'Nový dokument'; diff --git a/public/tiny_mce/themes/advanced/langs/da.js b/public/tiny_mce/themes/advanced/langs/da.js deleted file mode 100644 index 631f7aa..0000000 --- a/public/tiny_mce/themes/advanced/langs/da.js +++ /dev/null @@ -1,61 +0,0 @@ -// DK lang variables contributed by Jan Moelgaard - -tinyMCELang['lang_theme_style_select'] = 'Styles'; -tinyMCELang['lang_theme_code_desc'] = 'Rediger html-kode'; -tinyMCELang['lang_theme_code_title'] = 'HTML Kodeeditor'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Sænket skrift'; -tinyMCELang['lang_theme_sup_desc'] = 'Hævet skrift'; -tinyMCELang['lang_theme_hr_desc'] = 'Indsæt horisontal linje'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Fjern formatering'; -tinyMCELang['lang_theme_custom1_desc'] = 'Indsæt din egen beskrivelse her'; -tinyMCELang['lang_insert_image_border'] = 'Kant'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensioner'; -tinyMCELang['lang_insert_image_vspace'] = 'VSpace'; -tinyMCELang['lang_insert_image_hspace'] = 'HSpace'; -tinyMCELang['lang_insert_image_align'] = 'Justering'; -tinyMCELang['lang_insert_image_align_default'] = 'Standard'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Bundlinje'; -tinyMCELang['lang_insert_image_align_top'] = 'Top'; -tinyMCELang['lang_insert_image_align_middle'] = 'Midt i'; -tinyMCELang['lang_insert_image_align_bottom'] = 'I bunden'; -tinyMCELang['lang_insert_image_align_texttop'] = 'I toppen af teksten'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Absolut midte'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Absolut bund'; -tinyMCELang['lang_insert_image_align_left'] = 'Venstre'; -tinyMCELang['lang_insert_image_align_right'] = 'Højre'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Afsnit'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Addresse'; -tinyMCELang['lang_theme_pre'] = 'Præformateret'; -tinyMCELang['lang_theme_h1'] = 'Overskrift 1'; -tinyMCELang['lang_theme_h2'] = 'Overskrift 2'; -tinyMCELang['lang_theme_h3'] = 'Overskrift 3'; -tinyMCELang['lang_theme_h4'] = 'Overskrift 4'; -tinyMCELang['lang_theme_h5'] = 'Overskrift 5'; -tinyMCELang['lang_theme_h6'] = 'Overskrift 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Vælg en farve'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Anvend'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Vælg forgrundsfarve'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Vælg specialkarakter'; -tinyMCELang['lang_theme_charmap_desc'] = 'Indsæt specialkarakter'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Slå linjer/usynlige elementer til og fra'; -tinyMCELang['lang_insert_anchor_title'] = 'Indsæt/rediger bogmærke'; -tinyMCELang['lang_insert_anchor_name'] = 'Bogmærkets navn'; -tinyMCELang['lang_theme_anchor_desc'] = 'Indsæt/rediger bogmærke'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'Klasse'; diff --git a/public/tiny_mce/themes/advanced/langs/de.js b/public/tiny_mce/themes/advanced/langs/de.js deleted file mode 100644 index 2c13050..0000000 --- a/public/tiny_mce/themes/advanced/langs/de.js +++ /dev/null @@ -1,63 +0,0 @@ -// DE lang variables -// Translated 2004 by Crazy Chrissi -// Edited 2004 by Krokogras - -tinyMCELang['lang_theme_style_select'] = 'Styles'; -tinyMCELang['lang_theme_code_desc'] = 'HTML-Modus'; -tinyMCELang['lang_theme_code_title'] = 'HTML-Code Editor'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Zeilenumbruch'; -tinyMCELang['lang_theme_sub_desc'] = 'Tiefergestellt'; -tinyMCELang['lang_theme_sup_desc'] = 'Höhergestellt'; -tinyMCELang['lang_theme_hr_desc'] = 'Horizontale Linie einfügen'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Formatierung löschen'; -tinyMCELang['lang_theme_custom1_desc'] = 'Beschreibung eingeben'; -tinyMCELang['lang_insert_image_border'] = 'Rahmen'; -tinyMCELang['lang_insert_image_dimensions'] = 'Größe'; -tinyMCELang['lang_insert_image_vspace'] = 'Vertikal einrücken'; -tinyMCELang['lang_insert_image_hspace'] = 'Horizontal einrücken'; -tinyMCELang['lang_insert_image_align'] = 'Ausrichten'; -tinyMCELang['lang_insert_image_align_default'] = 'Normal'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Grundlinie'; -tinyMCELang['lang_insert_image_align_top'] = 'Oben'; -tinyMCELang['lang_insert_image_align_middle'] = 'Mitte'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Unten'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Textoberkante'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Absolute Mitte'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Absolut unten'; -tinyMCELang['lang_insert_image_align_left'] = 'Links'; -tinyMCELang['lang_insert_image_align_right'] = 'Rechts'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Standard-Text'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Addresse'; -tinyMCELang['lang_theme_pre'] = 'Vorformatiert (pre)'; -tinyMCELang['lang_theme_h1'] = 'Überschrift 1'; -tinyMCELang['lang_theme_h2'] = 'Überschrift 2'; -tinyMCELang['lang_theme_h3'] = 'Überschrift 3'; -tinyMCELang['lang_theme_h4'] = 'Überschrift 4'; -tinyMCELang['lang_theme_h5'] = 'Überschrift 5'; -tinyMCELang['lang_theme_h6'] = 'Überschrift 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Wähle eine Farbe'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Übernehmen'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Schriftfarbe ausw„hlen'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Wähle ein Sonderzeichen'; -tinyMCELang['lang_theme_charmap_desc'] = 'Sonderzeichen einfügen'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Anzeige von Hilfslinien / unsichtbaren Elementen an/aus'; -tinyMCELang['lang_insert_anchor_title'] = 'Anker einfügen/bearbeiten'; -tinyMCELang['lang_insert_anchor_name'] = 'Ankername'; -tinyMCELang['lang_theme_anchor_desc'] = 'Anker einfügen/bearbeiten'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Kopieren/Ausschneiden/Einfügen sind in Mozilla und Firefox nicht verfügbar.\nMöchten sie weitere Informationen zu diesem Thema?'; -tinyMCELang['lang_theme_path'] = 'Pfad'; -tinyMCELang['lang_cut_desc'] = 'Ausschneiden'; -tinyMCELang['lang_copy_desc'] = 'Kopieren'; -tinyMCELang['lang_paste_desc'] = 'Einfügen'; -tinyMCELang['lang_link_list'] = 'Verweisliste'; -tinyMCELang['lang_image_list'] = 'Bildliste'; -tinyMCELang['lang_browse'] = 'Durchsuchen'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'Klasse'; diff --git a/public/tiny_mce/themes/advanced/langs/el.js b/public/tiny_mce/themes/advanced/langs/el.js deleted file mode 100644 index 9fa3508..0000000 --- a/public/tiny_mce/themes/advanced/langs/el.js +++ /dev/null @@ -1,61 +0,0 @@ -// Greek lang variables by Jacaranda Bill - -tinyMCELang['lang_theme_style_select'] = 'ÈÝìáôá'; -tinyMCELang['lang_theme_code_desc'] = 'Åðåîåñãáóßá HTML êþäéêá'; -tinyMCELang['lang_theme_code_title'] = 'ÅðåîåñãáóôÞò HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Äåßêôçò'; -tinyMCELang['lang_theme_sup_desc'] = 'ÅêèÝôçò'; -tinyMCELang['lang_theme_hr_desc'] = 'ÅéóáãùãÞ ïñéæüíôéáò ãñáììÞò'; -tinyMCELang['lang_theme_removeformat_desc'] = 'ÁðáëïéöÞ ìïñöïðïßçóçò'; -tinyMCELang['lang_theme_custom1_desc'] = 'ÐåñéãñáöÞ'; -tinyMCELang['lang_insert_image_border'] = 'Ðåñßãñáììá'; -tinyMCELang['lang_insert_image_dimensions'] = 'ÄéáóôÜóåéò'; -tinyMCELang['lang_insert_image_vspace'] = 'ÊÜè. ðåñéèþñéï'; -tinyMCELang['lang_insert_image_hspace'] = 'Ïñéæ. ðåñéèþñéï'; -tinyMCELang['lang_insert_image_align'] = 'Óôïß÷éóç'; -tinyMCELang['lang_insert_image_align_default'] = 'ÐñïêáèïñéóìÝíç'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Óå åõèõãñÜììéóç ìå ôï êåßìåíï'; -tinyMCELang['lang_insert_image_align_top'] = 'ÐÜíù'; -tinyMCELang['lang_insert_image_align_middle'] = 'Óôï êÝíôñï'; -tinyMCELang['lang_insert_image_align_bottom'] = 'ÊÜôù'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Ôï êåßìåíï ðÜíù'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Áðüëõôá óôï êÝíôñï'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Áðüëõôá êÜôù'; -tinyMCELang['lang_insert_image_align_left'] = 'ÁñéóôåñÜ'; -tinyMCELang['lang_insert_image_align_right'] = 'ÄåîéÜ'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'ÐáñÜãñáöïò'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Äéåýèõíóç'; -tinyMCELang['lang_theme_pre'] = 'Preformatted'; -tinyMCELang['lang_theme_h1'] = 'Åðéêåöáëßäá 1'; -tinyMCELang['lang_theme_h2'] = 'Åðéêåöáëßäá 2'; -tinyMCELang['lang_theme_h3'] = 'Åðéêåöáëßäá 3'; -tinyMCELang['lang_theme_h4'] = 'Åðéêåöáëßäá 4'; -tinyMCELang['lang_theme_h5'] = 'Åðéêåöáëßäá 5'; -tinyMCELang['lang_theme_h6'] = 'Åðéêåöáëßäá 6'; -tinyMCELang['lang_theme_colorpicker_title'] = '×ñþìáôá'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'ÅöáñìïãÞ'; -tinyMCELang['lang_theme_forecolor_desc'] = 'ÅðéëïãÞ ÷ñþìáôïò ãñáììáôïóåéñÜò'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'ÅðéëïãÞ åéäéêïý ÷áñáêôÞñá'; -tinyMCELang['lang_theme_charmap_desc'] = 'ÅéóáãùãÞ åéäéêïý ÷áñáêôÞñá'; -tinyMCELang['lang_theme_visualaid_desc'] = 'ÅìöÜíéóç/Áðüêñõøç ãñáììþí'; -tinyMCELang['lang_insert_anchor_title'] = 'ÅéóáãùãÞ/Äéüñèùóç Üãêõñáò'; -tinyMCELang['lang_insert_anchor_name'] = 'Ïíïìáóßá Üãêõñáò'; -tinyMCELang['lang_theme_anchor_desc'] = 'ÅéóáãùãÞ/Äéüñèùóç Üãêõñáò'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Ôßôëïò'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'ÊëÜóç'; diff --git a/public/tiny_mce/themes/advanced/langs/en.js b/public/tiny_mce/themes/advanced/langs/en.js deleted file mode 100644 index 372187f..0000000 --- a/public/tiny_mce/themes/advanced/langs/en.js +++ /dev/null @@ -1,61 +0,0 @@ -// UK lang variables - -tinyMCELang['lang_theme_style_select'] = '-- Styles --'; -tinyMCELang['lang_theme_code_desc'] = 'Edit HTML Source'; -tinyMCELang['lang_theme_code_title'] = 'HTML Source Editor'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Subscript'; -tinyMCELang['lang_theme_sup_desc'] = 'Superscript'; -tinyMCELang['lang_theme_hr_desc'] = 'Insert horizontal ruler'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Remove formatting'; -tinyMCELang['lang_theme_custom1_desc'] = 'Your custom description here'; -tinyMCELang['lang_insert_image_border'] = 'Border'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensions'; -tinyMCELang['lang_insert_image_vspace'] = 'VSpace'; -tinyMCELang['lang_insert_image_hspace'] = 'HSpace'; -tinyMCELang['lang_insert_image_align'] = 'Alignment'; -tinyMCELang['lang_insert_image_align_default'] = 'Default'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Baseline'; -tinyMCELang['lang_insert_image_align_top'] = 'Top'; -tinyMCELang['lang_insert_image_align_middle'] = 'Middle'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Bottom'; -tinyMCELang['lang_insert_image_align_texttop'] = 'TextTop'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Absolute Middle'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Absolute Bottom'; -tinyMCELang['lang_insert_image_align_left'] = 'Left'; -tinyMCELang['lang_insert_image_align_right'] = 'Right'; -tinyMCELang['lang_theme_font_size'] = 'Font size'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraph'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Address'; -tinyMCELang['lang_theme_pre'] = 'Preformatted'; -tinyMCELang['lang_theme_h1'] = 'Heading 1'; -tinyMCELang['lang_theme_h2'] = 'Heading 2'; -tinyMCELang['lang_theme_h3'] = 'Heading 3'; -tinyMCELang['lang_theme_h4'] = 'Heading 4'; -tinyMCELang['lang_theme_h5'] = 'Heading 5'; -tinyMCELang['lang_theme_h6'] = 'Heading 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Select a color'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Apply'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Select text color'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Select custom character'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insert custom character'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Toggle guidelines/invisible elements'; -tinyMCELang['lang_insert_anchor_title'] = 'Insert/edit anchor'; -tinyMCELang['lang_insert_anchor_name'] = 'Anchor name'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insert/edit anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'Class'; diff --git a/public/tiny_mce/themes/advanced/langs/es.js b/public/tiny_mce/themes/advanced/langs/es.js deleted file mode 100644 index d052435..0000000 --- a/public/tiny_mce/themes/advanced/langs/es.js +++ /dev/null @@ -1,61 +0,0 @@ -// ES lang variables by Alvaro Velasco - -tinyMCELang['lang_theme_style_select'] = 'Estilos'; -tinyMCELang['lang_theme_code_desc'] = 'Editar codigo HTML'; -tinyMCELang['lang_theme_code_title'] = 'Editor codigo HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Subindice'; -tinyMCELang['lang_theme_sup_desc'] = 'Superindice'; -tinyMCELang['lang_theme_hr_desc'] = 'Insertar un separador horizontal'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Quitar formato'; -tinyMCELang['lang_theme_custom1_desc'] = 'Tu descricion'; -tinyMCELang['lang_insert_image_border'] = 'Borde'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensiones'; -tinyMCELang['lang_insert_image_vspace'] = 'Espacio vertical'; -tinyMCELang['lang_insert_image_hspace'] = 'Espacio horizontal'; -tinyMCELang['lang_insert_image_align'] = 'Alineamiento'; -tinyMCELang['lang_insert_image_align_default'] = 'Por defecto'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Baseline'; -tinyMCELang['lang_insert_image_align_top'] = 'Superior'; -tinyMCELang['lang_insert_image_align_middle'] = 'Centro'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Inferior'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Alinear texto arriba'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Centrado horizontal'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Centrado abajo'; -tinyMCELang['lang_insert_image_align_left'] = 'Izquierda'; -tinyMCELang['lang_insert_image_align_right'] = 'Derecha'; -tinyMCELang['lang_insert_image_delta_height'] = 10; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraph'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Address'; -tinyMCELang['lang_theme_pre'] = 'Preformatted'; -tinyMCELang['lang_theme_h1'] = 'Heading 1'; -tinyMCELang['lang_theme_h2'] = 'Heading 2'; -tinyMCELang['lang_theme_h3'] = 'Heading 3'; -tinyMCELang['lang_theme_h4'] = 'Heading 4'; -tinyMCELang['lang_theme_h5'] = 'Heading 5'; -tinyMCELang['lang_theme_h6'] = 'Heading 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Select a color'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Apply'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Select forecolor'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Select custom character'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insert custom character'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Toggle guidelines/invisible elements'; -tinyMCELang['lang_insert_anchor_title'] = 'Insert/edit anchor'; -tinyMCELang['lang_insert_anchor_name'] = 'Anchor name'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insert/edit anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/fa.js b/public/tiny_mce/themes/advanced/langs/fa.js deleted file mode 100644 index e118cf9..0000000 --- a/public/tiny_mce/themes/advanced/langs/fa.js +++ /dev/null @@ -1,62 +0,0 @@ -// IR lang variables -// Persian (Farsi) language pack (for IRAN) -// By: Morteza Zafari -// Lost@LostLord.com -// http://www.LostLord.com - -tinyMCELang['lang_dir'] = 'rtl'; -tinyMCELang['lang_theme_style_select'] = '????'; -tinyMCELang['lang_theme_code_desc'] = '?????? ????'; -tinyMCELang['lang_theme_code_title'] = 'HTML ???????? ????'; -tinyMCELang['lang_theme_code_wordwrap'] = '?? ???'; -tinyMCELang['lang_theme_sub_desc'] = '??? ????'; -tinyMCELang['lang_theme_sup_desc'] = '???? ????'; -tinyMCELang['lang_theme_hr_desc'] = '??? ?? ????'; -tinyMCELang['lang_theme_removeformat_desc'] = '??? ?? ??? ???? ????'; -tinyMCELang['lang_theme_custom1_desc'] = 'Your custom description here'; -tinyMCELang['lang_insert_image_border'] = '?????'; -tinyMCELang['lang_insert_image_dimensions'] = '?????'; -tinyMCELang['lang_insert_image_vspace'] = '????? ?????'; -tinyMCELang['lang_insert_image_hspace'] = '????? ????'; -tinyMCELang['lang_insert_image_align'] = '??? ????????'; -tinyMCELang['lang_insert_image_align_default'] = '??? ???'; -tinyMCELang['lang_insert_image_align_baseline'] = '?? ????'; -tinyMCELang['lang_insert_image_align_top'] = '????'; -tinyMCELang['lang_insert_image_align_middle'] = '???'; -tinyMCELang['lang_insert_image_align_bottom'] = '?????'; -tinyMCELang['lang_insert_image_align_texttop'] = '????? ???'; -tinyMCELang['lang_insert_image_align_absmiddle'] = '??? ????'; -tinyMCELang['lang_insert_image_align_absbottom'] = '????? ????'; -tinyMCELang['lang_insert_image_align_left'] = '??'; -tinyMCELang['lang_insert_image_align_right'] = '????'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = '????????'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = '????'; -tinyMCELang['lang_theme_pre'] = '?? ??? ????? ???'; -tinyMCELang['lang_theme_h1'] = '???? 1'; -tinyMCELang['lang_theme_h2'] = '???? 2'; -tinyMCELang['lang_theme_h3'] = '???? 3'; -tinyMCELang['lang_theme_h4'] = '???? 4'; -tinyMCELang['lang_theme_h5'] = '???? 5'; -tinyMCELang['lang_theme_h6'] = '???? 6'; -tinyMCELang['lang_theme_colorpicker_title'] = '??? ?? ?????? ????'; -tinyMCELang['lang_theme_colorpicker_apply'] = '?????'; -tinyMCELang['lang_theme_forecolor_desc'] = '?????? ??? ???'; -tinyMCELang['lang_theme_backcolor_desc'] = '?????? ??? ?????'; -tinyMCELang['lang_theme_charmap_title'] = '?????? ??????? ????'; -tinyMCELang['lang_theme_charmap_desc'] = '??? ??????? ????'; -tinyMCELang['lang_theme_visualaid_desc'] = '????? ???? ???? ? ????? ??????'; -tinyMCELang['lang_insert_anchor_title'] = '??? ? ?????? Anchor'; -tinyMCELang['lang_insert_anchor_name'] = '??? Anchor'; -tinyMCELang['lang_theme_anchor_desc'] = '??? ? ?????? Anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = '?????'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = '????'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/fi.js b/public/tiny_mce/themes/advanced/langs/fi.js deleted file mode 100644 index 7a812aa..0000000 --- a/public/tiny_mce/themes/advanced/langs/fi.js +++ /dev/null @@ -1,60 +0,0 @@ -// FI lang variables by Urho Konttori from Absolutions - -tinyMCELang['lang_theme_style_select'] = 'Tyylit'; -tinyMCELang['lang_theme_code_desc'] = 'Muokkaa HTML lähdekoodia'; -tinyMCELang['lang_theme_code_title'] = 'HTML Lähdekoodin muokkaus'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Alamääre'; -tinyMCELang['lang_theme_sup_desc'] = 'Ylämääre'; -tinyMCELang['lang_theme_hr_desc'] = 'Lisää vaakaviiva'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Poista muotoilu'; -tinyMCELang['lang_theme_custom1_desc'] = 'Kirjoita oma selityksesi tähän'; -tinyMCELang['lang_insert_image_border'] = 'Reuna'; -tinyMCELang['lang_insert_image_dimensions'] = 'Mitat'; -tinyMCELang['lang_insert_image_vspace'] = 'Pystyväli'; -tinyMCELang['lang_insert_image_hspace'] = 'Vaakaväli'; -tinyMCELang['lang_insert_image_align'] = 'Asettelu'; -tinyMCELang['lang_insert_image_align_default'] = 'Oletus'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Perustasoon'; -tinyMCELang['lang_insert_image_align_top'] = 'Ylälaitaan'; -tinyMCELang['lang_insert_image_align_middle'] = 'Keskelle'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Alalaitaan'; -tinyMCELang['lang_insert_image_align_texttop'] = 'Tekstin ylälaitaan'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Absoluuttisen keskelle'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Absoluuttisen alas'; -tinyMCELang['lang_insert_image_align_left'] = 'Vasemmalle'; -tinyMCELang['lang_insert_image_align_right'] = 'Oikealle'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Kappale'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Osoite'; -tinyMCELang['lang_theme_pre'] = 'Etukäteen muotoiltu'; -tinyMCELang['lang_theme_h1'] = 'Otsikko 1'; -tinyMCELang['lang_theme_h2'] = 'Otsikko 2'; -tinyMCELang['lang_theme_h3'] = 'Otsikko 3'; -tinyMCELang['lang_theme_h4'] = 'Otsikko 4'; -tinyMCELang['lang_theme_h5'] = 'Otsikko 5'; -tinyMCELang['lang_theme_h6'] = 'Otsikko 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Valitse väri'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Aseta väri'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Valitse etuväri'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Select custom character'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insert custom character'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Toggle guidelines/invisible elements'; -tinyMCELang['lang_insert_anchor_title'] = 'Insert/edit anchor'; -tinyMCELang['lang_insert_anchor_name'] = 'Anchor name'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insert/edit anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/fr.js b/public/tiny_mce/themes/advanced/langs/fr.js deleted file mode 100644 index 7c14d1f..0000000 --- a/public/tiny_mce/themes/advanced/langs/fr.js +++ /dev/null @@ -1,62 +0,0 @@ -// Canadian French lang variables by Virtuelcom -// Modify by Laurent Dran 13-02-2006 - -tinyMCELang['lang_theme_style_select'] = 'Styles'; -tinyMCELang['lang_theme_code_desc'] = 'Modifier le code source HTML'; -tinyMCELang['lang_theme_code_title'] = 'Éditeur de code source HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Souscrit'; -tinyMCELang['lang_theme_sup_desc'] = 'Indice supérieur'; -tinyMCELang['lang_theme_hr_desc'] = 'Insérer un séparateur horizontal'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Supprimer le formattage'; -tinyMCELang['lang_theme_custom1_desc'] = 'Votre description personnalisée ici'; -tinyMCELang['lang_insert_image_border'] = 'Bordure'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensions'; -tinyMCELang['lang_insert_image_vspace'] = 'VSpace'; -tinyMCELang['lang_insert_image_hspace'] = 'HSpace'; -tinyMCELang['lang_insert_image_align'] = 'Alignement'; -tinyMCELang['lang_insert_image_align_default'] = 'Défaut'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Baseline'; -tinyMCELang['lang_insert_image_align_top'] = 'Haut'; -tinyMCELang['lang_insert_image_align_middle'] = 'Milieu'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Bas'; -tinyMCELang['lang_insert_image_align_texttop'] = 'TextTop'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Milieu absolu'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Bas absolu'; -tinyMCELang['lang_insert_image_align_left'] = 'Gauche'; -tinyMCELang['lang_insert_image_align_right'] = 'Droit'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraphe'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Addresse'; -tinyMCELang['lang_theme_pre'] = 'Préformatté'; -tinyMCELang['lang_theme_h1'] = 'Entête 1'; -tinyMCELang['lang_theme_h2'] = 'Entête 2'; -tinyMCELang['lang_theme_h3'] = 'Entête 3'; -tinyMCELang['lang_theme_h4'] = 'Entête 4'; -tinyMCELang['lang_theme_h5'] = 'Entête 5'; -tinyMCELang['lang_theme_h6'] = 'Entête 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Choisir une couleur'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Appliquer'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Choisir la couleur d\'avant plan'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Choisir la couleur de fond'; -tinyMCELang['lang_theme_charmap_title'] = 'Sélectionner un charactère spécial'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insérer un charactère spécial'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Active/Désactive les lignes guides et les éléments invisibles'; -tinyMCELang['lang_insert_anchor_title'] = 'Insérer/Modifier une ancre'; -tinyMCELang['lang_insert_anchor_name'] = 'Nom de l\'ancre'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insérer/Modifier une ancre'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Titre'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copier/Couper/Coller ne sont pas disponibles pour Mozilla et Firefox.\nVoulez vous plus d\'informations à ce sujet?'; -tinyMCELang['lang_theme_path'] = 'Chemin'; -tinyMCELang['lang_cut_desc'] = 'Couper'; -tinyMCELang['lang_copy_desc'] = 'Copier'; -tinyMCELang['lang_paste_desc'] = 'Coller'; -tinyMCELang['lang_link_list'] = 'Lien de la liste'; -tinyMCELang['lang_image_list'] = 'Image de la liste'; -tinyMCELang['lang_browse'] = 'Naviguer'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'Classe CSS'; diff --git a/public/tiny_mce/themes/advanced/langs/fr_ca.js b/public/tiny_mce/themes/advanced/langs/fr_ca.js deleted file mode 100644 index 5315e4e..0000000 --- a/public/tiny_mce/themes/advanced/langs/fr_ca.js +++ /dev/null @@ -1,60 +0,0 @@ -// Canadian French lang variables by Virtuelcom - -tinyMCELang['lang_theme_style_select'] = 'Styles'; -tinyMCELang['lang_theme_code_desc'] = 'Modifier le code source HTML'; -tinyMCELang['lang_theme_code_title'] = 'Éditeur de code source HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Souscrit'; -tinyMCELang['lang_theme_sup_desc'] = 'Indice supérieur'; -tinyMCELang['lang_theme_hr_desc'] = 'Insérer un séparateur horizontal'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Supprimer le formattage'; -tinyMCELang['lang_theme_custom1_desc'] = 'Votre description personnalisée ici'; -tinyMCELang['lang_insert_image_border'] = 'Bordure'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensions'; -tinyMCELang['lang_insert_image_vspace'] = 'VSpace'; -tinyMCELang['lang_insert_image_hspace'] = 'HSpace'; -tinyMCELang['lang_insert_image_align'] = 'Alignement'; -tinyMCELang['lang_insert_image_align_default'] = 'Défaut'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Baseline'; -tinyMCELang['lang_insert_image_align_top'] = 'Haut'; -tinyMCELang['lang_insert_image_align_middle'] = 'Milieu'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Bas'; -tinyMCELang['lang_insert_image_align_texttop'] = 'TextTop'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Milieu absolu'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Bas absolu'; -tinyMCELang['lang_insert_image_align_left'] = 'Gauche'; -tinyMCELang['lang_insert_image_align_right'] = 'Droit'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraphe'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Addresse'; -tinyMCELang['lang_theme_pre'] = 'Préformatté'; -tinyMCELang['lang_theme_h1'] = 'Entête 1'; -tinyMCELang['lang_theme_h2'] = 'Entête 2'; -tinyMCELang['lang_theme_h3'] = 'Entête 3'; -tinyMCELang['lang_theme_h4'] = 'Entête 4'; -tinyMCELang['lang_theme_h5'] = 'Entête 5'; -tinyMCELang['lang_theme_h6'] = 'Entête 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Choisir une couleur'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Appliquer'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Choisir la couleur d\'avant plan'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Choisir une couleur d\'arrière plan'; -tinyMCELang['lang_theme_charmap_title'] = 'Sélectionner un charactère spécial'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insérer un charactère spécial'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Active/Désactive les lignes guides et les éléments invisibles'; -tinyMCELang['lang_insert_anchor_title'] = 'Insérer/Modifier une ancre'; -tinyMCELang['lang_insert_anchor_name'] = 'Nom de l\'ancre'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insérer / Modifier une ancre'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Titre'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copier/Couper/Coller ne sont pas disponibles dans Mozilla et FireFox.\nDésirez-vous consulter de plus amples informations à ce sujet?'; -tinyMCELang['lang_theme_path'] = 'Chemin'; -tinyMCELang['lang_cut_desc'] = 'Couper'; -tinyMCELang['lang_copy_desc'] = 'Copier'; -tinyMCELang['lang_paste_desc'] = 'Coller'; -tinyMCELang['lang_link_list'] = 'Liste de liens'; -tinyMCELang['lang_image_list'] = 'Liste d\'images'; -tinyMCELang['lang_browse'] = 'Sélectionner'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/hu.js b/public/tiny_mce/themes/advanced/langs/hu.js deleted file mode 100644 index bf9fb29..0000000 --- a/public/tiny_mce/themes/advanced/langs/hu.js +++ /dev/null @@ -1,61 +0,0 @@ -// HU lang variables -// Edited by 2XP (2xp@dino.hu) - -tinyMCELang['lang_theme_style_select'] = 'Stílusok'; -tinyMCELang['lang_theme_code_desc'] = 'HTML kód szerkesztése'; -tinyMCELang['lang_theme_code_title'] = 'HTML kódszerkeztõ'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Alsó index'; -tinyMCELang['lang_theme_sup_desc'] = 'Felsõ index'; -tinyMCELang['lang_theme_hr_desc'] = 'Vízszintes vonal beillesztése'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Formázás eltávolítása'; -tinyMCELang['lang_theme_custom1_desc'] = 'Az Ön által kiválasztott leírás'; -tinyMCELang['lang_insert_image_border'] = 'Keret'; -tinyMCELang['lang_insert_image_dimensions'] = 'Méretek'; -tinyMCELang['lang_insert_image_vspace'] = 'Függõleges térköz'; -tinyMCELang['lang_insert_image_hspace'] = 'Vízszintes térköz'; -tinyMCELang['lang_insert_image_align'] = 'Igazítés'; -tinyMCELang['lang_insert_image_align_default'] = 'Alapértelmezett'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Alapvonalra'; -tinyMCELang['lang_insert_image_align_top'] = 'Felülre'; -tinyMCELang['lang_insert_image_align_middle'] = 'Középre'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Alulra'; -tinyMCELang['lang_insert_image_align_texttop'] = 'TextTop'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Abszolút középre'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Abszolút alulra'; -tinyMCELang['lang_insert_image_align_left'] = 'Balra'; -tinyMCELang['lang_insert_image_align_right'] = 'Jobbra'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragraph'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Address'; -tinyMCELang['lang_theme_pre'] = 'Preformatted'; -tinyMCELang['lang_theme_h1'] = 'Heading 1'; -tinyMCELang['lang_theme_h2'] = 'Heading 2'; -tinyMCELang['lang_theme_h3'] = 'Heading 3'; -tinyMCELang['lang_theme_h4'] = 'Heading 4'; -tinyMCELang['lang_theme_h5'] = 'Heading 5'; -tinyMCELang['lang_theme_h6'] = 'Heading 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Select a color'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Apply'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Select forecolor'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Select custom character'; -tinyMCELang['lang_theme_charmap_desc'] = 'Insert custom character'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Toggle guidelines/invisible elements'; -tinyMCELang['lang_insert_anchor_title'] = 'Insert/edit anchor'; -tinyMCELang['lang_insert_anchor_name'] = 'Anchor name'; -tinyMCELang['lang_theme_anchor_desc'] = 'Insert/edit anchor'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Title'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; diff --git a/public/tiny_mce/themes/advanced/langs/it.js b/public/tiny_mce/themes/advanced/langs/it.js deleted file mode 100644 index 69038a4..0000000 --- a/public/tiny_mce/themes/advanced/langs/it.js +++ /dev/null @@ -1,61 +0,0 @@ -// Variabili di lingua IT - fabrix.xm@lombardiacom.it - -tinyMCELang['lang_theme_style_select'] = 'Stili'; -tinyMCELang['lang_theme_code_desc'] = 'Edita il sorgente HTML'; -tinyMCELang['lang_theme_code_title'] = 'Editor Sorgente HTML'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_sub_desc'] = 'Pedice'; -tinyMCELang['lang_theme_sup_desc'] = 'Apice'; -tinyMCELang['lang_theme_hr_desc'] = 'Inserisce linea orizzontale'; -tinyMCELang['lang_theme_removeformat_desc'] = 'Rimuovi formattazione'; -tinyMCELang['lang_theme_custom1_desc'] = 'Scrivi qui la tua descrizione personalizzata'; -tinyMCELang['lang_insert_image_border'] = 'Bordo'; -tinyMCELang['lang_insert_image_dimensions'] = 'Dimensioni'; -tinyMCELang['lang_insert_image_vspace'] = 'Spazio verticale'; -tinyMCELang['lang_insert_image_hspace'] = 'Spazio orizzontale'; -tinyMCELang['lang_insert_image_align'] = 'Allineamento'; -tinyMCELang['lang_insert_image_align_default'] = 'Default'; -tinyMCELang['lang_insert_image_align_baseline'] = 'Baseline'; -tinyMCELang['lang_insert_image_align_top'] = 'Superiore'; -tinyMCELang['lang_insert_image_align_middle'] = 'Centrale'; -tinyMCELang['lang_insert_image_align_bottom'] = 'Inferiore'; -tinyMCELang['lang_insert_image_align_texttop'] = 'TextTop'; -tinyMCELang['lang_insert_image_align_absmiddle'] = 'Centro assoluto'; -tinyMCELang['lang_insert_image_align_absbottom'] = 'Inferiore assoluto'; -tinyMCELang['lang_insert_image_align_left'] = 'Sinistra'; -tinyMCELang['lang_insert_image_align_right'] = 'Destra'; -tinyMCELang['lang_theme_font_size'] = '-- Font size --'; -tinyMCELang['lang_theme_fontdefault'] = '-- Font family --'; -tinyMCELang['lang_theme_block'] = '-- Format --'; -tinyMCELang['lang_theme_paragraph'] = 'Paragrafo'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_theme_address'] = 'Indirizzo'; -tinyMCELang['lang_theme_pre'] = 'Preformattato'; -tinyMCELang['lang_theme_h1'] = 'Intestazione 1'; -tinyMCELang['lang_theme_h2'] = 'Intestazione 2'; -tinyMCELang['lang_theme_h3'] = 'Intestazione 3'; -tinyMCELang['lang_theme_h4'] = 'Intestazione 4'; -tinyMCELang['lang_theme_h5'] = 'Intestazione 5'; -tinyMCELang['lang_theme_h6'] = 'Intestazione 6'; -tinyMCELang['lang_theme_colorpicker_title'] = 'Seleziona un colore'; -tinyMCELang['lang_theme_colorpicker_apply'] = 'Appplica'; -tinyMCELang['lang_theme_forecolor_desc'] = 'Seleziona il colore'; -tinyMCELang['lang_theme_backcolor_desc'] = 'Select background color'; -tinyMCELang['lang_theme_charmap_title'] = 'Seleziona un carattere custom'; -tinyMCELang['lang_theme_charmap_desc'] = 'Inserisci un carattere custom'; -tinyMCELang['lang_theme_visualaid_desc'] = 'Mostra/nascondi linee guida e elementi invisibili'; -tinyMCELang['lang_insert_anchor_title'] = 'Inserisci/modifica àncora'; -tinyMCELang['lang_insert_anchor_name'] = 'Nome àncora'; -tinyMCELang['lang_theme_anchor_desc'] = 'Inserisci/modifica àncora'; -tinyMCELang['lang_theme_insert_link_titlefield'] = 'Titolo'; -tinyMCELang['lang_theme_clipboard_msg'] = 'Copy/Cut/Paste is not available in Mozilla and Firefox.\nDo you want more information about this issue?'; -tinyMCELang['lang_theme_path'] = 'Path'; -tinyMCELang['lang_cut_desc'] = 'Cut'; -tinyMCELang['lang_copy_desc'] = 'Copy'; -tinyMCELang['lang_paste_desc'] = 'Paste'; -tinyMCELang['lang_link_list'] = 'Link list'; -tinyMCELang['lang_image_list'] = 'Image list'; -tinyMCELang['lang_browse'] = 'Browse'; -tinyMCELang['lang_image_props_desc'] = 'Image properties'; -tinyMCELang['lang_newdocument_desc'] = 'New document'; -tinyMCELang['lang_class'] = 'Classe'; diff --git a/public/tiny_mce/themes/advanced/langs/ja.js b/public/tiny_mce/themes/advanced/langs/ja.js deleted file mode 100644 index c905cac..0000000 --- a/public/tiny_mce/themes/advanced/langs/ja.js +++ /dev/null @@ -1,59 +0,0 @@ -// JP lang variables - -tinyMCELang['lang_theme_style_select'] = '$B%9%?%$%k(B'; -tinyMCELang['lang_theme_paragraph'] = '$BJ8L.(B'; -tinyMCELang['lang_theme_address'] = '$B%"%I%l%9(B'; -tinyMCELang['lang_theme_pre'] = '$B@07A:Q$_(B'; -tinyMCELang['lang_theme_h1'] = 'H1'; -tinyMCELang['lang_theme_h2'] = 'H2'; -tinyMCELang['lang_theme_h3'] = 'H3'; -tinyMCELang['lang_theme_h4'] = 'H4'; -tinyMCELang['lang_theme_h5'] = 'H5'; -tinyMCELang['lang_theme_h6'] = 'H6'; -tinyMCELang['lang_theme_div'] = 'Div'; -tinyMCELang['lang_insert_anchor_title'] = '$B%"%s%+!<$NA^F~(B/$BJT=8(B'; -tinyMCELang['lang_insert_anchor_name'] = '$B%"%s%+!<$NL>A0(B'; -tinyMCELang['lang_theme_anchor_desc'] = '$B%"%s%+!<$NA^F~(B/$BJT=8(B'; -tinyMCELang['lang_theme_code_desc'] = 'HTML$B$ND>@\JT=8(B'; -tinyMCELang['lang_theme_code_title'] = 'HTML$B$NJT=8(B'; -tinyMCELang['lang_theme_code_wordwrap'] = 'Word wrap'; -tinyMCELang['lang_theme_hr_desc'] = '$B?eJ?@~(B'; -tinyMCELang['lang_theme_removeformat_desc'] = '$B@07A>pJs:o=|(B'; -tinyMCELang['lang_theme_visualaid_desc'] = '$BJd=u>pJs$N;k3P2=(B($B%H%0%k(B)'; -tinyMCELang['lang_theme_sub_desc'] = '$BE:;z2<(B'; -tinyMCELang['lang_theme_sup_desc'] = '$BE:;z>e(B'; -tinyMCELang['lang_theme_charmap_desc'] = '$BFC - -{$lang_insert_link_title} - - - - - -

- - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{$lang_insert_link_title}
{$lang_insert_link_url}: - - - - -
{$lang_insert_link_target}:
{$lang_theme_insert_link_titlefield}:
{$lang_class}: -   
-
-
- - diff --git a/public/tiny_mce/themes/advanced/source_editor.htm b/public/tiny_mce/themes/advanced/source_editor.htm deleted file mode 100644 index 235470b..0000000 --- a/public/tiny_mce/themes/advanced/source_editor.htm +++ /dev/null @@ -1,86 +0,0 @@ - - -{$lang_theme_code_title} - - - - - -
- - - - - - - - - - - -
{$lang_theme_code_title}
- -
-
- - diff --git a/public/tiny_mce/themes/default/docs/en/about.htm b/public/tiny_mce/themes/default/docs/en/about.htm deleted file mode 100644 index 984a990..0000000 --- a/public/tiny_mce/themes/default/docs/en/about.htm +++ /dev/null @@ -1,32 +0,0 @@ - - - -About TinyMCE - - - - - - - - - - - -
-
-TinyMCE is a small WYSIWYG editor control for web browsers such as MSIE or Mozilla -that enables you to edit HTML contents in a more user friendly way. It has common -features that are found in most word processors and should not be difficult to -use.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/default/docs/en/common_buttons.htm b/public/tiny_mce/themes/default/docs/en/common_buttons.htm deleted file mode 100644 index d01f751..0000000 --- a/public/tiny_mce/themes/default/docs/en/common_buttons.htm +++ /dev/null @@ -1,111 +0,0 @@ - - - -Common buttons - - - - - - - - - - - -
-
-Below is a short description about each button. -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Bold text style.
Italic text style.
Underline text style.
Strikethrough text style.
Align left.
Align center.
Align right.
Align full.
Unordered list/bullet list.
Ordered list/numbered list
Outdent/decrease indentation.
Indent/incread indentation.
Undo the last operation.
Redo the last operation.
Insert a new link, read more about this function in the Insert - link section.
Unlinks the current selection/removes all selected links.
Insert a new image, read more about this function in the Insert - image section.
Cleanup code/Removes unwanted formating. This function is useful when - you copy contents from for example a office product.
Shows this help window.
-
-
- - - - - - - - diff --git a/public/tiny_mce/themes/default/docs/en/images/insert_image_window.gif b/public/tiny_mce/themes/default/docs/en/images/insert_image_window.gif deleted file mode 100644 index 37de4431800090424b23904e4532e70474902bef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5680 zcmV-07SHKNNk%w1VO{~B0QUd@B0hgMQ;--lcRN^=4k>OMHhCX9d=xKpD@TSMIC>T_ zbQ3Lc5Grp#KtQI-@CqbqdYj6FrP4K0k1R-sNoSy>$nIEotw?5{Tzs*Ou-hU%ewVuA zI#-i$kilk#xrnOPCqsj0hq_sKu2of43ngoHmd2L3;!|;`p~UM}b*mXPcmMnF=;+hT z%*^WQ>OWnW5i4+psMSVfoukL?Nob%ZL4u;j?Lb|ahpE+SioBDy;2t`AMPi(Pq0f7q z%Q8-kagxGmiM(Wkw=YbJI8~90uGvaxp(;j&rOEF+S(S#U)M|^pFH4C;Vw^=|olwB1h+BHEYm2>Fd9RVQ-XT4HElG$CCv1hL z(~+~@9yxn+l*DwD#f7KTRCB3RbE*Jl%w~nTQ*x;|Rg!IuzoN$MAv}FeYoua=wPAs^ zPHd!3ZKa#O=V*w#C`5#UqtTwi=@&9}pTp`)YN8P=a6(|3OlqS|Yomdq&>uT|i>=s+ ztk-sz$3tP8K3kVUUz#L8fQqcxp26u~ezSL&$3I+`c$vs0L4lLC-(Y~WfT7QKn8-a^ zm4c+vn7ia$d$1KSbB?jxLtvYXuG(IGvY*20V}rJw!00AIflC|G?n#m3*ZI`>_L0_33H+OQ9!#!J;F-?nicXv^6r%`XGF;0w$tJgDT z|4V72kh9%ngtu~&#B7YdYmU25ZKY6dri7-`kh0wjCTuB1g=K}fl(*rAhK4Ccgp{}7 zGc(Nb@$mp=nVFfH004k9Gc&-zzyt&Ys+ndpX3Uw)%>T@pGv@zaUtfTL0Dypi)X>NP z00960|M2kcA^8LV00000EC2ui0A2x~000R80Qm_VNU)&6g9sBUT*$DY!-o(fN}Ncs zqQ#3CGh%GO&!5MSAVZ2ANwTELlPFWFT*)CU^rT^K-Yl-s#Gahv`Bye6)MUUSeqaLogD@y zO#<{rg9ZSaG|>uGLly`Sh}4-of&jsU!*JAiVKU?jHEchW0ZRi$g5>}KauMlcivx!N zNs^eFhUwFb7dK`>%k+rVr6xR_$UyVu!UYNxXc*bn2vVd#gbIZdH|3hOCnrwu!INi8 ziWFfiSP&ti&6;AVFkral3RfpBqj(Mf5|j*M+#33p{ax7u<&5xff%Yu>V z(4iI(Y2MUfM;9fOV2LNCfMP{65H#q6Fu$B3hA+GHK*}+aByvgw9F8N$9ZJN2!v`N^ zQ^_Wj6wyjA8DwD0Dp8Qb%^YqpBZ>~|pi_kjCTy_5GpKMu3^HRFB1J62aH7a7j6i_` z3TFIa!weNvfP@2BW~t?tTz2W@mtXR8luk`mlg^oFqWM%*Q&n|UR$F!TRaj${byiwy z70}jOam`iNU3u-**I$7RR@h+^B(_*%k3}|FWtU~PS!bVxHd<+?rM6mYuf;Z7ZMWsN zTW`MwH(YVYCAVC2&qX&~b=PJ8w_SJNg*RS#=cTt^d+)_JUw!xGw_kt%1vp@V2PU{+ zgAhCz;e-`lnBj&Uei-72C7zh#iY>kvtl1)At<&;%k3Ff@? z*4w3+IVHtZH6*<=0#i^)MU_CK+XxNr0JVoOuSCXr!5jnrf`M2AgcO*@l~Ly!i&4aKsshoN~-L2c2}(S%;l= z+<6C{c;uOfo_g%L2cLZO*@vHg{P_oB97f(VMZD$KNw{w4Mx43zi z%Qw1zuPeB_g~y9{LpbTg5Ki~+@3;eyBh$Vnw*o!rp>iXLhXOaprh&cbU~*Deof?KG zi1BG+{-{`>Fh(eka12q30$HO*1}T$CDrJ>o8Kz#gDVceyW}(6vsdjcMpQ$Qnts)w% zjy5Z$*{W&h`H1xYruHkV2`g*G;u^BPwk)wdt8CIjTeaARt+#DUZr-X}xOCtVa_#M0 zep6TA+C?~c9nJyzTS)!{vX3^p(T!~UUm6v{KLCzNUrT|90S&kUZM0(rEqF&YGzSs~ z77R`Zo72MV0v-urV?5$0l0^z-lv>%PT&Ag*b&6)7x|tC? zqO;(5WC|WJ9u9~0Dx=9NX|-Y+t~{b1k4Vi|Ah8}2J)%UfDJyKv8XL6CHZ2Z$gnT0k zN!+?cH*nppi+VFx-_iv*b`9=bhLhJE6S77zz447Ysbd=Z(GP;KGmekDBU9i34tubJ z9r)10AKT&of)JX9uQ7qU*4&~_*krS4d0 zO5edyl^-e9M~ZhtR?$*xgY@vSw3C2QlgiC^CQCHw(NF?wPl!3%jAxRBLPWihS zuJR*+00}JpfgF%*!6RYt$8?f#TnniF5UNL7M5z2VPWFEO42RxDlkCetEH}D8+JmS$*ipn3207)TU8B32G4hSpVpPcCf(z ztZ3bwTF*;>^t$x`B7v_z9`;E3+BYQn^#_0b(O3UY6tIHzhk^ZpV1H~TBn|e*gZ&ZV zkoXQHAnlDuTn{fyap13<{L71mylmu|HNka+j9e#V9{*tXDqk zmiuFSxYjj~XWr|YQ;W!L%Xx~9oaCM-`{&E{2bBFGWuimdA7hj@wUs`Q>t2^2P0u#e zt({e@S{JKS@2XPR@ql^E!yVA?x_IOKfI`yQ&L5dmNc3E~kHCfPsROkCEcklK|M~;b z11_-L8I5;G_W{zTNbD>u9eBr1e0UtD>%5=Fpz{=jn|0bECA0>V{$+!PYJmvm2ce7*;K&~;AeL|w#3 zNB{F}o5K$LvQK7ZR@3)S4df<=1VN#*NEB2$d$I#;*LJG&P=vBEhvG4SHA1xWNeZS> ze#bj5gi3-pDil{ksRA@6l{`CiOU?5`xbif+;%Y@SQ`eJ3HwAjgBT zrAn@7DzGR^U8qC0#5_KvOVFc>W>__7h(y4sJ;K;M#0WmkG(~f$jOdd^*2F$~2u9MF zdrbw14$uH5d6FoZk}A29D2XL3$&&E|j!H2|BT$nzd6PQ-D2bkfNa_fL2bGDa!-4JU zG3kEb|FyVF8X8F5%RJX%PQR!NH~6^06#i(JWzM)Z|xD3QlBmOBN9$0%%RxshwR zMQ!;-+XR)Q!S9oWxn2#(A8`nVibGoXpvr z&iS0s8J*JEja7vdIPsF$nVs6Xo!r@--ua#28J^<*IiBQMp5}R;=y{&jnJ+l;5AOM% z@EM=-IiK`dpZ0m5_?e&jxu5*mpZ@uu02-hII-mqvp!>O=>uI10x}Xf&pbq+=5E`Kp zDxnBkRTFxl7@DCPx}hA}p#)l?_~M}=I-(?6q9%Hx_X(oyiJ~mpqAvQPFzTNw+5jZDRyrB-^S z`bni&x}{u-rCQphU>c@M`lVu8re?~cWO}A*x~46frfmAAaN4168mDwxrw}@)cABSp zI-q#Er+)gU`Prv{I;e#Do`PDai0Y?@>Y?oaq@RuY506@(k(#KKDx=kDp^kc84mzpt z$*Gds5AOM>o(id;TB)YWpNl%G1?s7)I-jgss;3&OL3*hnx}TBid$3BXx2mb33aYp| zsldvsy~?YNimUM{s=ivP!Md!w+N!d;rKt+5$l9yNs;t(ksju3p)=I6U%B`b{tjU_J z@;R;DTCUFetX3MW+Ul*jYOdS5uJ9SG>^iUITCMcjtmK-n?TW5ks;=~^tJ>;&+&ZuX z`>Xf*uJ-D#2Yavr%dcVTuL>Kl2n(+T+pgIfvETZx`ns_7>ab!8vE&M`w_33ho3N0| zu^Ef98oRQc>ak#Ys12*H%u2DtO0dKKnybcIufnRb0gJEFy0b3prL?-DEqbmjYP3O{ zu0uG?vbjzS~Yp2thw|cv`eA~CknWamcv{Ypigj=|Vd$@>e6Z-(T+C{V; zJGhA(xsp4%l&iRm8=Oq*vXEQ3oZGpc`?-r7sDT@_oBO$@d%CDg6QPTrFzd7ginBKx zuPs`-saw0Yd%IJ0x$K#_`MIwU3cDv8sx8Z+w2QmOd%UK*x+yxkj@q*T8?X}Ftgb4% z!CSri>bn_QyvVz~+?%+{YoDqAI=t39uEJZs(n`L=3$@iNz8$K)-TS`qdlR~wptdT$ z=Nr4@tE;R^y~;|xDC)lP8^8jL65m^&;ak4>d%p^7pTK*+>x;ncJHQe=!2~?NnA*Fd zYQN5lzxwN{!rH(wJE8zg!6Y2O1x%lJ%b(cGq$6CyF3i0rJfA6ypFk_6E&RebjJq)` zpEDe%H=M&jjJi7Qm$>&0L^#vdxiWPHZ|sl{ka#cI69P~66DT(@u>$8kHyblkSByTW(O#%3(3gu29l z9LR#K#7*qDH0-=Po5&yk?7BJn!$JJWojb(vdBFMmz`?t~5S*lr49T1#LVctk^2h9n8KW zy3hO^%>L}ehb+qy&Au6&!0CI@yIi6S-O#oC(1y&wro6}$jnS7((y?sGBs$0{z0xe* zoc3J56OF#WThbH%ebP3q(0i<=(dx_3JJ2DGvjknU8I968U8cnh&qeLAM=i=p?XpYV z)LHw~P+hfBJ=IZL)m9y}Se?~M-OOA)##{Z>=o;2yEvtgs(q%27EzN>2ou3;$%xN8= zZ+**cjh}Pv61W`K|9RIl;nDX@pM1>{d9By|8Q9`n*Y|1IDlyoEy`PG068%6DeyyLy zdtEjW*}2=;3<|)OUAUMn5|i!LB=OlaLE0d}*qUwECGpv&Jrk|%5uvTxBf;98?Gd$o z+x~#7pq<(as=cqB+wAlaz6TPWjoX>cx?cUBzAfC$o!cS7+P00^zm3|wU7yPh*|y!> zqz&E9eca3cYt58B+RfeFz%AUvP2SU8-3EHyB5~f_z1{9D*@$hQ?9JWU-QMHP&FWpC z?)%>No!#Ue-~hhcq6^-l-QK~C-q8);2@c-`zTX1M*$KYj(mmeAUEK0r;NE=Tr%T-s z4xf*W*Yj=NtNh^+e!Q`r*d=b_02<;gk>d2d;wVuGLn4ZV95pfhe{^x)m=z>1zOPrpD We&~n|p6H6c=#1Xzj_&9I0RTJSFGqv` diff --git a/public/tiny_mce/themes/default/docs/en/images/insert_link_window.gif b/public/tiny_mce/themes/default/docs/en/images/insert_link_window.gif deleted file mode 100644 index 7bad7583ab9a0642467d271ec8a102e87a2ec521..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5658 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 AEdT%j diff --git a/public/tiny_mce/themes/default/docs/en/index.htm b/public/tiny_mce/themes/default/docs/en/index.htm deleted file mode 100644 index dd547c2..0000000 --- a/public/tiny_mce/themes/default/docs/en/index.htm +++ /dev/null @@ -1,25 +0,0 @@ - - - -Help Index - - - - - - - - - -
-
-Click the links below to go to the different help sections. - -
- - diff --git a/public/tiny_mce/themes/default/docs/en/insert_image_button.htm b/public/tiny_mce/themes/default/docs/en/insert_image_button.htm deleted file mode 100644 index 45255f0..0000000 --- a/public/tiny_mce/themes/default/docs/en/insert_image_button.htm +++ /dev/null @@ -1,34 +0,0 @@ - - - -Insert image button - - - - - - - - - - - -
-
-The insert image button opens the window shown below.
-
-
-
-You simply enter a URL to the image you want to link to and enter a image description, -this is then displayed as an alternative text descripton of the image on the page.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/default/docs/en/insert_link_button.htm b/public/tiny_mce/themes/default/docs/en/insert_link_button.htm deleted file mode 100644 index ddfeb3a..0000000 --- a/public/tiny_mce/themes/default/docs/en/insert_link_button.htm +++ /dev/null @@ -1,34 +0,0 @@ - - - -Insert link button - - - - - - - - - - - -
-
-This button opens a new window with the insert/edit link function.
-
-
-
-There are two fields in this window the first one "Link URL" is the -URL of the link. The target enables you to select how the link is to be opened.
-
-
- - - - - - -
- - diff --git a/public/tiny_mce/themes/default/docs/en/style.css b/public/tiny_mce/themes/default/docs/en/style.css deleted file mode 100644 index 722f537..0000000 --- a/public/tiny_mce/themes/default/docs/en/style.css +++ /dev/null @@ -1,28 +0,0 @@ -body { background-color: #FFFFFF; } -body, td, .content { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 12px; } -.title { font-family: Verdana, Arial, helvetica, sans-serif; font-size: 16px; font-weight: bold; } -.subtitle { font-size: 12px; font-weight: bold; } - -.toc_ul, .toc_li { margin-left: 8 px; line-height: 16px; } -.step_ol, .step_li { margin-left: 11 px; line-height: 16px; } -img { border: #000000 solid 1px; } - -a:visited { color: #666666; text-decoration: underline; } -a:active { color: #666666; text-decoration: underline; } -a:hover { color: #666666; text-decoration: underline; } -a { color: #666666; text-decoration: underline; } - -.pageheader { border: #E0E0E0 solid 1px; } -.pagefooter { border: #E0E0E0 solid 1px; } -.sample { background-color: #FFFFFF; border: #000000 solid 1px; } -.samplecontent { font-size: 10px; } - -.code { background-color: #FFFFFF; border: #000000 solid 1px; } -.codecontent { font-size: 10px; } -.codecontent a:visited { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a:active { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a:hover { color: #666666; text-decoration: none; font-weight: bold } -.codecontent a { color: #666666; text-decoration: none; font-weight: bold } - -hr { height: 1px; } - diff --git a/public/tiny_mce/themes/default/editor_content.css b/public/tiny_mce/themes/default/editor_content.css deleted file mode 100644 index 75290ee..0000000 --- a/public/tiny_mce/themes/default/editor_content.css +++ /dev/null @@ -1,27 +0,0 @@ -body { - background-color: #FFFFFF; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -pre { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -.mceVisualAid { - border: 1px dashed #BBBBBB; -} diff --git a/public/tiny_mce/themes/default/editor_popup.css b/public/tiny_mce/themes/default/editor_popup.css deleted file mode 100644 index 81a58d5..0000000 --- a/public/tiny_mce/themes/default/editor_popup.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - background-color: #F0F0EE; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; -} - -input { - background: #FFFFFF; - border: 1px solid #cccccc; -} - -td, input, select, textarea { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -input, select, textarea { - border: 1px solid #808080; -} - -.input_noborder { - border: 0px solid #808080; -} - -.title { - font-size: 12px; - font-weight: bold; -} \ No newline at end of file diff --git a/public/tiny_mce/themes/default/editor_template.js b/public/tiny_mce/themes/default/editor_template.js deleted file mode 100644 index de3b73e..0000000 --- a/public/tiny_mce/themes/default/editor_template.js +++ /dev/null @@ -1,32 +0,0 @@ -function TinyMCE_default_getEditorTemplate(){var template=new Array();template['html']='\ -\ -\ -\ -
\ -IFRAME\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
';template['delta_width']=0;template['delta_height']=-40;return template;}function TinyMCE_default_getInsertLinkTemplate(){var template=new Array();template['file']='link.htm';template['width']=320;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_link_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_link_delta_height',0);return template;}function TinyMCE_default_getInsertImageTemplate(){var template=new Array();template['file']='image.htm';template['width']=360;template['height']=200;template['width']+=tinyMCE.getLang('lang_insert_image_delta_width',0);template['height']+=tinyMCE.getLang('lang_insert_image_delta_height',0);return template;}function TinyMCE_default_handleNodeChange(editor_id,node){tinyMCE.switchClassSticky(editor_id+'_left','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_right','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_center','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_full','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonNormal');alignNode=node;breakOut=false;do{if(!alignNode.getAttribute||!alignNode.getAttribute('align'))continue;switch(alignNode.getAttribute('align').toLowerCase()){case "left":tinyMCE.switchClassSticky(editor_id+'_left','mceButtonSelected');breakOut=true;break;case "right":tinyMCE.switchClassSticky(editor_id+'_right','mceButtonSelected');breakOut=true;break;case "middle":case "center":tinyMCE.switchClassSticky(editor_id+'_center','mceButtonSelected');breakOut=true;break;case "justify":tinyMCE.switchClassSticky(editor_id+'_full','mceButtonSelected');breakOut=true;break;}}while(!breakOut&&(alignNode=alignNode.parentNode));do{switch(node.nodeName.toLowerCase()){case "b":case "strong":tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonSelected');break;case "i":case "em":tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonSelected');break;case "u":tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonSelected');break;case "strike":tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonSelected');break;case "ul":tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonSelected');break;case "ol":tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonSelected');break;}}while((node=node.parentNode));} \ No newline at end of file diff --git a/public/tiny_mce/themes/default/editor_template_src.js b/public/tiny_mce/themes/default/editor_template_src.js deleted file mode 100644 index 4a317b6..0000000 --- a/public/tiny_mce/themes/default/editor_template_src.js +++ /dev/null @@ -1,151 +0,0 @@ -function TinyMCE_default_getEditorTemplate() { - var template = new Array(); - - template['html'] = '\ -\ -\ -\ -
\ -IFRAME\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
'; - - template['delta_width'] = 0; - template['delta_height'] = -40; - - return template; -} - -/** - * Insert link template function. - */ -function TinyMCE_default_getInsertLinkTemplate() { - var template = new Array(); - - template['file'] = 'link.htm'; - template['width'] = 320; - template['height'] = 200; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_link_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_link_delta_height', 0); - - return template; -} - -/** - * Insert image template function. - */ -function TinyMCE_default_getInsertImageTemplate() { - var template = new Array(); - - template['file'] = 'image.htm'; - template['width'] = 360; - template['height'] = 200; - - // Language specific width and height addons - template['width'] += tinyMCE.getLang('lang_insert_image_delta_width', 0); - template['height'] += tinyMCE.getLang('lang_insert_image_delta_height', 0); - - return template; -} - -function TinyMCE_default_handleNodeChange(editor_id, node) { - // Reset old states - tinyMCE.switchClassSticky(editor_id + '_left', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_right', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_center', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_full', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonNormal'); - - // Handle align attributes - alignNode = node; - breakOut = false; - do { - if (!alignNode.getAttribute || !alignNode.getAttribute('align')) - continue; - - switch (alignNode.getAttribute('align').toLowerCase()) { - case "left": - tinyMCE.switchClassSticky(editor_id + '_left', 'mceButtonSelected'); - breakOut = true; - break; - - case "right": - tinyMCE.switchClassSticky(editor_id + '_right', 'mceButtonSelected'); - breakOut = true; - break; - - case "middle": - case "center": - tinyMCE.switchClassSticky(editor_id + '_center', 'mceButtonSelected'); - breakOut = true; - break; - - case "justify": - tinyMCE.switchClassSticky(editor_id + '_full', 'mceButtonSelected'); - breakOut = true; - break; - } - } while (!breakOut && (alignNode = alignNode.parentNode)); - - // Handle elements - do { - switch (node.nodeName.toLowerCase()) { - case "b": - case "strong": - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); - break; - - case "i": - case "em": - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); - break; - - case "u": - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); - break; - - case "strike": - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); - break; - - case "ul": - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonSelected'); - break; - - case "ol": - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonSelected'); - break; - } - } while ((node = node.parentNode)); -} diff --git a/public/tiny_mce/themes/default/editor_ui.css b/public/tiny_mce/themes/default/editor_ui.css deleted file mode 100644 index 5324fc0..0000000 --- a/public/tiny_mce/themes/default/editor_ui.css +++ /dev/null @@ -1,100 +0,0 @@ -.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { - margin-top: 1px; - margin-left: 1px; -} - -.mceButtonNormal { - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceButtonOver { -/* border-top: 1px solid buttonhighlight; - border-left: 1px solid buttonhighlight; - border-bottom: 1px solid buttonshadow; - border-right: 1px solid buttonshadow;*/ - border: 1px solid #0A246A; - cursor: arrow; - background-color: #B6BDD2; -} - -.mceButtonDown { -/* border-bottom: 1px solid buttonhighlight; - border-right: 1px solid buttonhighlight; - border-top: 1px solid buttonshadow; - border-left: 1px solid buttonshadow;*/ - cursor: arrow; - border: 1px solid #0A246A; - background-color: #8592B5; -} - -.mceButtonDisabled { - filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceSeparator { - border-top: 1px solid buttonhighlight; - border-left: 1px solid buttonhighlight; - border-bottom: 1px solid buttonshadow; - border-right: 1px solid buttonshadow; - margin-right: 2px; - margin-left: 2px; -} - -.mceSeparatorLine { - margin:2px; - margin-left: 4px; - background-color: #F0F0EE; - border-top: 1px solid buttonshadow; - border-left: 1px solid buttonshadow; - border-bottom: 1px solid buttonhighlight; - border-right: 1px solid buttonhighlight; - width: 0px; - height: 15px; -} - -.mceSelectList { - font-family: "MS Sans Serif"; - font-size: 7pt; - font-weight: normal; - margin-top: 2px; -} - -.mceLabel, .mceLabelDisabled { - font-family: "MS Sans Serif"; - font-size: 9pt; -} - -.mceLabel { - color: #000000; -} - -.mceLabelDisabled { - cursor: text; - color: #999999; -} - -.mceEditor { - background: #F0F0EE; - border: 1px solid #cccccc; -} - -.mceEditorArea { - font-family: "MS Sans Serif"; - background: #FFFFFF; -} - -.mceToolbar { - background: #F0F0EE; - border-top: 1px solid #cccccc; -} \ No newline at end of file diff --git a/public/tiny_mce/themes/default/image.htm b/public/tiny_mce/themes/default/image.htm deleted file mode 100644 index 96de555..0000000 --- a/public/tiny_mce/themes/default/image.htm +++ /dev/null @@ -1,57 +0,0 @@ - - -{$lang_insert_image_title} - - - - -
- - - - -
- - - - - - - - - - - - - - - -
{$lang_insert_image_title}
{$lang_insert_image_src}:
{$lang_insert_image_alt}:
-
-
- - diff --git a/public/tiny_mce/themes/default/images/bold.gif b/public/tiny_mce/themes/default/images/bold.gif deleted file mode 100644 index 31f004b24f5c83aff0497eb04204fa970c9ea2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0)8nM1~7!-9j&9Ku>L zCpIi}W)M(z%8>|6INB<%uXV;kaPg5oImQTd02Z Z;=Q4=W(@*2r{2+6_Ky4bCm(SJYXFy%8g2jp diff --git a/public/tiny_mce/themes/default/images/bold_fr.gif b/public/tiny_mce/themes/default/images/bold_fr.gif deleted file mode 100644 index 7782282838436ab0e31947ec16760295fa0bd6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcJCaNqy~1B2pE7Dgb&paUX6G7e0tE&VGca(SoE5w@yYb2R2y dd8Oiq(r2B^mWS!(e$R~f*|oLnxd$VIH2@Wf8BPEI diff --git a/public/tiny_mce/themes/default/images/bold_ru.gif b/public/tiny_mce/themes/default/images/bold_ru.gif deleted file mode 100644 index c9e89b27e548815114e78462553c6e0016aeddc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77 zcmZ?wbhEHb6k!lyXkcXU_4U1dV4AuZOG#Ksx diff --git a/public/tiny_mce/themes/default/images/bullist.gif b/public/tiny_mce/themes/default/images/bullist.gif deleted file mode 100644 index 12d0ec2299b415c1f1f8caeccbe6d36469314ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmZ?wbhEHb6k!lyXlDQc1%mKc{sH9)295v*MGhH{4GRu7a|mn2 zoY?SynVDZo$Rxm_!GS@-ILYRPg9B5ig0oRh!h%MRE-}T7D-{zO8CaB(Ps!{^IKVWK XnS*7=j-thmtc-kTWV}ie9T=nM1~7!-9j&9Ku>L uCpIWFv2`F0?^-yqZ56wYj5riB(j705< zVyCe!YXljiLO^P#O&b$wVQK^f*gCwVz_&4<9@p#ww;GKvb4p__+D;+lIH4d7 zq6DHiL<~r<#L3{ zVnPVJZvS27zx@*n^fjFl0D~adY1{b(aK8jax38a)<)nMt-a(yrb#EW&ktco)-FCXW zUSzF?^X5H|EC-%tB319cJwxaScYN90d+hAx8&{u~Bq`Yan-3(TQ^Dw|_)nB!87+721o($El7g?eu15{}a0q7EHz=-{CA?GN!R zDSZWpj<2}fBD~`v9lpVUSGDvjT8vQP6%{i$yko`TZPGu%xep(n@!{ct=hp3o*-|}A zvg8Trsc3svm0DG1*VxwDJjxx4UVuJBe-}L_{oO9g=aO;3LZDpI zP*EXSD49@9Xcj3R0vBCSM93q_BP9U$T3`0|k2xqFYXMS#60s7f-yIx6jPDQd zOF+5*`4^yqw#K%^wnC|7N1aKl6Ro>weOCY6&KLOq1xEg+l7w6*lf8)ECx{u5Rr8uH zcyq(NJiZh&Z!0@$Z<55zdVeAJ=%J_9N1iq+laY;g>tN#J!z- zsYY8AHs^;b&PrVUo{IY>2A_{DH;tiu$q!U>?aj7n4Ccn%HRDcyX6pXWXB+9@Rchi7 z)Nd{{1}a56K%NLLEG0Wf|HzNUE8~@n+X3U->r3T}wTK$Q+d|pR31_~ROq-dU#b5kB K$mqCC zBW^vT({i)44Y4&F8NJr8T(f@Cf?WamtJiKh5L>nW@S*+F=C7CYoK@B^fzfSsYEkEg z?T70+=PX&ZHNB*RF>;?q;G)uoi5jU}Iw#Ic%x_@~-^1v#a{AomlV-1Bv|F5z*D`8Iv8#2$;{X5uGoS*+ zpDc_F3|0&}AYqW77}%N}<`#J9NcEpkVF_}PndIb>kh%*Xi@|me}vhvFt^98V}F$kGh z@h}SUvw5;|u`nuGDKM~cv3d$ia`OPK*5u|C_GA&^Wprlb6=7*TcKpOiM+R#EaBGJ* diff --git a/public/tiny_mce/themes/default/images/full.gif b/public/tiny_mce/themes/default/images/full.gif deleted file mode 100644 index 5a78c630675cbb1f7027a11cbbb19a6090daba26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 856 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0!6nM1~7!-9j&9Ku>L wCpIWFvS<$*F5=IYCbgBlgia8mS;J{!F0C7th00000 diff --git a/public/tiny_mce/themes/default/images/help.gif b/public/tiny_mce/themes/default/images/help.gif deleted file mode 100644 index a5d67714bc9becca85232849b8b3cf24bddba494..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1027 zcmZ?wbhEHb6k!lyXlDQc0gnv=0UOLCyDXx66e57^0|EgT1R^dd1RPL^0HOy92_F

OYT29% z2@^gfO!!|g;X}a;Ao^dw=yLgz2NUPan>2UXq*eQO?A_C_;6nTIt8Hs8PFj0l(%R#b z*Bx(I@t|SF|NhO7CaiccVa10D8~!ibb#~FNiwkyNU9|Vcf*lW*?0&Fd$A<+w{;xT9 zbM3KPdk!7ickIOGqn8#O_`l)AgAE5hY&Zc#{|}wJa_rKrYqxG3IPu`jjR)s$Jw9;Z z!+{I`58U|h;KhdrAAsop2N3xG;m3a<00-VEF|d!pfx>f8vWp(T46` z;}8RjlOAnu!baL#Bz%O}c-W*eHXJ!n^z6`7EjylF7RpDMxReE?PB;WRwa(;Wb6;S{ z`0yYzyMcvTKto%Dqdb53;5xi1Ve8PaAl{09RDRG|2i zg^_`Qi$Mn@3^Id(B|qS#=jy#bmYv#4Q?pI*p?bZf4}wuZF{77A-PoE+3|-pFfbP)NAju!pljG~x9eYlg<-JldC77_7r5 f{>fl-My`~!@aq=WMO6iW(6IPA3%A6fg_wj zlS9U1!-9j&9Ku>L76J^1+c_CMN-Q=ma_Qif)R=JL!lNTi!a@oe0*y__`gwv2mKHE`lo$G!K;8!B2?h>J26he^ zj|~eBHggDT#hlo%(7B00$*smhVG%zmfg!{2D b7vIYJUmKs@=zXM?o5*?mlh5@MMh0sD=}{cF diff --git a/public/tiny_mce/themes/default/images/italic_ru.gif b/public/tiny_mce/themes/default/images/italic_ru.gif deleted file mode 100644 index 5c2f7fec2748d16db2da76bcb933e2f581c9f4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcXU_4U1d@| g-;s5$kL wCpIWFvpyBZ3(cKF-9?V<3rgqY@;KZ5_@87K3dCt-&=hpQLZ(cqB z_Vsf{S?~Qj*OzQPw(ro%o&{SUy!i0)`I8Sn{%boV9k}sf_R6DY&Yb!G|G#@k!GawZ zo;|t$?#;^$2OeCw@nOP(1Km?s+`D$|`}_CVt@93?crb6xuJ7N!Z`g6+!h`=o$;F$t z?iSDp*m2-^@1kwdSuGDf{LiiITd?86r1`5GW^8Z?%sP4D+SDb7jvT+RWb?(s>i%Wx zwz);;UwH6g<@U>ymhSlQ|NpENTQ6U`KYPQG4JRH~#%{P0cN>ZS5VMUEMvsef`aj?qa&CZj7Gn zVge32ZH~4!62i_b-U}Bm)oNuI6yRWWk}{OFFwt}|v}`q#5D|Bku-DfRH4qmNR&0X1HvvY{w_B*J`S(E~jG5Y9w&)0V{KxxdN-ChZQ6LYe}9L6TW@_@$=X3u0{rH E042uB(f|Me diff --git a/public/tiny_mce/themes/default/images/numlist.gif b/public/tiny_mce/themes/default/images/numlist.gif deleted file mode 100644 index 7ff907be758dcd41788aa864749a5f7ce4135d83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 889 zcmZ?wbhEHb6k!lyXlDQcgMbEufC&x}K(xRi0f;s@WB}2DfPw=76&C^;9<#pEg;4hCxgAlE{= diff --git a/public/tiny_mce/themes/default/images/outdent.gif b/public/tiny_mce/themes/default/images/outdent.gif deleted file mode 100644 index 53e89a77f471fe02d405d9fa6c0f4f48e67ffffd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 887 zcmZ?wbhEHb6k!lyXlDQcgMbMR5fg%PCOIT5a7fq?P;nuk0f-(1bUY~QJDJe&p=;XS zuKCBNY<@gtPamxHZD0im!sN>#cN9P#l_srObpflu{uB& diff --git a/public/tiny_mce/themes/default/images/paste.gif b/public/tiny_mce/themes/default/images/paste.gif deleted file mode 100644 index a676604cf68baab73af5ce50cc4a6934c447bd4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmeH`O>0v@6ow~hG`Cf2QY(p=>W#WEZIO$(h#!kdikgbbXhDipn1VvU3R89Au46+@ zx)4SbNkPiAP{?w0p_L-cjR?2kVpeiN(Gh|KTsX_RiW7f^`0((;*&H}8ob%)7@+YSU z!62xDF3@vf-b2uXmJ)&pqe+5G5F>~uA?b=p84_$0Axu%3V#4qPMkuG)W5lHdQGy@M z-R9I~6tfy;l&~5Rb;KFwb)pzhb!$TLgyujufU$~%S+}}IdM1D-Kt>@QU?Z^!hzYS# zHtiltYn(E{>Vk2>8Rd1#ITM`PK{Oa|NG_yUS3)W&s0yr1hg65mgw$v&Gi@vHw7D_7 zV{D3!5i(FR&{Am?8l{bH8%t-aWBFUm|M>SC$o`J?0B{40c2Dj81aLls4JT6)+^;x$ zhNr@{Qu5%=4Y1@i7oQ&4btW`4QG1p{MYxGu#f9`pCKEe;tFLXh zBJUUCyECK0jr#t9iDhr)%4)7RiMC~0-*1jTPUY^mz!EoNc=-*`;Se%E^iJ* z=KY}y*9Dr6##7niJbnm2z{36$KUTfju{+O4uJxynLdxU&hOfRz7YaMRx~FPwm87`3 s7p+{*&#d)5$&TeyU$pB}Fd$}@-@U!pbRu_uej0lD=GV7aPZXT~1EP=l`~Uy| diff --git a/public/tiny_mce/themes/default/images/redo.gif b/public/tiny_mce/themes/default/images/redo.gif deleted file mode 100644 index 26a146bdaf3bff7c5366806ff64685cb9a9e291f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1&;{^0TV2vXBh-6Fo*!64OR(D3=%e2rEj***lbYnz&(1F zL&k=nf~6sK+cGOwI%FL1EI;H>a3Q|_cx2s0hl&SYbr0ei_eQq8kL-OP(C{Ik<3mpG z!=%Y?Gp4>znDC)s#)pE1Z_AgwFIezl`s%Z7OWyaaf7c5{8{W;{`F_HV536?HUAgz( zqP_2y?0&y;@4J=z-tRbgare<{E04ZkbM(#TL+`g9d$IlK`|T&5Z94UK$H^zVPP{mD z`q6>Y&kme>a{SVZQ{V__6h5*SSp!k!8nSsHHK?kH0lqVQCx*1wIWIQ%3IM~b~ ztQB)YAW=Zpput2WL)nc>MBV2{LdWBytgO5$H4-14AF#BTScp_KC^9k$D3x95Xb3pk z%E;s`qwt{7g@eUZ-$KHInTbnM1~7!-9j&9Ku>L uCpIWFvaOo5kkGsR6pzPYmZ>z@A8Mwr4f?DvZn3YBf4AuY|n-yCC diff --git a/public/tiny_mce/themes/default/images/spacer.gif b/public/tiny_mce/themes/default/images/spacer.gif deleted file mode 100644 index fc2560981ee1caca400e225e48d282106f907f2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43 ucmZ?wbhEHbWMp7uXkcLY|NlP&1B2pE7Df>utpmhBaYhCPCMFj~25SJyItL8^ diff --git a/public/tiny_mce/themes/default/images/strikethrough.gif b/public/tiny_mce/themes/default/images/strikethrough.gif deleted file mode 100644 index ce7b65304e85e57d803d69ad14a8f1e19389a5ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0e~nM1~7!-9j&9Ku>L zCpIiR+|J6#!Qv43$fb*2mu-W_#Ki}@gq^eg?D)9oc)w`yDi+UxWcP`ZhU;Wb2rW80 O+oJf@ok{}*25SImDgsARJxYv*z=#V0#h)z93=B*RIv}5e@&p5iD+4QsjK_ur z2b(#BwPH?uP-tjpU~%Z#@!_FEH;#u+G?QQ1HMZVSz)!28WCdp>^9bD_1#W z9B?QAq6=|#M*}J@MAThysCeL2_aLrmZ$QI?$hHRo4IctJJ|s+dkTLar!h{b6GaeMo z_)xImL;tGFGuNJLSn;8E!}|#kz2AK7?e?SZH=lmL?c|#)*REc= zcK7o2`{%DdKYiuh>6>rCo){%YLx7wRQ2fcl%)sEtpaaqj$`cG6eGJVUG9DWi9Bk$g z)`~e1peP`&U-TzKVo58fkdn)u4HFAm4oIt+Sa<{^FmcOpIA6GssN~GdCL$tpz<^n? zolnk0!GXc)K?A3%K-!KC2M;qzFiSGHMjSlQ$|qT)vULN~LKb!&4h{~53GB=~rW#x! liiyn;jr;~n1a334wsE8>f{lbk0FP}g8@Z*1AO8JBZ2V4TPjvT)boz>E_VC#h&A2w~>{r~^} zcW+)kdvgEYwQCPveE9zU{iUl{4&3-KZ_Td4>V5-{f`ozz0RL8z#>2v34FK-Fw;KQe diff --git a/public/tiny_mce/themes/default/link.htm b/public/tiny_mce/themes/default/link.htm deleted file mode 100644 index 013c9b1..0000000 --- a/public/tiny_mce/themes/default/link.htm +++ /dev/null @@ -1,64 +0,0 @@ - - -{$lang_insert_link_title} - - - - -

- - - - -
- - - - - - - - - - - - - - - -
{$lang_insert_link_title}
{$lang_insert_link_url}:
{$lang_insert_link_target}:
-
-
- - diff --git a/public/tiny_mce/themes/simple/editor_content.css b/public/tiny_mce/themes/simple/editor_content.css deleted file mode 100644 index 75290ee..0000000 --- a/public/tiny_mce/themes/simple/editor_content.css +++ /dev/null @@ -1,27 +0,0 @@ -body { - background-color: #FFFFFF; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -pre { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -.mceVisualAid { - border: 1px dashed #BBBBBB; -} diff --git a/public/tiny_mce/themes/simple/editor_popup.css b/public/tiny_mce/themes/simple/editor_popup.css deleted file mode 100644 index 81a58d5..0000000 --- a/public/tiny_mce/themes/simple/editor_popup.css +++ /dev/null @@ -1,41 +0,0 @@ -body { - background-color: #F0F0EE; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; - scrollbar-3dlight-color: #F0F0EE; - scrollbar-arrow-color: #676662; - scrollbar-base-color: #F0F0EE; - scrollbar-darkshadow-color: #DDDDDD; - scrollbar-face-color: #E0E0DD; - scrollbar-highlight-color: #F0F0EE; - scrollbar-shadow-color: #F0F0EE; - scrollbar-track-color: #F5F5F5; -} - -td { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 11px; -} - -input { - background: #FFFFFF; - border: 1px solid #cccccc; -} - -td, input, select, textarea { - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10px; -} - -input, select, textarea { - border: 1px solid #808080; -} - -.input_noborder { - border: 0px solid #808080; -} - -.title { - font-size: 12px; - font-weight: bold; -} \ No newline at end of file diff --git a/public/tiny_mce/themes/simple/editor_template.js b/public/tiny_mce/themes/simple/editor_template.js deleted file mode 100644 index 8cddcf1..0000000 --- a/public/tiny_mce/themes/simple/editor_template.js +++ /dev/null @@ -1,20 +0,0 @@ -function TinyMCE_simple_getEditorTemplate(){var template=new Array();template['html']='\ -\ -\ -\ -
\ -IFRAME\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
';template['delta_width']=0;template['delta_height']=-20;return template;}function TinyMCE_simple_handleNodeChange(editor_id,node){tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonNormal');tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonNormal');do{switch(node.nodeName.toLowerCase()){case "b":case "strong":tinyMCE.switchClassSticky(editor_id+'_bold','mceButtonSelected');break;case "i":case "em":tinyMCE.switchClassSticky(editor_id+'_italic','mceButtonSelected');break;case "u":tinyMCE.switchClassSticky(editor_id+'_underline','mceButtonSelected');break;case "strike":tinyMCE.switchClassSticky(editor_id+'_strikethrough','mceButtonSelected');break;case "ul":tinyMCE.switchClassSticky(editor_id+'_bullist','mceButtonSelected');break;case "ol":tinyMCE.switchClassSticky(editor_id+'_numlist','mceButtonSelected');break;}}while((node=node.parentNode));} \ No newline at end of file diff --git a/public/tiny_mce/themes/simple/editor_template_src.js b/public/tiny_mce/themes/simple/editor_template_src.js deleted file mode 100644 index 3dbf187..0000000 --- a/public/tiny_mce/themes/simple/editor_template_src.js +++ /dev/null @@ -1,70 +0,0 @@ -function TinyMCE_simple_getEditorTemplate() { - var template = new Array(); - - template['html'] = '\ -\ -\ -\ -
\ -IFRAME\ -
\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -\ -
'; - - template['delta_width'] = 0; - template['delta_height'] = -20; - - return template; -} - -function TinyMCE_simple_handleNodeChange(editor_id, node) { - // Reset old states - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonNormal'); - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonNormal'); - - // Handle elements - do { - switch (node.nodeName.toLowerCase()) { - case "b": - case "strong": - tinyMCE.switchClassSticky(editor_id + '_bold', 'mceButtonSelected'); - break; - - case "i": - case "em": - tinyMCE.switchClassSticky(editor_id + '_italic', 'mceButtonSelected'); - break; - - case "u": - tinyMCE.switchClassSticky(editor_id + '_underline', 'mceButtonSelected'); - break; - - case "strike": - tinyMCE.switchClassSticky(editor_id + '_strikethrough', 'mceButtonSelected'); - break; - - case "ul": - tinyMCE.switchClassSticky(editor_id + '_bullist', 'mceButtonSelected'); - break; - - case "ol": - tinyMCE.switchClassSticky(editor_id + '_numlist', 'mceButtonSelected'); - break; - } - } while ((node = node.parentNode)); -} diff --git a/public/tiny_mce/themes/simple/editor_ui.css b/public/tiny_mce/themes/simple/editor_ui.css deleted file mode 100644 index 7f57981..0000000 --- a/public/tiny_mce/themes/simple/editor_ui.css +++ /dev/null @@ -1,100 +0,0 @@ -.mceButtonNormal, .mceButtonOver, .mceButtonDown, .mceSeparator, .mceButtonDisabled, .mceButtonSelected { - margin-top: 1px; - margin-left: 1px; -} - -.mceButtonNormal { - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceButtonOver { - border: 1px solid #0A246A; - cursor: arrow; - background-color: #B6BDD2; -} - -.mceButtonDown { - cursor: arrow; - border: 1px solid #0A246A; - background-color: #8592B5; -} - -.mceButtonSelected { - border: 1px solid; - border-color: #C0C0BB; - cursor: arrow; -} - -.mceButtonDisabled { - filter:progid:DXImageTransform.Microsoft.Alpha(opacity=30); - -moz-opacity:0.3; - opacity: 0.3; - border-top: 1px solid; - border-left: 1px solid; - border-bottom: 1px solid; - border-right: 1px solid; - border-color: #F0F0EE; - cursor: arrow; -} - -.mceSeparator { - border-top: 1px solid buttonhighlight; - border-left: 1px solid buttonhighlight; - border-bottom: 1px solid buttonshadow; - border-right: 1px solid buttonshadow; - margin-right: 2px; - margin-left: 2px; -} - -.mceSeparatorLine { - margin:2px; - margin-left: 4px; - background-color: #F0F0EE; - border-top: 1px solid buttonshadow; - border-left: 1px solid buttonshadow; - border-bottom: 1px solid buttonhighlight; - border-right: 1px solid buttonhighlight; - width: 0px; - height: 15px; -} - -.mceSelectList { - font-family: "MS Sans Serif"; - font-size: 7pt; - font-weight: normal; - margin-top: 2px; -} - -.mceLabel, .mceLabelDisabled { - font-family: "MS Sans Serif"; - font-size: 9pt; -} - -.mceLabel { - color: #000000; -} - -.mceLabelDisabled { - cursor: text; - color: #999999; -} - -.mceEditor { - background: #F0F0EE; - border: 1px solid #cccccc; -} - -.mceEditorArea { - font-family: "MS Sans Serif"; - background: #FFFFFF; -} - -.mceToolbar { - background: #F0F0EE; - border-top: 1px solid #cccccc; -} \ No newline at end of file diff --git a/public/tiny_mce/themes/simple/images/bold.gif b/public/tiny_mce/themes/simple/images/bold.gif deleted file mode 100644 index 31f004b24f5c83aff0497eb04204fa970c9ea2e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 864 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0)8nM1~7!-9j&9Ku>L zCpIi}W)M(z%8>|6INB<%uXV;kaPg5oImQTd02Z Z;=Q4=W(@*2r{2+6_Ky4bCm(SJYXFy%8g2jp diff --git a/public/tiny_mce/themes/simple/images/bold_fr.gif b/public/tiny_mce/themes/simple/images/bold_fr.gif deleted file mode 100644 index 7782282838436ab0e31947ec16760295fa0bd6c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcJCaNqy~1B2pE7Dgb&paUX6G7e0tE&VGca(SoE5w@yYb2R2y dd8Oiq(r2B^mWS!(e$R~f*|oLnxd$VIH2@Wf8BPEI diff --git a/public/tiny_mce/themes/simple/images/bold_ru.gif b/public/tiny_mce/themes/simple/images/bold_ru.gif deleted file mode 100644 index c9e89b27e548815114e78462553c6e0016aeddc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77 zcmZ?wbhEHb6k!lyXkcXU_4U1dV4AuZOG#Ksx diff --git a/public/tiny_mce/themes/simple/images/bullist.gif b/public/tiny_mce/themes/simple/images/bullist.gif deleted file mode 100644 index 12d0ec2299b415c1f1f8caeccbe6d36469314ebe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 883 zcmZ?wbhEHb6k!lyXlDQc1%mKc{sH9)295v*MGhH{4GRu7a|mn2 zoY?SynVDZo$Rxm_!GS@-ILYRPg9B5ig0oRh!h%MRE-}T7D-{zO8CaB(Ps!{^IKVWK XnS*7=j-thmtc-kTWV}ie9T=2`F0?^-yqZ56wYj5riB(j705< zVyCe!YXljiLO^P#O&b$wVQK^f*gCwVz_&4<9@p#ww;GKvb4p__+D;+lIH4d7 zq6DHiL<~r<#L3{ zVnPVJZvS27zx@*n^fjFl0D~adY1{b(aK8jax38a)<)nMt-a(yrb#EW&ktco)-FCXW zUSzF?^X5H|EC-%tB319cJwxaScYN90d+hAx8&{u~Bq`Yan-3(TQ^Dw|_)nB!8gwv2mKHE`lo$G!K;8!B2?h>J26he^ zj|~eBHggDT#hlo%(7B00$*smhVG%zmfg!{2D b7vIYJUmKs@=zXM?o5*?mlh5@MMh0sD=}{cF diff --git a/public/tiny_mce/themes/simple/images/italic_ru.gif b/public/tiny_mce/themes/simple/images/italic_ru.gif deleted file mode 100644 index 5c2f7fec2748d16db2da76bcb933e2f581c9f4cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmZ?wbhEHb6k!lyXkcXU_4U1d@| g-;s5$k#pEg;4hCxgAlE{= diff --git a/public/tiny_mce/themes/simple/images/redo.gif b/public/tiny_mce/themes/simple/images/redo.gif deleted file mode 100644 index 26a146bdaf3bff7c5366806ff64685cb9a9e291f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 942 zcmZ?wbhEHb6k!lyXlDQc1&;{^0TV2vXBh-6Fo*!64OR(D3=%e2rEj***lbYnz&(1F zL&k=nf~6sK+cGOwI%FL1EI;H>a3Q|_cx2s0hl&SYbr0ei_eQq8kL-OP(C{Ik<3mpG z!=%Y?Gp4>znDC)s#)pE1Z_AgwFIezl`s%Z7OWyaaf7c5{8{W;{`F_HV536?HUAgz( zqP_2y?0&y;@4J=z-tRbgare<{E04ZkbM(#TL+`g9d$IlK`|T&5Z94UK$H^zVPP{mD z`q6>Y&kme>a{SVZQ{V__6h5*SSp!k!8nSsHHK?kH0lqVQCx*1wIWIQ%3IM~b~ ztQB)YAW=Zpput2WL)nc>MBV2{LdWBytgO5$H4-14AF#BTScp_KC^9k$D3x95Xb3pk z%E;s`qwt{7g@eUZ-$KHInTbutpmhBaYhCPCMFj~25SJyItL8^ diff --git a/public/tiny_mce/themes/simple/images/strikethrough.gif b/public/tiny_mce/themes/simple/images/strikethrough.gif deleted file mode 100644 index ce7b65304e85e57d803d69ad14a8f1e19389a5ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 873 zcmZ?wbhEHb6k!lyXlED&qaiS&LqPE-3o`=)BZCeo6hL``fy0e~nM1~7!-9j&9Ku>L zCpIiR+|J6#!Qv43$fb*2mu-W_#Ki}@gq^eg?D)9oc)w`yDi+UxWcP`ZhU;Wb2rW80 O+oJf@ok{}*25SImDk diff --git a/public/tiny_mce/themes/simple/images/underline_ru.gif b/public/tiny_mce/themes/simple/images/underline_ru.gif deleted file mode 100644 index 2a517e8b6bde52f82ebedaace15e43d4c39197f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77 zcmZ?wbhEHb6k!lyXkcXU_4U1d#u+G?QQ1HMZVSz)!28WCdp>^9bD_1#W z9B?QAq6=|#M*}J@MAThysCeL2_aLrmZ$QI?$hHRo4IctJJ|s+dkTLar!h{b6GaeMo z_)xImL;tGFGuNJLSn;8E!}|#kz2AK7?e?SZH=lmL?c|#)*REc= zcK7o2`{%DdKYiuh>6>rCo){%YLx7wRQ2fcl%)sEtpaaqj$`cG6eGJVUG9DWi9Bk$g z)`~e1peP`&U-TzKVo58fkdn)u4HFAm4oIt+Sa<{^FmcOpIA6GssN~GdCL$tpz<^n? zolnk0!GXc)K?A3%K-!KC2M;qzFiSGHMjSlQ$|qT)vULN~LKb!&4h{~53GB=~rW#x! liiyn;jr;~n1a334wsE8');this.loadedFiles[this.loadedFiles.length]=url;};TinyMCE.prototype.loadCSS=function(url){for(var i=0;i');this.loadedFiles[this.loadedFiles.length]=url;};TinyMCE.prototype.importCSS=function(doc,css_file){if(tinyMCE.isMSIE)var styleSheet=doc.createStyleSheet(css_file);else{var elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if(headArr=doc.getElementsByTagName("head"))headArr[0].appendChild(elm);}};TinyMCE.prototype.confirmAdd=function(e,settings){var elm=tinyMCE.isMSIE?event.srcElement:e.target;var elementId=elm.name?elm.name:elm.id;tinyMCE.settings=settings;if(!elm.getAttribute('mce_noask')&&confirm(tinyMCELang['lang_edit_confirm']))tinyMCE.addMCEControl(elm,elementId);elm.setAttribute('mce_noask','true');};TinyMCE.prototype.updateContent=function(form_element_name){var formElement=document.getElementById(form_element_name);for(var n in tinyMCE.instances){var inst=tinyMCE.instances[n];if(typeof(inst)=="function")continue;inst.switchSettings();if(inst.formElement==formElement){var doc=inst.getDoc();tinyMCE._setHTML(doc,inst.formElement.value);if(!tinyMCE.isMSIE)doc.body.innerHTML=tinyMCE._cleanupHTML(doc,this.settings,doc.body,inst.visualAid);}}};TinyMCE.prototype.addMCEControl=function(replace_element,form_element_name,target_document){var id="mce_editor_"+tinyMCE.idCounter++;var inst=new TinyMCEControl(tinyMCE.settings);inst.editorId=id;this.instances[id]=inst;inst.onAdd(replace_element,form_element_name,target_document);};TinyMCE.prototype.triggerSave=function(skip_cleanup,skip_callback){for(var n in tinyMCE.instances){var inst=tinyMCE.instances[n];if(typeof(inst)=="function")continue;inst.switchSettings();tinyMCE.settings['preformatted']=false;if(typeof(skip_cleanup)=="undefined")skip_cleanup=false;if(typeof(skip_callback)=="undefined")skip_callback=false;tinyMCE._setHTML(inst.getDoc(),inst.getBody().innerHTML);var htm=skip_cleanup?inst.getBody().innerHTML:tinyMCE._cleanupHTML(inst.getDoc(),this.settings,inst.getBody(),this.visualAid,true);if(tinyMCE.settings["encoding"]=="xml"||tinyMCE.settings["encoding"]=="html")htm=tinyMCE.convertStringToXML(htm);if(!skip_callback&&tinyMCE.settings['save_callback']!="")var content=eval(tinyMCE.settings['save_callback']+"(inst.formTargetElementId,htm,inst.getBody());");if((typeof(content)!="undefined")&&content!=null)htm=content;htm=tinyMCE.regexpReplace(htm,"(","(","gi");htm=tinyMCE.regexpReplace(htm,")",")","gi");htm=tinyMCE.regexpReplace(htm,";",";","gi");htm=tinyMCE.regexpReplace(htm,""",""","gi");htm=tinyMCE.regexpReplace(htm,"^","^","gi");if(inst.formElement)inst.formElement.value=htm;}};TinyMCE.prototype._convertOnClick=function(node){if(tinyMCE.isMSIE5)return;var elms=node.getElementsByTagName("a");for(var i=0;i","gi");content=tinyMCE.regexpReplace(content,"\r","
","gi");content=tinyMCE.regexpReplace(content,"\n","
","gi");}content=tinyMCE._customCleanup("insert_to_editor",content);if(tinyMCE.isMSIE){window.setInterval('try{tinyMCE.getCSSClasses(document.frames["'+editor_id+'"].document, "'+editor_id+'");}catch(e){}',500);if(tinyMCE.settings["force_br_newlines"])document.frames[editor_id].document.styleSheets[0].addRule("p","margin: 0px;");var body=document.frames[editor_id].document.body;tinyMCE.addEvent(body,"beforepaste",TinyMCE.prototype.eventPatch);tinyMCE.addEvent(body,"beforecut",TinyMCE.prototype.eventPatch);tinyMCE.addEvent(body,"paste",TinyMCE.prototype.eventPatch);body.editorId=editor_id;}if(!tinyMCE.isMSIE){var contentElement=inst.getDoc().createElement("body");var doc=inst.getDoc();contentElement.innerHTML=content;if(tinyMCE.settings['force_p_newlines'])content=content.replace(new RegExp('<>','g'),"");if(tinyMCE.settings['cleanup_on_startup'])inst.getBody().innerHTML=tinyMCE._cleanupHTML(doc,this.settings,contentElement);else{content=tinyMCE.regexpReplace(content,"","
","gi");content=tinyMCE.regexpReplace(content,"","
","gi");inst.getBody().innerHTML=content;}inst.convertAllRelativeURLs();}else{if(tinyMCE.settings['cleanup_on_startup']){tinyMCE._setHTML(inst.getDoc(),content);eval('try {inst.getBody().innerHTML = tinyMCE._cleanupHTML(inst.contentDocument, this.settings, inst.getBody());} catch(e) {}');}else inst.getBody().innerHTML=content;}tinyMCE._convertOnClick(inst.getBody());var parentElm=document.getElementById(inst.editorId+'_parent');if(parentElm.lastChild.nodeName.toLowerCase()=="input")inst.formElement=parentElm.lastChild;else inst.formElement=parentElm.nextSibling;tinyMCE.handleVisualAid(inst.getBody(),true,tinyMCE.settings['visual']);tinyMCE.executeCallback('setupcontent_callback','_setupContent',0,editor_id,inst.getBody(),inst.getDoc());if(!tinyMCE.isMSIE)TinyMCE.prototype.addEventHandlers(editor_id);inst.startContent=inst.getBody().innerHTML;tinyMCE.selectedInstance=inst;tinyMCE.selectedElement=inst.contentWindow.document.body;tinyMCE.triggerNodeChange(false,true);tinyMCE._customCleanup("insert_to_editor_dom",inst.contentWindow.document.body);};TinyMCE.prototype.cancelEvent=function(e){if(tinyMCE.isMSIE){e.returnValue=false;e.cancelBubble=true;}else e.preventDefault();};TinyMCE.prototype.removeTinyMCEFormElements=function(form_obj){for(var i=0;i");rng.collapse(false);rng.select();tinyMCE.triggerNodeChange(false);return false;}}if(e.keyCode==8||e.keyCode==46){tinyMCE.selectedElement=e.target;tinyMCE.linkElement=tinyMCE.getParentElement(e.target,"a");tinyMCE.imgElement=tinyMCE.getParentElement(e.target,"img");tinyMCE.triggerNodeChange(false);}return false;break;case "keyup":case "keydown":if(e.target.editorId)tinyMCE.selectedInstance=tinyMCE.instances[e.target.editorId];else return;if(tinyMCE.selectedInstance)tinyMCE.selectedInstance.switchSettings();if(tinyMCE.isGecko&&tinyMCE.settings['force_p_newlines']&&(e.keyCode==8||e.keyCode==46)&&!e.shiftKey){if(tinyMCE.selectedInstance._handleBackSpace(e.type)){e.preventDefault();return false;}}tinyMCE.selectedElement=null;tinyMCE.selectedNode=null;var elm=tinyMCE.selectedInstance.getFocusElement();tinyMCE.linkElement=tinyMCE.getParentElement(elm,"a");tinyMCE.imgElement=tinyMCE.getParentElement(elm,"img");tinyMCE.selectedElement=elm;if(tinyMCE.isGecko&&e.type=="keyup"&&e.keyCode==9)tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(),true,tinyMCE.settings['visual']);if(tinyMCE.isGecko&&tinyMCE.settings['document_base_url']!=""+document.location.href&&e.type=="keyup"&&e.ctrlKey&&e.keyCode==86)tinyMCE.selectedInstance.fixBrokenURLs();if(tinyMCE.isMSIE&&tinyMCE.settings['custom_undo_redo']){var keys=new Array(13,45,36,35,33,34,37,38,39,40);var posKey=false;for(var i=0;i18&&e.keyCode!=255)){tinyMCE.selectedInstance.execCommand("mceAddUndoLevel");tinyMCE.selectedInstance.typing=true;tinyMCE.triggerNodeChange(false);}if(posKey&&e.type=="keyup")tinyMCE.triggerNodeChange(false);var keys=new Array(8,46);for(var i=0;i0){for(var i=0;i"+this.convertStringToXML(String.fromCharCode(160))+"";if(tinyMCE.isMSIE&&elementName=="script")return "<"+elementName+elementAttribs+">"+node.text+"";if(node.hasChildNodes()){if(elementName=="p"&&tinyMCE.cleanup_force_br_newlines)output+="";else output+="<"+elementName+elementAttribs+">";for(var i=0;i
";else output+="";}else{if(openTag)output+="<"+elementName+elementAttribs+">";else{output+="<"+elementName+elementAttribs+" />";}}return output;case 3:if(node.parentNode.nodeName.toLowerCase()=="script")return node.nodeValue;return this.convertStringToXML(node.nodeValue);case 8:return "";default:return "[UNKNOWN NODETYPE "+node.nodeType+"]";}};TinyMCE.prototype.convertStringToXML=function(html_data){var output="";for(var i=0;i127)output+='&#'+chr+";";else output+=String.fromCharCode(chr);continue;}if(tinyMCE.settings['entity_encoding']=="raw"){output+=String.fromCharCode(chr);continue;}if(typeof(tinyMCE.cleanup_entities["c"+chr])!='undefined'&&tinyMCE.cleanup_entities["c"+chr]!='')output+='&'+tinyMCE.cleanup_entities["c"+chr]+';';else output+=''+String.fromCharCode(chr);}return output;};TinyMCE.prototype._getCleanupElementName=function(chunk){var pos;if(chunk.charAt(0)=='+')chunk=chunk.substring(1);if((pos=chunk.indexOf('/'))!=-1)chunk=chunk.substring(0,pos);if((pos=chunk.indexOf('['))!=-1)chunk=chunk.substring(0,pos);return chunk;};TinyMCE.prototype._initCleanup=function(){var validElements=tinyMCE.settings["valid_elements"];validElements=validElements.split(',');var extendedValidElements=tinyMCE.settings["extended_valid_elements"];extendedValidElements=extendedValidElements.split(',');for(var i=0;i[ \n\r]*
[ \n\r]*

','
','gi');element.innerHTML=tinyMCE.regexpReplace(element.innerHTML,'','','gi');}var html=this.cleanupNode(element);if(tinyMCE.settings['debug'])alert("Cleanup process executed in: "+(new Date().getTime()-startTime)+" ms.");html=tinyMCE.regexpReplace(html,'


','
');html=tinyMCE.regexpReplace(html,'

 


 

','
');if(!tinyMCE.isMSIE)html=html.replace(new RegExp('','g'),"");if(tinyMCE.settings['apply_source_formatting']){html=html.replace(new RegExp('<(p|div)([^>]*)>','g'),"\n<$1$2>\n");html=html.replace(new RegExp('<\/(p|div)([^>]*)>','g'),"\n\n");html=html.replace(new RegExp('
','g'),"
\n");}if(tinyMCE.settings['force_br_newlines']){var re=new RegExp('

 

','g');html=html.replace(re,"
");}if(tinyMCE.settings['force_p_newlines']){var re=new RegExp('<>','g');html=html.replace(re,"");}if(tinyMCE.settings['remove_linebreaks'])html=html.replace(new RegExp('\r|\n','g'),' ');html=tinyMCE._customCleanup(on_save?"get_from_editor":"insert_to_editor",html);var chk=tinyMCE.regexpReplace(html,"[ \t\r\n]","");if(chk=="
"||chk=="
"||chk=="

 

"||chk=="

 

"||chk=="

")html="";if(tinyMCE.settings["preformatted"])return "
"+html+"
";return html;};TinyMCE.prototype.setAttrib=function(element,name,value,no_fix_value){if(!no_fix_value&&value!=null){var re=new RegExp('[^0-9%]','g');value=value.replace(re,'');}if(value!=null&&value!="")element.setAttribute(name,value);else element.removeAttribute(name);if(value!=null&&value!="")element.setAttribute(name,value);else element.removeAttribute(name);};TinyMCE.prototype.insertLink=function(href,target,title,onclick,style_class){this.execCommand("mceAddUndoLevel");if(this.selectedInstance&&this.selectedElement&&this.selectedElement.nodeName.toLowerCase()=="img"){var doc=this.selectedInstance.getDoc();var linkElement=tinyMCE.getParentElement(this.selectedElement,"a");var newLink=false;if(!linkElement){linkElement=doc.createElement("a");newLink=true;}href=eval(tinyMCE.settings['urlconverter_callback']+"(href, linkElement);");tinyMCE.setAttrib(linkElement,'href',href);tinyMCE.setAttrib(linkElement,'target',target);tinyMCE.setAttrib(linkElement,'title',title);tinyMCE.setAttrib(linkElement,'mce_onclick',onclick);tinyMCE.setAttrib(linkElement,'class',style_class);if(newLink){linkElement.appendChild(this.selectedElement.cloneNode(true));this.selectedElement.parentNode.replaceChild(linkElement,this.selectedElement);}return;}if(!this.linkElement&&this.selectedInstance){this.selectedInstance.contentDocument.execCommand("createlink",false,"#mce_temp_url#");tinyMCE.linkElement=this.getElementByAttributeValue(this.selectedInstance.contentDocument.body,"a","href","#mce_temp_url#");var elementArray=this.getElementsByAttributeValue(this.selectedInstance.contentDocument.body,"a","href","#mce_temp_url#");for(var i=0;i=strTok2.length){for(var i=0;i=strTok2.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break;}}}if(strTok1.length=strTok1.length||strTok1[i]!=strTok2[i]){breakPoint=i+1;break;}}}if(breakPoint==1)return url_to_relative;for(var i=0;i<(strTok1.length-(breakPoint-1));i++)outputString+="../";for(var i=breakPoint-1;i=0;i--){if(baseURLParts[i].length==0)continue;newBaseURLParts[newBaseURLParts.length]=baseURLParts[i];}baseURLParts=newBaseURLParts.reverse();var newRelURLParts=new Array();var numBack=0;for(var i=relURLParts.length-1;i>=0;i--){if(relURLParts[i].length==0||relURLParts[i]==".")continue;if(relURLParts[i]=='..'){numBack++;continue;}if(numBack>0){numBack--;continue;}newRelURLParts[newRelURLParts.length]=relURLParts[i];}relURLParts=newRelURLParts.reverse();var len=baseURLParts.length-numBack;var absPath=(len<=0?"":"/")+baseURLParts.slice(0,len).join('/')+"/"+relURLParts.join('/');var start="",end="";if(baseURL['protocol'])start+=baseURL['protocol']+"://";if(baseURL['host'])start+=baseURL['host'];if(baseURL['port'])start+=":"+baseURL['port'];if(relURL['query'])end+="?"+relURL['query'];if(relURL['anchor'])end+="#"+relURL['anchor'];if(relative_url.charAt(relative_url.length-1)=="/")end+="/";return start+absPath+end;};TinyMCE.prototype.getParam=function(name,default_value,strip_whitespace,split_chr){var value=(typeof(this.settings[name])=="undefined")?default_value:this.settings[name];if(value=="true"||value=="false")return(value=="true");if(strip_whitespace)value=tinyMCE.regexpReplace(value,"[ \t\r\n]","");if(typeof(split_chr)!="undefined"&&split_chr!=null){value=value.split(split_chr);var outArray=new Array();for(var i=0;i0);if(tinyMCE.settings['custom_undo_redo']){undoIndex=inst.undoIndex;undoLevels=inst.undoLevels.length;}tinyMCE.executeCallback('handleNodeChangeCallback','_handleNodeChange',0,editorId,elm,undoIndex,undoLevels,inst.visualAid,anySelection);}}if(this.selectedInstance&&(typeof(focus)=="undefined"||focus))this.selectedInstance.contentWindow.focus();};TinyMCE.prototype._customCleanup=function(type,content){var customCleanup=tinyMCE.settings['cleanup_callback'];if(customCleanup!=""&&eval("typeof("+customCleanup+")")!="undefined")content=eval(customCleanup+"(type, content);");var plugins=tinyMCE.getParam('plugins','',true,',');for(var i=0;i
';div.innerHTML=html;document.body.appendChild(div);tinyMCE._currentDialog=id;}}};TinyMCE.prototype.closeDialog=function(){if(tinyMCE.settings["dialog_type"]=="div"){var div=document.getElementById(tinyMCE._currentDialog);if(div)div.parentNode.removeChild(div);}else window.close();};TinyMCE.prototype.getVisualAidClass=function(class_name,state){var aidClass=tinyMCE.settings['visual_table_class'];if(typeof(state)=="undefined")state=tinyMCE.settings['visual'];var classNames=new Array();var ar=class_name.split(' ');for(var i=0;i0)className+=" ";className+=classNames[i];}return className;};TinyMCE.prototype.handleVisualAid=function(element,deep,state){if(!element)return;var tableElement=null;switch(element.nodeName.toLowerCase()){case "table":var oldW=element.style.width;var oldH=element.style.height;element.className=tinyMCE.getVisualAidClass(element.className,state&&element.getAttribute("border")==0);element.style.width=oldW;element.style.height=oldH;for(var y=0;y

','g');html_content=html_content.replace(re,"
");}doc.body.innerHTML=html_content;if(tinyMCE.isMSIE&&tinyMCE.settings['fix_content_duplication']){var paras=doc.getElementsByTagName("P");for(var i=0;i<\/o:p>","
");html=tinyMCE.regexpReplace(html," <\/o:p>","");html=tinyMCE.regexpReplace(html,"","");html=tinyMCE.regexpReplace(html,"

<\/p>","");html=tinyMCE.regexpReplace(html,"

<\/p>\r\n

<\/p>","");html=tinyMCE.regexpReplace(html,"

 <\/p>","
");html=tinyMCE.regexpReplace(html,"

\s*(

\s*)?","

");html=tinyMCE.regexpReplace(html,"<\/p>\s*(<\/p>\s*)?","

");}doc.body.innerHTML=html;}};TinyMCE.prototype.getImageSrc=function(str){var pos=-1;if(!str)return "";if((pos=str.indexOf('this.src='))!=-1){var src=str.substring(pos+10);src=src.substring(0,src.indexOf('\''));return src;}return "";};TinyMCE.prototype._getElementById=function(element_id){var elm=document.getElementById(element_id);if(!elm){for(var j=0;j0){var csses=null;eval("try {var csses = tinyMCE.isMSIE ? doc.styleSheets(0).rules : doc.styleSheets[0].cssRules;} catch(e) {}");if(!csses)return new Array();for(var i=0;i0)tinyMCE.cssClasses=output;return output;};TinyMCE.prototype.regexpReplace=function(in_str,reg_exp,replace_str,opts){if(typeof(opts)=="undefined")opts='g';var re=new RegExp(reg_exp,opts);return in_str.replace(re,replace_str);};TinyMCE.prototype.cleanupEventStr=function(str){str=""+str;str=str.replace('function anonymous()\n{\n','');str=str.replace('\n}','');return str;};TinyMCE.prototype.getAbsPosition=function(node){var pos=new Object();pos.absLeft=pos.absTop=0;var parentNode=node;while(parentNode){pos.absLeft+=parentNode.offsetLeft;pos.absTop+=parentNode.offsetTop;parentNode=parentNode.offsetParent;}return pos;};TinyMCE.prototype.openFileBrowser=function(field_name,url,type,win){var cb=tinyMCE.getParam("file_browser_callback");this.setWindowArg("window",win);if(eval('typeof('+cb+')')=="undefined")alert("Callback function: "+cb+" could not be found.");else eval(cb+"(field_name, url, type, win);");};TinyMCE.prototype.getControlHTML=function(control_name){var themePlugins=tinyMCE.getParam('plugins','',true,',');var templateFunction;for(var i=themePlugins.length;i>=0;i--){templateFunction='TinyMCE_'+themePlugins[i]+"_getControlHTML";if(eval("typeof("+templateFunction+")")!='undefined'){var html=eval(templateFunction+"('"+control_name+"');");if(html!="")return tinyMCE.replaceVar(html,"pluginurl",tinyMCE.baseURL+"/plugins/"+themePlugins[i]);}}return eval('TinyMCE_'+tinyMCE.settings['theme']+"_getControlHTML"+"('"+control_name+"');");};TinyMCE.prototype._themeExecCommand=function(editor_id,element,command,user_interface,value){var themePlugins=tinyMCE.getParam('plugins','',true,',');var templateFunction;for(var i=themePlugins.length;i>=0;i--){templateFunction='TinyMCE_'+themePlugins[i]+"_execCommand";if(eval("typeof("+templateFunction+")")!='undefined'){if(eval(templateFunction+"(editor_id, element, command, user_interface, value);"))return true;}}templateFunction='TinyMCE_'+tinyMCE.settings['theme']+"_execCommand";if(eval("typeof("+templateFunction+")")!='undefined')return eval(templateFunction+"(editor_id, element, command, user_interface, value);");return false;};TinyMCE.prototype._getThemeFunction=function(suffix,skip_plugins){if(skip_plugins)return 'TinyMCE_'+tinyMCE.settings['theme']+suffix;var themePlugins=tinyMCE.getParam('plugins','',true,',');var templateFunction;for(var i=themePlugins.length;i>=0;i--){templateFunction='TinyMCE_'+themePlugins[i]+suffix;if(eval("typeof("+templateFunction+")")!='undefined')return templateFunction;}return 'TinyMCE_'+tinyMCE.settings['theme']+suffix;};TinyMCE.prototype.isFunc=function(func_name){if(func_name==null||func_name=="")return false;return eval("typeof("+func_name+")")!="undefined";};TinyMCE.prototype.exec=function(func_name,args){var str=func_name+'(';for(var i=3;i1&&tinyMCE.currentConfig!=this.settings['index']){tinyMCE.settings=this.settings;tinyMCE.currentConfig=this.settings['index'];}};TinyMCEControl.prototype.fixBrokenURLs=function(){var body=this.getBody();var elms=body.getElementsByTagName("img");for(var i=0;i0)rng.selectNodeContents(nodes[0]);else rng.selectNodeContents(node);}else rng.selectNode(node);if(collapse){if(!to_start&&node.nodeType==3){rng.setStart(node,node.nodeValue.length);rng.setEnd(node,node.nodeValue.length);}else rng.collapse(to_start);}sel.removeAllRanges();sel.addRange(rng);}this.scrollToNode(node);tinyMCE.selectedElement=null;if(node.nodeType==1)tinyMCE.selectedElement=node;};TinyMCEControl.prototype.scrollToNode=function(node){var pos=tinyMCE.getAbsPosition(node);var doc=this.getDoc();var scrollX=doc.body.scrollLeft+doc.documentElement.scrollLeft;var scrollY=doc.body.scrollTop+doc.documentElement.scrollTop;var height=tinyMCE.isMSIE?document.getElementById(this.editorId).style.pixelHeight:this.targetElement.clientHeight;if(!tinyMCE.settings['auto_resize']&&!(node.absTop>scrollY&&node.absTop<(scrollY-25+height)))this.contentWindow.scrollTo(pos.absLeft,pos.absTop-height+25);};TinyMCEControl.prototype.getBody=function(){return this.getDoc().body;};TinyMCEControl.prototype.getDoc=function(){return this.contentWindow.document;};TinyMCEControl.prototype.getWin=function(){return this.contentWindow;};TinyMCEControl.prototype.getSel=function(){if(tinyMCE.isMSIE)return this.getDoc().selection;var sel=this.contentWindow.getSelection();if(tinyMCE.isSafari&&!sel.getRangeAt){var newSel=new Object();var doc=this.getDoc();function getRangeAt(idx){var rng=new Object();rng.startContainer=this.focusNode;rng.endContainer=this.anchorNode;rng.commonAncestorContainer=this.focusNode;rng.createContextualFragment=function(html){if(html.charAt(0)=='<'){var elm=doc.createElement("div");elm.innerHTML=html;return elm.firstChild;}return doc.createTextNode("UNSUPPORTED, DUE TO LIMITATIONS IN SAFARI!");};rng.deleteContents=function(){doc.execCommand("Delete",false,"");};return rng;}newSel.focusNode=sel.baseNode;newSel.focusOffset=sel.baseOffset;newSel.anchorNode=sel.extentNode;newSel.anchorOffset=sel.extentOffset;newSel.getRangeAt=getRangeAt;newSel.text=""+sel;newSel.realSelection=sel;newSel.toString=function(){return this.text;};return newSel;}return sel;};TinyMCEControl.prototype.getRng=function(){var sel=this.getSel();if(sel==null)return null;if(tinyMCE.isMSIE)return sel.createRange();return this.getSel().getRangeAt(0);};TinyMCEControl.prototype._insertPara=function(e){function isEmpty(para){function isEmptyHTML(html){return html.replace(new RegExp('[ \t\r\n]+','g'),'').toLowerCase()=="";}if(para.getElementsByTagName("img").length>0)return false;if(para.getElementsByTagName("table").length>0)return false;if(para.getElementsByTagName("hr").length>0)return false;var nodes=tinyMCE.getNodeTree(para,new Array(),3);for(var i=0;i <"+blockName+"> ";paraAfter=body.childNodes[1];}this.selectNode(paraAfter,true,true);return true;}if(startChop.nodeName==blockName)rngBefore.setStart(startChop,0);else rngBefore.setStartBefore(startChop);rngBefore.setEnd(startNode,startOffset);paraBefore.appendChild(rngBefore.cloneContents());rngAfter.setEndAfter(endChop);rngAfter.setStart(endNode,endOffset);var contents=rngAfter.cloneContents();if(contents.firstChild&&contents.firstChild.nodeName==blockName){var nodes=contents.firstChild.childNodes;for(var i=0;i0)rng.pasteHTML('
'+rng.htmlText+"
");tinyMCE.triggerNodeChange();return;}}}switch(command){case "mceSelectNode":this.selectNode(value);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=value;break;case "FormatBlock":if(value==null||value==""){var elm=tinyMCE.getParentElement(this.getFocusElement(),"p,div,h1,h2,h3,h4,h5,h6,pre,address");if(elm)this.execCommand("mceRemoveNode",false,elm);}else this.getDoc().execCommand("FormatBlock",false,value);tinyMCE.triggerNodeChange();break;case "mceRemoveNode":if(!value)value=tinyMCE.getParentElement(this.getFocusElement());if(tinyMCE.isMSIE){value.outerHTML=value.innerHTML;}else{var rng=value.ownerDocument.createRange();rng.setStartBefore(value);rng.setEndAfter(value);rng.deleteContents();rng.insertNode(rng.createContextualFragment(value.innerHTML));}tinyMCE.triggerNodeChange();break;case "mceSelectNodeDepth":var parentNode=this.getFocusElement();for(var i=0;parentNode;i++){if(parentNode.nodeName.toLowerCase()=="body")break;if(parentNode.nodeName.toLowerCase()=="#text"){i--;parentNode=parentNode.parentNode;continue;}if(i==value){this.selectNode(parentNode,false);tinyMCE.triggerNodeChange();tinyMCE.selectedNode=parentNode;return;}parentNode=parentNode.parentNode;}break;case "HiliteColor":if(tinyMCE.isGecko){this.getDoc().execCommand("useCSS",false,false);this.getDoc().execCommand('hilitecolor',false,value);this.getDoc().execCommand("useCSS",false,true);}else this.getDoc().execCommand('BackColor',false,value);break;case "Cut":case "Copy":case "Paste":var cmdFailed=false;eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}');if(tinyMCE.isGecko&&cmdFailed){if(confirm(tinyMCE.getLang('lang_clipboard_msg')))window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');return;}else tinyMCE.triggerNodeChange();break;case "mceSetContent":if(!value)value="";value=tinyMCE._customCleanup("insert_to_editor",value);tinyMCE._setHTML(doc,value);doc.body.innerHTML=tinyMCE._cleanupHTML(doc,tinyMCE.settings,doc.body);tinyMCE.handleVisualAid(doc.body,true,this.visualAid);return true;case "mceLink":var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text;}else selectedText=this.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return;}var href="",target="",title="",onclick="",action="insert",style_class="";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_onclick');style_class=tinyMCE.getAttrib(tinyMCE.linkElement,'class');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_real_href');if(mceRealHref!="")href=mceRealHref;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");action="update";}if(this.settings['insertlink_callback']){var returnVal=eval(this.settings['insertlink_callback']+"(href, target, title, onclick, action, style_class);");if(returnVal&&returnVal['href'])tinyMCE.insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick'],returnVal['style_class']);}else{tinyMCE.openWindow(this.insertLinkTemplate,{href:href,target:target,title:title,onclick:onclick,action:action,className:style_class});}break;case "mceAttachment":var selectedText="";if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=rng.text;}else selectedText=this.getSel().toString();if(!tinyMCE.linkElement){if((tinyMCE.selectedElement.nodeName.toLowerCase()!="img")&&(selectedText.length<=0))return;}var href="",target="",title="",onclick="",action="insert";if(tinyMCE.selectedElement.nodeName.toLowerCase()=="a")tinyMCE.linkElement=tinyMCE.selectedElement;if(tinyMCE.linkElement!=null&&tinyMCE.getAttrib(tinyMCE.linkElement,'href')=="")tinyMCE.linkElement=null;if(tinyMCE.linkElement){href=tinyMCE.getAttrib(tinyMCE.linkElement,'href');target=tinyMCE.getAttrib(tinyMCE.linkElement,'target');title=tinyMCE.getAttrib(tinyMCE.linkElement,'title');onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_onclick');if(onclick=="")onclick=tinyMCE.getAttrib(tinyMCE.linkElement,'onclick');onclick=tinyMCE.cleanupEventStr(onclick);mceRealHref=tinyMCE.getAttrib(tinyMCE.linkElement,'mce_real_href');if(mceRealHref!="")href=mceRealHref;href=eval(tinyMCE.settings['urlconverter_callback']+"(href, tinyMCE.linkElement, true);");action="update";}if(this.settings['insertlink_callback']){var returnVal=eval(this.settings['insertlink_callback']+"(href, target, title, onclick, action);");if(returnVal&&returnVal['href'])tinyMCE.insertLink(returnVal['href'],returnVal['target'],returnVal['title'],returnVal['onclick']);}else{tinyMCE.openWindow(this.insertAttachmentTemplate,{href:href,target:target,title:title,onclick:onclick,action:action});}break;case "mceImage":var src="",alt="",border="",hspace="",vspace="",width="",height="",align="";var title="",onmouseover="",onmouseout="",action="insert";var img=tinyMCE.imgElement;if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img"){img=tinyMCE.selectedElement;tinyMCE.imgElement=img;}if(img){if(tinyMCE.getAttrib(img,'name').indexOf('mce_')==0)return;src=tinyMCE.getAttrib(img,'src');alt=tinyMCE.getAttrib(img,'alt');if(alt=="")alt=tinyMCE.getAttrib(img,'title');if(tinyMCE.isGecko){var w=img.style.width;if(w!=null&&w!="")img.setAttribute("width",w);var h=img.style.height;if(h!=null&&h!="")img.setAttribute("height",h);}border=tinyMCE.getAttrib(img,'border');hspace=tinyMCE.getAttrib(img,'hspace');vspace=tinyMCE.getAttrib(img,'vspace');width=tinyMCE.getAttrib(img,'width');height=tinyMCE.getAttrib(img,'height');align=tinyMCE.getAttrib(img,'align');onmouseover=tinyMCE.getAttrib(img,'onmouseover');onmouseout=tinyMCE.getAttrib(img,'onmouseout');title=tinyMCE.getAttrib(img,'title');if(tinyMCE.isMSIE){width=img.attributes['width'].specified?width:"";height=img.attributes['height'].specified?height:"";}onmouseover=tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover));onmouseout=tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout));mceRealSrc=tinyMCE.getAttrib(img,'mce_real_src');if(mceRealSrc!="")src=mceRealSrc;src=eval(tinyMCE.settings['urlconverter_callback']+"(src, img, true);");if(onmouseover!="")onmouseover=eval(tinyMCE.settings['urlconverter_callback']+"(onmouseover, img, true);");if(onmouseout!="")onmouseout=eval(tinyMCE.settings['urlconverter_callback']+"(onmouseout, img, true);");action="update";}if(this.settings['insertimage_callback']){var returnVal=eval(this.settings['insertimage_callback']+"(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);");if(returnVal&&returnVal['src'])tinyMCE.insertImage(returnVal['src'],returnVal['alt'],returnVal['border'],returnVal['hspace'],returnVal['vspace'],returnVal['width'],returnVal['height'],returnVal['align'],returnVal['title'],returnVal['onmouseover'],returnVal['onmouseout']);}else tinyMCE.openWindow(this.insertImageTemplate,{src:src,alt:alt,border:border,hspace:hspace,vspace:vspace,width:width,height:height,align:align,title:title,onmouseover:onmouseover,onmouseout:onmouseout,action:action});break;case "mceCleanupWord":if(tinyMCE.isMSIE){var html=this.getBody().createTextRange().htmlText;if(html.indexOf('="mso')!=-1){tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);html=tinyMCE._cleanupHTML(this.contentDocument,this.settings,this.getBody(),this.visualAid);}this.getBody().innerHTML=html;}break;case "mceCleanup":tinyMCE._setHTML(this.contentDocument,this.getBody().innerHTML);this.getBody().innerHTML=tinyMCE._cleanupHTML(this.contentDocument,this.settings,this.getBody(),this.visualAid);tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid);this.repaint();tinyMCE.triggerNodeChange();break;case "mceAnchor":if(!user_interface){var aElm=tinyMCE.getParentElement(this.getFocusElement(),"a","name");if(aElm){if(value==null||value==""){if(tinyMCE.isMSIE){aElm.outerHTML=aElm.innerHTML;}else{var rng=aElm.ownerDocument.createRange();rng.setStartBefore(aElm);rng.setEndAfter(aElm);rng.deleteContents();rng.insertNode(rng.createContextualFragment(aElm.innerHTML));}}else aElm.setAttribute('name',value);}else{this.getDoc().execCommand("fontname",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(var x=0;x0){value=tinyMCE.replaceVar(value,"selection",selectedText);tinyMCE.execCommand('mceInsertContent',false,value);}tinyMCE.triggerNodeChange();break;case "mceSetAttribute":if(typeof(value)=='object'){var targetElms=(typeof(value['targets'])=="undefined")?"p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address":value['targets'];var targetNode=tinyMCE.getParentElement(this.getFocusElement(),targetElms);if(targetNode){targetNode.setAttribute(value['name'],value['value']);tinyMCE.triggerNodeChange();}}break;case "mceSetCSSClass":var selectedText=false;if(tinyMCE.isMSIE){var rng=doc.selection.createRange();selectedText=(rng.text&&rng.text.length>0);}else selectedText=(this.getSel().toString().length>0);if(tinyMCE.selectedNode)tinyMCE.selectedElement=tinyMCE.selectedNode;if(selectedText&&!tinyMCE.selectedNode){this.getDoc().execCommand("RemoveFormat",false,null);if(value==null)return this.execCommand("RemoveFormat",false,null);this.getDoc().execCommand("fontname",false,"#mce_temp_font#");var elementArray=tinyMCE.getElementsByAttributeValue(this.getBody(),"font","face","#mce_temp_font#");for(var x=0;xcustomUndoLevels){for(var i=0;i0){this.undoIndex--;this.getBody().innerHTML=this.undoLevels[this.undoIndex];}tinyMCE.triggerNodeChange();}else this.getDoc().execCommand(command,user_interface,value);break;case "Redo":if(tinyMCE.settings['custom_undo_redo']){if(this.undoIndex<(this.undoLevels.length-1)){this.undoIndex++;this.getBody().innerHTML=this.undoLevels[this.undoIndex];}tinyMCE.triggerNodeChange();}else this.getDoc().execCommand(command,user_interface,value);break;case "mceToggleVisualAid":this.visualAid=!this.visualAid;tinyMCE.handleVisualAid(this.getBody(),true,this.visualAid);tinyMCE.triggerNodeChange();break;case "removeformat":var text=this.getSelectedText();if(tinyMCE.isMSIE){try{win.focus();var rng=doc.selection.createRange();rng.execCommand("RemoveFormat",false,null);rng.pasteHTML(rng.text);}catch(e){}}else this.getDoc().execCommand(command,user_interface,value);if(text.length==0)this.execCommand("mceSetCSSClass",false,"");tinyMCE.triggerNodeChange();break;default:this.getDoc().execCommand(command,user_interface,value);tinyMCE.triggerNodeChange();}};TinyMCEControl.prototype.queryCommandValue=function(command){return this.getDoc().queryCommandValue(command);};TinyMCEControl.prototype.queryCommandState=function(command){return this.getDoc().queryCommandState(command);};TinyMCEControl.prototype.onAdd=function(replace_element,form_element_name,target_document){var targetDoc=target_document?target_document:document;this.targetDoc=targetDoc;tinyMCE.themeURL=tinyMCE.baseURL+"/themes/"+this.settings['theme'];this.settings['themeurl']=tinyMCE.themeURL;if(!replace_element){alert("Error: Could not find the target element.");return false;}var templateFunction=tinyMCE._getThemeFunction('_getInsertLinkTemplate');if(eval("typeof("+templateFunction+")")!='undefined')this.insertLinkTemplate=eval(templateFunction+'(this.settings);');var templateFunction=tinyMCE._getThemeFunction('_getInsertAttachmentTemplate');if(eval("typeof("+templateFunction+")")!='undefined')this.insertAttachmentTemplate=eval(templateFunction+'(this.settings);');var templateFunction=tinyMCE._getThemeFunction('_getInsertImageTemplate');if(eval("typeof("+templateFunction+")")!='undefined')this.insertImageTemplate=eval(templateFunction+'(this.settings);');var templateFunction=tinyMCE._getThemeFunction('_getEditorTemplate');if(eval("typeof("+templateFunction+")")=='undefined'){alert("Error: Could not find the template function: "+templateFunction);return false;}var editorTemplate=eval(templateFunction+'(this.settings, this.editorId);');var deltaWidth=editorTemplate['delta_width']?editorTemplate['delta_width']:0;var deltaHeight=editorTemplate['delta_height']?editorTemplate['delta_height']:0;var html=''+editorTemplate['html'];var templateFunction=tinyMCE._getThemeFunction('_handleNodeChange',true);if(eval("typeof("+templateFunction+")")!='undefined')this.settings['handleNodeChangeCallback']=templateFunction;html=tinyMCE.replaceVar(html,"editor_id",this.editorId);html=tinyMCE.replaceVar(html,"default_document",tinyMCE.baseURL+"/blank.htm");this.settings['default_document']=tinyMCE.baseURL+"/blank.htm";this.settings['old_width']=this.settings['width'];this.settings['old_height']=this.settings['height'];if(this.settings['width']==-1)this.settings['width']=replace_element.offsetWidth;if(this.settings['height']==-1)this.settings['height']=replace_element.offsetHeight;if(this.settings['width']==0)this.settings['width']=replace_element.style.width;if(this.settings['height']==0)this.settings['height']=replace_element.style.height;if(this.settings['width']==0)this.settings['width']=320;if(this.settings['height']==0)this.settings['height']=240;this.settings['area_width']=parseInt(this.settings['width']);this.settings['area_height']=parseInt(this.settings['height']);this.settings['area_width']+=deltaWidth;this.settings['area_height']+=deltaHeight;if((""+this.settings['width']).indexOf('%')!=-1)this.settings['area_width']="100%";if((""+this.settings['height']).indexOf('%')!=-1)this.settings['area_height']="100%";if((""+replace_element.style.width).indexOf('%')!=-1){this.settings['width']=replace_element.style.width;this.settings['area_width']="100%";}if((""+replace_element.style.height).indexOf('%')!=-1){this.settings['height']=replace_element.style.height;this.settings['area_height']="100%";}html=tinyMCE.applyTemplate(html);this.settings['width']=this.settings['old_width'];this.settings['height']=this.settings['old_height'];this.visualAid=this.settings['visual'];this.formTargetElementId=form_element_name;if(replace_element.nodeName.toLowerCase()=="textarea")this.startContent=replace_element.value;else this.startContent=replace_element.innerHTML;if(replace_element.nodeName.toLowerCase()!="textarea"){this.oldTargetElement=replace_element.cloneNode(true);if(tinyMCE.settings['debug'])html+='';else html+='';html+='';if(!tinyMCE.isMSIE){var rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);var fragment=rng.createContextualFragment(html);replace_element.parentNode.replaceChild(fragment,replace_element);}else replace_element.outerHTML=html;}else{html+='';this.oldTargetElement=replace_element;if(!tinyMCE.settings['debug'])this.oldTargetElement.style.display="none";if(!tinyMCE.isMSIE){var rng=replace_element.ownerDocument.createRange();rng.setStartBefore(replace_element);var fragment=rng.createContextualFragment(html);replace_element.parentNode.insertBefore(fragment,replace_element);}else replace_element.insertAdjacentHTML("beforeBegin",html);}var dynamicIFrame=false;var tElm=targetDoc.getElementById(this.editorId);if(!tinyMCE.isMSIE){if(tElm&&tElm.nodeName.toLowerCase()=="span"){tElm=tinyMCE._createIFrame(tElm);dynamicIFrame=true;}this.targetElement=tElm;this.iframeElement=tElm;this.contentDocument=tElm.contentDocument;this.contentWindow=tElm.contentWindow;}else{if(tElm&&tElm.nodeName.toLowerCase()=="span")tElm=tinyMCE._createIFrame(tElm);else tElm=targetDoc.frames[this.editorId];this.targetElement=tElm;this.iframeElement=targetDoc.getElementById(this.editorId);this.contentDocument=tElm.window.document;this.contentWindow=tElm.window;this.getDoc().designMode="on";}var doc=this.contentDocument;if(dynamicIFrame){var html=""+''+''+''+''+'blank_page'+''+''+''+''+'';try{this.getDoc().designMode="on";doc.open();doc.write(html);doc.close();}catch(e){this.getDoc().location.href=tinyMCE.baseURL+"/blank.htm";}}if(tinyMCE.isMSIE)window.setTimeout("TinyMCE.prototype.addEventHandlers('"+this.editorId+"');",1);tinyMCE.setupContent(this.editorId,true);return true;};TinyMCEControl.prototype.getFocusElement=function(){if(tinyMCE.isMSIE){var doc=this.getDoc();var rng=doc.selection.createRange();if(rng.collapse)rng.collapse(true);var elm=rng.item?rng.item(0):rng.parentElement();}else{var sel=this.getSel();var elm=(sel&&sel.anchorNode)?sel.anchorNode:null;if(tinyMCE.selectedElement!=null&&tinyMCE.selectedElement.nodeName.toLowerCase()=="img")elm=tinyMCE.selectedElement;}return elm;};var tinyMCE=new TinyMCE();var tinyMCELang=new Array();function debug(){var msg="";var elm=document.getElementById("tinymce_debug");if(!elm){var debugDiv=document.createElement("div");debugDiv.setAttribute("className","debugger");debugDiv.className="debugger";debugDiv.innerHTML='\ - Debug output:\ - ';document.body.appendChild(debugDiv);elm=document.getElementById("tinymce_debug");}var args=this.debug.arguments;for(var i=0;i - -var TinyMCECompressed_settings = null; - -function TinyMCECompressed() { -} - -TinyMCECompressed.prototype.init = function(settings) { - var elements = document.getElementsByTagName('script'); - var scriptURL = ""; - - for (var i=0; i'); - - TinyMCECompressed_settings = settings; -} - -var tinyMCE = new TinyMCECompressed(); diff --git a/public/tiny_mce/tiny_mce_popup.js b/public/tiny_mce/tiny_mce_popup.js deleted file mode 100644 index 8b03e50..0000000 --- a/public/tiny_mce/tiny_mce_popup.js +++ /dev/null @@ -1,96 +0,0 @@ -// Get tinyMCE window -var win = window.opener ? window.opener : window.dialogArguments; - -var tinyMCE = null; -var tinyMCELang = null; - -// Use top window if not defined -if (!win) - win = top; - -var tinyMCE = win.tinyMCE; -var tinyMCELang = win.tinyMCELang; - -if (!tinyMCE) - alert("tinyMCE object reference not found from popup."); - -// Setup window openerer -window.opener = win; - -// Setup title -var re = new RegExp('{|\\\$|}', 'g'); -var title = document.title.replace(re, ""); -if (typeof tinyMCELang[title] != "undefined") { - var divElm = document.createElement("div"); - divElm.innerHTML = tinyMCELang[title]; - document.title = divElm.innerHTML; -} - -// Setup dir -if (tinyMCELang['lang_dir']) - document.dir = tinyMCELang['lang_dir']; - -function TinyMCEPlugin_onLoad() { - if (tinyMCE.getWindowArg('mce_replacevariables', true)) - document.body.innerHTML = tinyMCE.applyTemplate(document.body.innerHTML, tinyMCE.windowArgs); - - // Auto resize window - if (tinyMCE.getWindowArg('mce_windowresize', true)) - TinyMCEPopup_autoResize(); - - if (tinyMCE.settings["dialog_type"] == "window") - window.focus(); -} - -function TinyMCEPopup_autoResize() { - // Div mode, skip resize - if (tinyMCE.settings["dialog_type"] == "div") - return; - - var isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - var isOpera = (navigator.userAgent.indexOf("Opera") != -1); - - if (isOpera) - return; - - if (isMSIE) { - try { window.resizeTo(10, 10); } catch (e) {} - - var elm = document.body; - var width = elm.offsetWidth; - var height = elm.offsetHeight; - var dx = (elm.scrollWidth - width) + 4; - var dy = elm.scrollHeight - height; - - try { window.resizeBy(dx, dy); } catch (e) {} - } else { - window.scrollBy(1000, 1000); - if (window.scrollX > 0 || window.scrollY > 0) { - window.resizeBy(window.innerWidth * 2, window.innerHeight * 2); - window.sizeToContent(); - window.scrollTo(0, 0); - var x = parseInt(screen.width / 2.0) - (window.outerWidth / 2.0); - var y = parseInt(screen.height / 2.0) - (window.outerHeight / 2.0); - window.moveTo(x, y); - } - } -} - -// Re-patch it -if (tinyMCE.settings["dialog_type"] == "window") { - tinyMCE.closeDialog = function() { - // Remove div or close window - if (tinyMCE.settings["dialog_type"] == "div") { - var div = document.getElementById(tinyMCE._currentDialog); - if (div) - div.parentNode.removeChild(div); - } else - window.close(); - }; -} - -// Add onload trigger -tinyMCE.addEvent(window, "load", TinyMCEPlugin_onLoad); - -// Output Popup CSS class -document.write(''); diff --git a/public/tiny_mce/tiny_mce_src.js b/public/tiny_mce/tiny_mce_src.js deleted file mode 100644 index 25fa0d3..0000000 --- a/public/tiny_mce/tiny_mce_src.js +++ /dev/null @@ -1,4884 +0,0 @@ -/** - * $RCSfile: tiny_mce_src.js,v $ - * $Revision: 1.210 $ - * $Date: 2005/06/15 09:05:32 $ - * - * @author Moxiecode - * @copyright Copyright © 2004, Moxiecode Systems AB, All rights reserved. - */ - -function TinyMCE() { - this.instances = new Array(); - this.stickyClassesLookup = new Array(); - this.windowArgs = new Array(); - this.loadedFiles = new Array(); - this.configs = new Array(); - this.currentConfig = 0; - this.eventHandlers = new Array(); - - // Browser check - this.isMSIE = (navigator.appName == "Microsoft Internet Explorer"); - this.isMSIE5 = this.isMSIE && (navigator.userAgent.indexOf('MSIE 5') != -1); - this.isMSIE5_0 = this.isMSIE && (navigator.userAgent.indexOf('MSIE 5.0') != -1); - this.isGecko = navigator.userAgent.indexOf('Gecko') != -1; - this.isSafari = navigator.userAgent.indexOf('Safari') != -1; - this.isMac = navigator.userAgent.indexOf('Mac') != -1; - this.dialogCounter = 0; - - // TinyMCE editor id instance counter - this.idCounter = 0; -}; - -TinyMCE.prototype.defParam = function(key, def_val) { - this.settings[key] = tinyMCE.getParam(key, def_val); -}; - -TinyMCE.prototype.init = function(settings) { - var theme; - - this.settings = settings; - - // Check if valid browser has execcommand support - if (typeof(document.execCommand) == 'undefined') - return; - - // Get script base path - if (!tinyMCE.baseURL) { - var elements = document.getElementsByTagName('script'); - - for (var i=0; i'); - - this.loadedFiles[this.loadedFiles.length] = url; -}; - -TinyMCE.prototype.loadCSS = function(url) { - for (var i=0; i'); - - this.loadedFiles[this.loadedFiles.length] = url; -}; - -TinyMCE.prototype.importCSS = function(doc, css_file) { - if (tinyMCE.isMSIE) - var styleSheet = doc.createStyleSheet(css_file); - else { - var elm = doc.createElement("link"); - - elm.rel = "stylesheet"; - elm.href = css_file; - - if (headArr = doc.getElementsByTagName("head")) - headArr[0].appendChild(elm); - } -}; - -TinyMCE.prototype.confirmAdd = function(e, settings) { - var elm = tinyMCE.isMSIE ? event.srcElement : e.target; - var elementId = elm.name ? elm.name : elm.id; - - tinyMCE.settings = settings; - - if (!elm.getAttribute('mce_noask') && confirm(tinyMCELang['lang_edit_confirm'])) - tinyMCE.addMCEControl(elm, elementId); - - elm.setAttribute('mce_noask', 'true'); -}; - -TinyMCE.prototype.updateContent = function(form_element_name) { - // Find MCE instance linked to given form element and copy it's value - var formElement = document.getElementById(form_element_name); - for (var n in tinyMCE.instances) { - var inst = tinyMCE.instances[n]; - if (typeof(inst) == "function") continue; - inst.switchSettings(); - - if (inst.formElement == formElement) { - var doc = inst.getDoc(); - - tinyMCE._setHTML(doc, inst.formElement.value); - - if (!tinyMCE.isMSIE) - doc.body.innerHTML = tinyMCE._cleanupHTML(doc, this.settings, doc.body, inst.visualAid); - } - } -}; - -TinyMCE.prototype.addMCEControl = function(replace_element, form_element_name, target_document) { - var id = "mce_editor_" + tinyMCE.idCounter++; - var inst = new TinyMCEControl(tinyMCE.settings); - - inst.editorId = id; - this.instances[id] = inst; - - inst.onAdd(replace_element, form_element_name, target_document); -}; - -TinyMCE.prototype.triggerSave = function(skip_cleanup, skip_callback) { - // Cleanup and set all form fields - for (var n in tinyMCE.instances) { - var inst = tinyMCE.instances[n]; - if (typeof(inst) == "function") continue; - inst.switchSettings(); - - tinyMCE.settings['preformatted'] = false; - - // Default to false - if (typeof(skip_cleanup) == "undefined") - skip_cleanup = false; - - // Default to false - if (typeof(skip_callback) == "undefined") - skip_callback = false; - - tinyMCE._setHTML(inst.getDoc(), inst.getBody().innerHTML); - - var htm = skip_cleanup ? inst.getBody().innerHTML : tinyMCE._cleanupHTML(inst.getDoc(), this.settings, inst.getBody(), this.visualAid, true); - - //var htm = tinyMCE._cleanupHTML(inst.getDoc(), tinyMCE.settings, inst.getBody(), false, true); - - if (tinyMCE.settings["encoding"] == "xml" || tinyMCE.settings["encoding"] == "html") - htm = tinyMCE.convertStringToXML(htm); - - if (!skip_callback && tinyMCE.settings['save_callback'] != "") - var content = eval(tinyMCE.settings['save_callback'] + "(inst.formTargetElementId,htm,inst.getBody());"); - - // Use callback content if available - if ((typeof(content) != "undefined") && content != null) - htm = content; - - // Replace some weird entities (Bug: #1056343) - htm = tinyMCE.regexpReplace(htm, "(", "(", "gi"); - htm = tinyMCE.regexpReplace(htm, ")", ")", "gi"); - htm = tinyMCE.regexpReplace(htm, ";", ";", "gi"); - htm = tinyMCE.regexpReplace(htm, """, """, "gi"); - htm = tinyMCE.regexpReplace(htm, "^", "^", "gi"); - - if (inst.formElement) - inst.formElement.value = htm; - } -}; - -TinyMCE.prototype._convertOnClick = function(node) { - // Skip on MSIE < 6+ - if (tinyMCE.isMSIE5) - return; - - // Convert all onclick to mce_onclick - var elms = node.getElementsByTagName("a"); - for (var i=0; i", "gi"); - content = tinyMCE.regexpReplace(content, "\r", "
", "gi"); - content = tinyMCE.regexpReplace(content, "\n", "
", "gi"); - } - - // Call custom cleanup code - content = tinyMCE._customCleanup("insert_to_editor", content); - - if (tinyMCE.isMSIE) { - // Ugly!!! - window.setInterval('try{tinyMCE.getCSSClasses(document.frames["' + editor_id + '"].document, "' + editor_id + '");}catch(e){}', 500); - - if (tinyMCE.settings["force_br_newlines"]) - document.frames[editor_id].document.styleSheets[0].addRule("p", "margin: 0px;"); - - var body = document.frames[editor_id].document.body; - - tinyMCE.addEvent(body, "beforepaste", TinyMCE.prototype.eventPatch); - tinyMCE.addEvent(body, "beforecut", TinyMCE.prototype.eventPatch); - tinyMCE.addEvent(body, "paste", TinyMCE.prototype.eventPatch); - - body.editorId = editor_id; - } - - // Fix for bug #958637 - if (!tinyMCE.isMSIE) { - var contentElement = inst.getDoc().createElement("body"); - var doc = inst.getDoc(); - - contentElement.innerHTML = content; - - // Remove weridness! - if (tinyMCE.settings['force_p_newlines']) - content = content.replace(new RegExp('<>', 'g'), ""); - - if (tinyMCE.settings['cleanup_on_startup']) - inst.getBody().innerHTML = tinyMCE._cleanupHTML(doc, this.settings, contentElement); - else { - // Convert all strong/em to b/i - content = tinyMCE.regexpReplace(content, "", "", "gi"); - content = tinyMCE.regexpReplace(content, "", "", "gi"); - inst.getBody().innerHTML = content; - } - - inst.convertAllRelativeURLs(); - } else { - if (tinyMCE.settings['cleanup_on_startup']) { - tinyMCE._setHTML(inst.getDoc(), content); - // Produces permission denied error in MSIE 5.5 - eval('try {inst.getBody().innerHTML = tinyMCE._cleanupHTML(inst.contentDocument, this.settings, inst.getBody());} catch(e) {}'); - } else - inst.getBody().innerHTML = content; - } - - tinyMCE._convertOnClick(inst.getBody()); - - // Fix for bug #957681 - //inst.getDoc().designMode = inst.getDoc().designMode; - - // Setup element references - var parentElm = document.getElementById(inst.editorId + '_parent'); - if (parentElm.lastChild.nodeName.toLowerCase() == "input") - inst.formElement = parentElm.lastChild; - else - inst.formElement = parentElm.nextSibling; - - tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual']); - tinyMCE.executeCallback('setupcontent_callback', '_setupContent', 0, editor_id, inst.getBody(), inst.getDoc()); - - // Re-add design mode on mozilla - if (!tinyMCE.isMSIE) - TinyMCE.prototype.addEventHandlers(editor_id); - - inst.startContent = inst.getBody().innerHTML; - - // Trigger node change, this call locks buttons for tables and so forth - tinyMCE.selectedInstance = inst; - tinyMCE.selectedElement = inst.contentWindow.document.body; - tinyMCE.triggerNodeChange(false, true); - - // Call custom DOM cleanup - tinyMCE._customCleanup("insert_to_editor_dom", inst.contentWindow.document.body); -}; - -TinyMCE.prototype.cancelEvent = function(e) { - if (tinyMCE.isMSIE) { - e.returnValue = false; - e.cancelBubble = true; - } else - e.preventDefault(); -}; - -TinyMCE.prototype.removeTinyMCEFormElements = function(form_obj) { - // Disable all UI form elements that TinyMCE created - for (var i=0; i"); - rng.collapse(false); - rng.select(); - - tinyMCE.triggerNodeChange(false); - return false; - } - } - - // Backspace or delete - if (e.keyCode == 8 || e.keyCode == 46) { - tinyMCE.selectedElement = e.target; - tinyMCE.linkElement = tinyMCE.getParentElement(e.target, "a"); - tinyMCE.imgElement = tinyMCE.getParentElement(e.target, "img"); - tinyMCE.triggerNodeChange(false); - } - - return false; - break; - - case "keyup": - case "keydown": - if (e.target.editorId) - tinyMCE.selectedInstance = tinyMCE.instances[e.target.editorId]; - else - return; - - if (tinyMCE.selectedInstance) - tinyMCE.selectedInstance.switchSettings(); - - // Handle backspace - if (tinyMCE.isGecko && tinyMCE.settings['force_p_newlines'] && (e.keyCode == 8 || e.keyCode == 46) && !e.shiftKey) { - // Insert P element instead of BR - if (tinyMCE.selectedInstance._handleBackSpace(e.type)) { - // Cancel event - e.preventDefault(); - return false; - } - } - - tinyMCE.selectedElement = null; - tinyMCE.selectedNode = null; - var elm = tinyMCE.selectedInstance.getFocusElement(); - tinyMCE.linkElement = tinyMCE.getParentElement(elm, "a"); - tinyMCE.imgElement = tinyMCE.getParentElement(elm, "img"); - tinyMCE.selectedElement = elm; - - // Update visualaids on tabs - if (tinyMCE.isGecko && e.type == "keyup" && e.keyCode == 9) - tinyMCE.handleVisualAid(tinyMCE.selectedInstance.getBody(), true, tinyMCE.settings['visual']); - - // Run image/link fix on Gecko if diffrent document base on paste - if (tinyMCE.isGecko && tinyMCE.settings['document_base_url'] != "" + document.location.href && e.type == "keyup" && e.ctrlKey && e.keyCode == 86) - tinyMCE.selectedInstance.fixBrokenURLs(); - - // Insert space instead of   -/* if (e.type == "keydown" && e.keyCode == 32) { - if (tinyMCE.selectedInstance._insertSpace()) { - // Cancel event - e.returnValue = false; - e.cancelBubble = true; - return false; - } - }*/ - - // MSIE custom key handling - if (tinyMCE.isMSIE && tinyMCE.settings['custom_undo_redo']) { - // Check if it's a position key press - var keys = new Array(13,45,36,35,33,34,37,38,39,40); - var posKey = false; - for (var i=0; i 18 && e.keyCode != 255)) { - tinyMCE.selectedInstance.execCommand("mceAddUndoLevel"); - tinyMCE.selectedInstance.typing = true; - tinyMCE.triggerNodeChange(false); - } - - if (posKey && e.type == "keyup") - tinyMCE.triggerNodeChange(false); - - var keys = new Array(8,46); // Backspace,Delete - for (var i=0; i 0) { - for (var i=0; i" + this.convertStringToXML(String.fromCharCode(160)) + ""; - - // Is MSIE script element - if (tinyMCE.isMSIE && elementName == "script") - return "<" + elementName + elementAttribs + ">" + node.text + ""; - - // Clean up children - if (node.hasChildNodes()) { - // Force BR - if (elementName == "p" && tinyMCE.cleanup_force_br_newlines) - output += ""; - else - output += "<" + elementName + elementAttribs + ">"; - - for (var i=0; i"; - } else { - // Allways leave anchor elements open - if (openTag) - output += "<" + elementName + elementAttribs + ">"; - else { - // No children - output += "<" + elementName + elementAttribs + " />"; - } - } - - return output; - - case 3: // Text - // Do not convert script elements - if (node.parentNode.nodeName.toLowerCase() == "script") - return node.nodeValue; - - return this.convertStringToXML(node.nodeValue); - - case 8: // Comment - return ""; - - default: // Unknown - return "[UNKNOWN NODETYPE " + node.nodeType + "]"; - } -}; - -TinyMCE.prototype.convertStringToXML = function(html_data) { - var output = ""; - - for (var i=0; i 127) - output += '&#' + chr + ";"; - else - output += String.fromCharCode(chr); - - continue; - } - - // Raw entities - if (tinyMCE.settings['entity_encoding'] == "raw") { - output += String.fromCharCode(chr); - continue; - } - - // Named entities - if (typeof(tinyMCE.cleanup_entities["c" + chr]) != 'undefined' && tinyMCE.cleanup_entities["c" + chr] != '') - output += '&' + tinyMCE.cleanup_entities["c" + chr] + ';'; - else - output += '' + String.fromCharCode(chr); - } - - return output; -}; - -TinyMCE.prototype._getCleanupElementName = function(chunk) { - var pos; - - if (chunk.charAt(0) == '+') - chunk = chunk.substring(1); - - if ((pos = chunk.indexOf('/')) != -1) - chunk = chunk.substring(0, pos); - - if ((pos = chunk.indexOf('[')) != -1) - chunk = chunk.substring(0, pos); - - return chunk; -}; - -TinyMCE.prototype._initCleanup = function() { - // Parse valid elements and attributes - var validElements = tinyMCE.settings["valid_elements"]; - validElements = validElements.split(','); - - // Handle extended valid elements - var extendedValidElements = tinyMCE.settings["extended_valid_elements"]; - extendedValidElements = extendedValidElements.split(','); - for (var i=0; i[ \n\r]*
[ \n\r]*

', '
', 'gi'); - element.innerHTML = tinyMCE.regexpReplace(element.innerHTML, '', '', 'gi'); - } - - var html = this.cleanupNode(element); - - if (tinyMCE.settings['debug']) - alert("Cleanup process executed in: " + (new Date().getTime()-startTime) + " ms."); - - // Remove pesky HR paragraphs - html = tinyMCE.regexpReplace(html, '


', '
'); - html = tinyMCE.regexpReplace(html, '

 


 

', '
'); - - // Remove some mozilla crap - if (!tinyMCE.isMSIE) - html = html.replace(new RegExp('', 'g'), ""); - - if (tinyMCE.settings['apply_source_formatting']) { - html = html.replace(new RegExp('<(p|div)([^>]*)>', 'g'), "\n<$1$2>\n"); - html = html.replace(new RegExp('<\/(p|div)([^>]*)>', 'g'), "\n\n"); - html = html.replace(new RegExp('
', 'g'), "
\n"); - } - - if (tinyMCE.settings['force_br_newlines']) { - var re = new RegExp('

 

', 'g'); - html = html.replace(re, "
"); - } - - if (tinyMCE.settings['force_p_newlines']) { - // Remove weridness! - var re = new RegExp('<>', 'g'); - html = html.replace(re, ""); - } - - if (tinyMCE.settings['remove_linebreaks']) - html = html.replace(new RegExp('\r|\n', 'g'), ' '); - - // Call custom cleanup code - html = tinyMCE._customCleanup(on_save ? "get_from_editor" : "insert_to_editor", html); - - // Emtpy node, return empty - var chk = tinyMCE.regexpReplace(html, "[ \t\r\n]", ""); - if (chk == "
" || chk == "
" || chk == "

 

" || chk == "

 

" || chk == "

") - html = ""; - - if (tinyMCE.settings["preformatted"]) - return "
" + html + "
"; - - return html; -}; - -TinyMCE.prototype.setAttrib = function(element, name, value, no_fix_value) { - if (!no_fix_value && value != null) { - var re = new RegExp('[^0-9%]', 'g'); - value = value.replace(re, ''); - } - - if (value != null && value != "") - element.setAttribute(name, value); - else - element.removeAttribute(name); - - if (value != null && value != "") - element.setAttribute(name, value); - else - element.removeAttribute(name); -}; - -TinyMCE.prototype.insertLink = function(href, target, title, onclick, style_class) { - this.execCommand("mceAddUndoLevel"); - - if (this.selectedInstance && this.selectedElement && this.selectedElement.nodeName.toLowerCase() == "img") { - var doc = this.selectedInstance.getDoc(); - var linkElement = tinyMCE.getParentElement(this.selectedElement, "a"); - var newLink = false; - - if (!linkElement) { - linkElement = doc.createElement("a"); - newLink = true; - } - - href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, linkElement);"); - tinyMCE.setAttrib(linkElement, 'href', href); - tinyMCE.setAttrib(linkElement, 'target', target); - tinyMCE.setAttrib(linkElement, 'title', title); - tinyMCE.setAttrib(linkElement, 'mce_onclick', onclick); - tinyMCE.setAttrib(linkElement, 'class', style_class); - - if (newLink) { - linkElement.appendChild(this.selectedElement.cloneNode(true)); - this.selectedElement.parentNode.replaceChild(linkElement, this.selectedElement); - } - - return; - } - - if (!this.linkElement && this.selectedInstance) { - this.selectedInstance.contentDocument.execCommand("createlink", false, "#mce_temp_url#"); - tinyMCE.linkElement = this.getElementByAttributeValue(this.selectedInstance.contentDocument.body, "a", "href", "#mce_temp_url#"); - - var elementArray = this.getElementsByAttributeValue(this.selectedInstance.contentDocument.body, "a", "href", "#mce_temp_url#"); - - for (var i=0; i= strTok2.length) { - for (var i=0; i= strTok2.length || strTok1[i] != strTok2[i]) { - breakPoint = i + 1; - break; - } - } - } - - if (strTok1.length < strTok2.length) { - for (var i=0; i= strTok1.length || strTok1[i] != strTok2[i]) { - breakPoint = i + 1; - break; - } - } - } - - if (breakPoint == 1) - return url_to_relative; - - for (var i=0; i<(strTok1.length-(breakPoint-1)); i++) - outputString += "../"; - - for (var i=breakPoint-1; i=0; i--) { - if (baseURLParts[i].length == 0) - continue; - - newBaseURLParts[newBaseURLParts.length] = baseURLParts[i]; - } - baseURLParts = newBaseURLParts.reverse(); - - // Merge relURLParts chunks - var newRelURLParts = new Array(); - var numBack = 0; - for (var i=relURLParts.length-1; i>=0; i--) { - if (relURLParts[i].length == 0 || relURLParts[i] == ".") - continue; - - if (relURLParts[i] == '..') { - numBack++; - continue; - } - - if (numBack > 0) { - numBack--; - continue; - } - - newRelURLParts[newRelURLParts.length] = relURLParts[i]; - } - - relURLParts = newRelURLParts.reverse(); - - // Remove end from absolute path - var len = baseURLParts.length-numBack; - var absPath = (len <= 0 ? "" : "/") + baseURLParts.slice(0, len).join('/') + "/" + relURLParts.join('/'); - var start = "", end = ""; - - // Build start part - if (baseURL['protocol']) - start += baseURL['protocol'] + "://"; - - if (baseURL['host']) - start += baseURL['host']; - - if (baseURL['port']) - start += ":" + baseURL['port']; - - // Build end part - if (relURL['query']) - end += "?" + relURL['query']; - - if (relURL['anchor']) - end += "#" + relURL['anchor']; - - // Re-add trailing slash if it's removed - if (relative_url.charAt(relative_url.length-1) == "/") - end += "/"; - - return start + absPath + end; -}; - -TinyMCE.prototype.getParam = function(name, default_value, strip_whitespace, split_chr) { - var value = (typeof(this.settings[name]) == "undefined") ? default_value : this.settings[name]; - - // Fix bool values - if (value == "true" || value == "false") - return (value == "true"); - - if (strip_whitespace) - value = tinyMCE.regexpReplace(value, "[ \t\r\n]", ""); - - if (typeof(split_chr) != "undefined" && split_chr != null) { - value = value.split(split_chr); - var outArray = new Array(); - - for (var i=0; i 0); - - if (tinyMCE.settings['custom_undo_redo']) { - undoIndex = inst.undoIndex; - undoLevels = inst.undoLevels.length; - } - - tinyMCE.executeCallback('handleNodeChangeCallback', '_handleNodeChange', 0, editorId, elm, undoIndex, undoLevels, inst.visualAid, anySelection); - } - } - - if (this.selectedInstance && (typeof(focus) == "undefined" || focus)) - this.selectedInstance.contentWindow.focus(); -}; - -TinyMCE.prototype._customCleanup = function(type, content) { - // Call custom cleanup - var customCleanup = tinyMCE.settings['cleanup_callback']; - if (customCleanup != "" && eval("typeof(" + customCleanup + ")") != "undefined") - content = eval(customCleanup + "(type, content);"); - - // Trigger plugin cleanups - var plugins = tinyMCE.getParam('plugins', '', true, ','); - for (var i=0; i
'; - - div.innerHTML = html; - - document.body.appendChild(div); - - tinyMCE._currentDialog = id; - } - /*}*/ - } -}; - -TinyMCE.prototype.closeDialog = function() { - // Remove div or close window - if (tinyMCE.settings["dialog_type"] == "div") { - var div = document.getElementById(tinyMCE._currentDialog); - if (div) - div.parentNode.removeChild(div); - } else - window.close(); -}; - -TinyMCE.prototype.getVisualAidClass = function(class_name, state) { - var aidClass = tinyMCE.settings['visual_table_class']; - - if (typeof(state) == "undefined") - state = tinyMCE.settings['visual']; - - // Split - var classNames = new Array(); - var ar = class_name.split(' '); - for (var i=0; i 0) - className += " "; - - className += classNames[i]; - } - - return className; -}; - -TinyMCE.prototype.handleVisualAid = function(element, deep, state) { - if (!element) - return; - - var tableElement = null; - - switch (element.nodeName.toLowerCase()) { - case "table": - var oldW = element.style.width; - var oldH = element.style.height; - - element.className = tinyMCE.getVisualAidClass(element.className, state && element.getAttribute("border") == 0); - - element.style.width = oldW; - element.style.height = oldH; - - for (var y=0; y'; - return; - } - - break;*/ - } - - if (deep && element.hasChildNodes()) { - for (var i=0; i

breaks runtime? - if (tinyMCE.isMSIE) { - var re = new RegExp('


', 'g'); - html_content = html_content.replace(re, "
"); - } - - doc.body.innerHTML = html_content; - - // Content duplication bug fix - if (tinyMCE.isMSIE && tinyMCE.settings['fix_content_duplication']) { - // Remove P elements in P elements - var paras = doc.getElementsByTagName("P"); - for (var i=0; i<\/o:p>", "
"); - html = tinyMCE.regexpReplace(html, " <\/o:p>", ""); - html = tinyMCE.regexpReplace(html, "", ""); - html = tinyMCE.regexpReplace(html, "

<\/p>", ""); - html = tinyMCE.regexpReplace(html, "

<\/p>\r\n

<\/p>", ""); - html = tinyMCE.regexpReplace(html, "

 <\/p>", "
"); - html = tinyMCE.regexpReplace(html, "

\s*(

\s*)?", "

"); - html = tinyMCE.regexpReplace(html, "<\/p>\s*(<\/p>\s*)?", "

"); - } - - // Always set the htmlText output - doc.body.innerHTML = html; - } -}; - -TinyMCE.prototype.getImageSrc = function(str) { - var pos = -1; - - if (!str) - return ""; - - if ((pos = str.indexOf('this.src=')) != -1) { - var src = str.substring(pos + 10); - - src = src.substring(0, src.indexOf('\'')); - - return src; - } - - return ""; -}; - -TinyMCE.prototype._getElementById = function(element_id) { - var elm = document.getElementById(element_id); - if (!elm) { - // Check for element in forms - for (var j=0; j 0) { - var csses = null; - - // Just ignore any errors - eval("try {var csses = tinyMCE.isMSIE ? doc.styleSheets(0).rules : doc.styleSheets[0].cssRules;} catch(e) {}"); - if (!csses) - return new Array(); - - for (var i=0; i 0) - tinyMCE.cssClasses = output; - - return output; -}; - -TinyMCE.prototype.regexpReplace = function(in_str, reg_exp, replace_str, opts) { - if (typeof(opts) == "undefined") - opts = 'g'; - - var re = new RegExp(reg_exp, opts); - return in_str.replace(re, replace_str); -}; - -TinyMCE.prototype.cleanupEventStr = function(str) { - str = "" + str; - str = str.replace('function anonymous()\n{\n', ''); - str = str.replace('\n}', ''); - - return str; -}; - -TinyMCE.prototype.getAbsPosition = function(node) { - var pos = new Object(); - - pos.absLeft = pos.absTop = 0; - - var parentNode = node; - while (parentNode) { - pos.absLeft += parentNode.offsetLeft; - pos.absTop += parentNode.offsetTop; - - parentNode = parentNode.offsetParent; - } - - return pos; -}; - -TinyMCE.prototype.openFileBrowser = function(field_name, url, type, win) { - var cb = tinyMCE.getParam("file_browser_callback"); - - this.setWindowArg("window", win); - - // Call to external callback - if(eval('typeof('+cb+')') == "undefined") - alert("Callback function: " + cb + " could not be found."); - else - eval(cb + "(field_name, url, type, win);"); -}; - -TinyMCE.prototype.getControlHTML = function(control_name) { - var themePlugins = tinyMCE.getParam('plugins', '', true, ','); - var templateFunction; - - // Is it defined in any plugins - for (var i=themePlugins.length; i>=0; i--) { - templateFunction = 'TinyMCE_' + themePlugins[i] + "_getControlHTML"; - if (eval("typeof(" + templateFunction + ")") != 'undefined') { - var html = eval(templateFunction + "('" + control_name + "');"); - if (html != "") - return tinyMCE.replaceVar(html, "pluginurl", tinyMCE.baseURL + "/plugins/" + themePlugins[i]); - } - } - - return eval('TinyMCE_' + tinyMCE.settings['theme'] + "_getControlHTML" + "('" + control_name + "');"); -}; - -TinyMCE.prototype._themeExecCommand = function(editor_id, element, command, user_interface, value) { - var themePlugins = tinyMCE.getParam('plugins', '', true, ','); - var templateFunction; - - // Is it defined in any plugins - for (var i=themePlugins.length; i>=0; i--) { - templateFunction = 'TinyMCE_' + themePlugins[i] + "_execCommand"; - if (eval("typeof(" + templateFunction + ")") != 'undefined') { - if (eval(templateFunction + "(editor_id, element, command, user_interface, value);")) - return true; - } - } - - // Theme funtion - templateFunction = 'TinyMCE_' + tinyMCE.settings['theme'] + "_execCommand"; - if (eval("typeof(" + templateFunction + ")") != 'undefined') - return eval(templateFunction + "(editor_id, element, command, user_interface, value);"); - - // Pass to normal - return false; -}; - -TinyMCE.prototype._getThemeFunction = function(suffix, skip_plugins) { - if (skip_plugins) - return 'TinyMCE_' + tinyMCE.settings['theme'] + suffix; - - var themePlugins = tinyMCE.getParam('plugins', '', true, ','); - var templateFunction; - - // Is it defined in any plugins - for (var i=themePlugins.length; i>=0; i--) { - templateFunction = 'TinyMCE_' + themePlugins[i] + suffix; - if (eval("typeof(" + templateFunction + ")") != 'undefined') - return templateFunction; - } - - return 'TinyMCE_' + tinyMCE.settings['theme'] + suffix; -}; - - -TinyMCE.prototype.isFunc = function(func_name) { - if (func_name == null || func_name == "") - return false; - - return eval("typeof(" + func_name + ")") != "undefined"; -}; - -TinyMCE.prototype.exec = function(func_name, args) { - var str = func_name + '('; - - // Add all arguments - for (var i=3; i 1 && tinyMCE.currentConfig != this.settings['index']) { - tinyMCE.settings = this.settings; - tinyMCE.currentConfig = this.settings['index']; - } -}; - -TinyMCEControl.prototype.fixBrokenURLs = function() { - var body = this.getBody(); - - var elms = body.getElementsByTagName("img"); - for (var i=0; i 0) - rng.selectNodeContents(nodes[0]); - else - rng.selectNodeContents(node); - } else - rng.selectNode(node); - - if (collapse) { - // Special treatment of textnode collapse - if (!to_start && node.nodeType == 3) { - rng.setStart(node, node.nodeValue.length); - rng.setEnd(node, node.nodeValue.length); - } else - rng.collapse(to_start); - } - - sel.removeAllRanges(); - sel.addRange(rng); - } - - this.scrollToNode(node); - - // Set selected element - tinyMCE.selectedElement = null; - if (node.nodeType == 1) - tinyMCE.selectedElement = node; -}; - -TinyMCEControl.prototype.scrollToNode = function(node) { - // Scroll to node position - var pos = tinyMCE.getAbsPosition(node); - var doc = this.getDoc(); - var scrollX = doc.body.scrollLeft + doc.documentElement.scrollLeft; - var scrollY = doc.body.scrollTop + doc.documentElement.scrollTop; - var height = tinyMCE.isMSIE ? document.getElementById(this.editorId).style.pixelHeight : this.targetElement.clientHeight; - - // Only scroll if out of visible area - if (!tinyMCE.settings['auto_resize'] && !(node.absTop > scrollY && node.absTop < (scrollY - 25 + height))) - this.contentWindow.scrollTo(pos.absLeft, pos.absTop - height + 25); -}; - -TinyMCEControl.prototype.getBody = function() { - return this.getDoc().body; -}; - -TinyMCEControl.prototype.getDoc = function() { - return this.contentWindow.document; -}; - -TinyMCEControl.prototype.getWin = function() { - return this.contentWindow; -}; - -TinyMCEControl.prototype.getSel = function() { - if (tinyMCE.isMSIE) - return this.getDoc().selection; - - var sel = this.contentWindow.getSelection(); - - // Fake getRangeAt - if (tinyMCE.isSafari && !sel.getRangeAt) { - var newSel = new Object(); - var doc = this.getDoc(); - - function getRangeAt(idx) { - var rng = new Object(); - - rng.startContainer = this.focusNode; - rng.endContainer = this.anchorNode; - rng.commonAncestorContainer = this.focusNode; - rng.createContextualFragment = function (html) { - // Seems to be a tag - if (html.charAt(0) == '<') { - var elm = doc.createElement("div"); - - elm.innerHTML = html; - - return elm.firstChild; - } - - return doc.createTextNode("UNSUPPORTED, DUE TO LIMITATIONS IN SAFARI!"); - }; - - rng.deleteContents = function () { - doc.execCommand("Delete", false, ""); - }; - - return rng; - } - - // Patch selection - - newSel.focusNode = sel.baseNode; - newSel.focusOffset = sel.baseOffset; - newSel.anchorNode = sel.extentNode; - newSel.anchorOffset = sel.extentOffset; - newSel.getRangeAt = getRangeAt; - newSel.text = "" + sel; - newSel.realSelection = sel; - - newSel.toString = function () {return this.text;}; - - return newSel; - } - - return sel; -}; - -TinyMCEControl.prototype.getRng = function() { - var sel = this.getSel(); - if (sel == null) - return null; - - if (tinyMCE.isMSIE) - return sel.createRange(); - - return this.getSel().getRangeAt(0); -}; - -TinyMCEControl.prototype._insertPara = function(e) { - function isEmpty(para) { - function isEmptyHTML(html) { - return html.replace(new RegExp('[ \t\r\n]+', 'g'), '').toLowerCase() == ""; - } - - // Check for images - if (para.getElementsByTagName("img").length > 0) - return false; - - // Check for tables - if (para.getElementsByTagName("table").length > 0) - return false; - - // Check for HRs - if (para.getElementsByTagName("hr").length > 0) - return false; - - // Check all textnodes - var nodes = tinyMCE.getNodeTree(para, new Array(), 3); - for (var i=0; i <" + blockName + "> "; - paraAfter = body.childNodes[1]; - } - - this.selectNode(paraAfter, true, true); - - return true; - } - - // Place first part within new paragraph - if (startChop.nodeName == blockName) - rngBefore.setStart(startChop, 0); - else - rngBefore.setStartBefore(startChop); - rngBefore.setEnd(startNode, startOffset); - paraBefore.appendChild(rngBefore.cloneContents()); - - // Place secound part within new paragraph - rngAfter.setEndAfter(endChop); - rngAfter.setStart(endNode, endOffset); - var contents = rngAfter.cloneContents(); - if (contents.firstChild && contents.firstChild.nodeName == blockName) { - var nodes = contents.firstChild.childNodes; - for (var i=0; i 0) - rng.pasteHTML('
' + rng.htmlText + "
"); - - tinyMCE.triggerNodeChange(); - return; - } - } - } - - switch (command) { - case "mceSelectNode": - this.selectNode(value); - tinyMCE.triggerNodeChange(); - tinyMCE.selectedNode = value; - break; - - case "FormatBlock": - if (value == null || value == "") { - var elm = tinyMCE.getParentElement(this.getFocusElement(), "p,div,h1,h2,h3,h4,h5,h6,pre,address"); - - if (elm) - this.execCommand("mceRemoveNode", false, elm); - } else - this.getDoc().execCommand("FormatBlock", false, value); - - tinyMCE.triggerNodeChange(); - - break; - - case "mceRemoveNode": - if (!value) - value = tinyMCE.getParentElement(this.getFocusElement()); - - if (tinyMCE.isMSIE) { - value.outerHTML = value.innerHTML; - } else { - var rng = value.ownerDocument.createRange(); - rng.setStartBefore(value); - rng.setEndAfter(value); - rng.deleteContents(); - rng.insertNode(rng.createContextualFragment(value.innerHTML)); - } - - tinyMCE.triggerNodeChange(); - - break; - - case "mceSelectNodeDepth": - var parentNode = this.getFocusElement(); - for (var i=0; parentNode; i++) { - if (parentNode.nodeName.toLowerCase() == "body") - break; - - if (parentNode.nodeName.toLowerCase() == "#text") { - i--; - parentNode = parentNode.parentNode; - continue; - } - - if (i == value) { - this.selectNode(parentNode, false); - tinyMCE.triggerNodeChange(); - tinyMCE.selectedNode = parentNode; - return; - } - - parentNode = parentNode.parentNode; - } - - break; - - case "HiliteColor": - if (tinyMCE.isGecko) { - this.getDoc().execCommand("useCSS", false, false); - this.getDoc().execCommand('hilitecolor', false, value); - this.getDoc().execCommand("useCSS", false, true); - } else - this.getDoc().execCommand('BackColor', false, value); - - break; - - case "Cut": - case "Copy": - case "Paste": - var cmdFailed = false; - - // Try executing command - eval('try {this.getDoc().execCommand(command, user_interface, value);} catch (e) {cmdFailed = true;}'); - - // Alert error in gecko if command failed - if (tinyMCE.isGecko && cmdFailed) { - // Confirm more info - if (confirm(tinyMCE.getLang('lang_clipboard_msg'))) - window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html', 'mceExternal'); - - return; - } else - tinyMCE.triggerNodeChange(); - break; - - case "mceSetContent": - if (!value) - value = ""; - - // Call custom cleanup code - value = tinyMCE._customCleanup("insert_to_editor", value); - tinyMCE._setHTML(doc, value); - doc.body.innerHTML = tinyMCE._cleanupHTML(doc, tinyMCE.settings, doc.body); - tinyMCE.handleVisualAid(doc.body, true, this.visualAid); - return true; - - case "mceLink": - var selectedText = ""; - - if (tinyMCE.isMSIE) { - var rng = doc.selection.createRange(); - selectedText = rng.text; - } else - selectedText = this.getSel().toString(); - - if (!tinyMCE.linkElement) { - if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) - return; - } - - var href = "", target = "", title = "", onclick = "", action = "insert", style_class = ""; - - if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") - tinyMCE.linkElement = tinyMCE.selectedElement; - - // Is anchor not a link - if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") - tinyMCE.linkElement = null; - - if (tinyMCE.linkElement) { - href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); - target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); - title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_onclick'); - style_class = tinyMCE.getAttrib(tinyMCE.linkElement, 'class'); - - // Try old onclick to if copy/pasted content - if (onclick == "") - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); - - onclick = tinyMCE.cleanupEventStr(onclick); - - // Fix for drag-drop/copy paste bug in Mozilla - mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_real_href'); - if (mceRealHref != "") - href = mceRealHref; - - href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); - action = "update"; - } - - if (this.settings['insertlink_callback']) { - var returnVal = eval(this.settings['insertlink_callback'] + "(href, target, title, onclick, action, style_class);"); - if (returnVal && returnVal['href']) - tinyMCE.insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick'], returnVal['style_class']); - } else { - tinyMCE.openWindow(this.insertLinkTemplate, {href : href, target : target, title : title, onclick : onclick, action : action, className : style_class}); - } - break; - - case "mceAttachment": - var selectedText = ""; - - if (tinyMCE.isMSIE) { - var rng = doc.selection.createRange(); - selectedText = rng.text; - } else - selectedText = this.getSel().toString(); - - if (!tinyMCE.linkElement) { - if ((tinyMCE.selectedElement.nodeName.toLowerCase() != "img") && (selectedText.length <= 0)) - return; - } - - var href = "", target = "", title = "", onclick = "", action = "insert"; - - if (tinyMCE.selectedElement.nodeName.toLowerCase() == "a") - tinyMCE.linkElement = tinyMCE.selectedElement; - - // Is anchor not a link - if (tinyMCE.linkElement != null && tinyMCE.getAttrib(tinyMCE.linkElement, 'href') == "") - tinyMCE.linkElement = null; - - if (tinyMCE.linkElement) { - href = tinyMCE.getAttrib(tinyMCE.linkElement, 'href'); - target = tinyMCE.getAttrib(tinyMCE.linkElement, 'target'); - title = tinyMCE.getAttrib(tinyMCE.linkElement, 'title'); - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_onclick'); - - // Try old onclick to if copy/pasted content - if (onclick == "") - onclick = tinyMCE.getAttrib(tinyMCE.linkElement, 'onclick'); - - onclick = tinyMCE.cleanupEventStr(onclick); - - // Fix for drag-drop/copy paste bug in Mozilla - mceRealHref = tinyMCE.getAttrib(tinyMCE.linkElement, 'mce_real_href'); - if (mceRealHref != "") - href = mceRealHref; - - href = eval(tinyMCE.settings['urlconverter_callback'] + "(href, tinyMCE.linkElement, true);"); - action = "update"; - } - - if (this.settings['insertlink_callback']) { - var returnVal = eval(this.settings['insertlink_callback'] + "(href, target, title, onclick, action);"); - if (returnVal && returnVal['href']) - tinyMCE.insertLink(returnVal['href'], returnVal['target'], returnVal['title'], returnVal['onclick']); - } else { - tinyMCE.openWindow(this.insertAttachmentTemplate, {href : href, target : target, title : title, onclick : onclick, action : action}); - } - break; - - case "mceImage": - var src = "", alt = "", border = "", hspace = "", vspace = "", width = "", height = "", align = ""; - var title = "", onmouseover = "", onmouseout = "", action = "insert"; - var img = tinyMCE.imgElement; - - if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") { - img = tinyMCE.selectedElement; - tinyMCE.imgElement = img; - } - - if (img) { - // Is it a internal MCE visual aid image, then skip this one. - if (tinyMCE.getAttrib(img, 'name').indexOf('mce_') == 0) - return; - - src = tinyMCE.getAttrib(img, 'src'); - alt = tinyMCE.getAttrib(img, 'alt'); - - // Try polling out the title - if (alt == "") - alt = tinyMCE.getAttrib(img, 'title'); - - // Fix width/height attributes if the styles is specified - if (tinyMCE.isGecko) { - var w = img.style.width; - if (w != null && w != "") - img.setAttribute("width", w); - - var h = img.style.height; - if (h != null && h != "") - img.setAttribute("height", h); - } - - border = tinyMCE.getAttrib(img, 'border'); - hspace = tinyMCE.getAttrib(img, 'hspace'); - vspace = tinyMCE.getAttrib(img, 'vspace'); - width = tinyMCE.getAttrib(img, 'width'); - height = tinyMCE.getAttrib(img, 'height'); - align = tinyMCE.getAttrib(img, 'align'); - onmouseover = tinyMCE.getAttrib(img, 'onmouseover'); - onmouseout = tinyMCE.getAttrib(img, 'onmouseout'); - title = tinyMCE.getAttrib(img, 'title'); - - // Is realy specified? - if (tinyMCE.isMSIE) { - width = img.attributes['width'].specified ? width : ""; - height = img.attributes['height'].specified ? height : ""; - } - - onmouseover = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseover)); - onmouseout = tinyMCE.getImageSrc(tinyMCE.cleanupEventStr(onmouseout)); - - // Fix for drag-drop/copy paste bug in Mozilla - mceRealSrc = tinyMCE.getAttrib(img, 'mce_real_src'); - if (mceRealSrc != "") - src = mceRealSrc; - - src = eval(tinyMCE.settings['urlconverter_callback'] + "(src, img, true);"); - - if (onmouseover != "") - onmouseover = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseover, img, true);"); - - if (onmouseout != "") - onmouseout = eval(tinyMCE.settings['urlconverter_callback'] + "(onmouseout, img, true);"); - - action = "update"; - } - - if (this.settings['insertimage_callback']) { - var returnVal = eval(this.settings['insertimage_callback'] + "(src, alt, border, hspace, vspace, width, height, align, title, onmouseover, onmouseout, action);"); - if (returnVal && returnVal['src']) - tinyMCE.insertImage(returnVal['src'], returnVal['alt'], returnVal['border'], returnVal['hspace'], returnVal['vspace'], returnVal['width'], returnVal['height'], returnVal['align'], returnVal['title'], returnVal['onmouseover'], returnVal['onmouseout']); - } else - tinyMCE.openWindow(this.insertImageTemplate, {src : src, alt : alt, border : border, hspace : hspace, vspace : vspace, width : width, height : height, align : align, title : title, onmouseover : onmouseover, onmouseout : onmouseout, action : action}); - break; - - case "mceCleanupWord": - if (tinyMCE.isMSIE) { - var html = this.getBody().createTextRange().htmlText; - - if (html.indexOf('="mso') != -1) { - tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML); - html = tinyMCE._cleanupHTML(this.contentDocument, this.settings, this.getBody(), this.visualAid); - } - - this.getBody().innerHTML = html; - } - break; - - case "mceCleanup": - tinyMCE._setHTML(this.contentDocument, this.getBody().innerHTML); - this.getBody().innerHTML = tinyMCE._cleanupHTML(this.contentDocument, this.settings, this.getBody(), this.visualAid); - tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid); - this.repaint(); - tinyMCE.triggerNodeChange(); - break; - - case "mceAnchor": - if (!user_interface) { - var aElm = tinyMCE.getParentElement(this.getFocusElement(), "a", "name"); - if (aElm) { - if (value == null || value == "") { - if (tinyMCE.isMSIE) { - aElm.outerHTML = aElm.innerHTML; - } else { - var rng = aElm.ownerDocument.createRange(); - rng.setStartBefore(aElm); - rng.setEndAfter(aElm); - rng.deleteContents(); - rng.insertNode(rng.createContextualFragment(aElm.innerHTML)); - } - } else - aElm.setAttribute('name', value); - } else { - this.getDoc().execCommand("fontname", false, "#mce_temp_font#"); - var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#"); - for (var x=0; x 0) { - value = tinyMCE.replaceVar(value, "selection", selectedText); - tinyMCE.execCommand('mceInsertContent', false, value); - } - - tinyMCE.triggerNodeChange(); - break; - - case "mceSetAttribute": - if (typeof(value) == 'object') { - var targetElms = (typeof(value['targets']) == "undefined") ? "p,img,span,div,td,h1,h2,h3,h4,h5,h6,pre,address" : value['targets']; - var targetNode = tinyMCE.getParentElement(this.getFocusElement(), targetElms); - - if (targetNode) { - targetNode.setAttribute(value['name'], value['value']); - tinyMCE.triggerNodeChange(); - } - } - break; - - case "mceSetCSSClass": - var selectedText = false; - - if (tinyMCE.isMSIE) { - var rng = doc.selection.createRange(); - selectedText = (rng.text && rng.text.length > 0); - } else - selectedText = (this.getSel().toString().length > 0); - - // Use selectedNode instead if defined - if (tinyMCE.selectedNode) - tinyMCE.selectedElement = tinyMCE.selectedNode; - - if (selectedText && !tinyMCE.selectedNode) { - this.getDoc().execCommand("RemoveFormat", false, null); - if (value == null) - return this.execCommand("RemoveFormat", false, null); - - this.getDoc().execCommand("fontname", false, "#mce_temp_font#"); - var elementArray = tinyMCE.getElementsByAttributeValue(this.getBody(), "font", "face", "#mce_temp_font#"); - - // Change them all - for (var x=0; x customUndoLevels) { - for (var i=0; i 0) { - this.undoIndex--; - this.getBody().innerHTML = this.undoLevels[this.undoIndex]; - } - - // debug("Undo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex); - tinyMCE.triggerNodeChange(); - } else - this.getDoc().execCommand(command, user_interface, value); - break; - - case "Redo": - if (tinyMCE.settings['custom_undo_redo']) { - if (this.undoIndex < (this.undoLevels.length-1)) { - this.undoIndex++; - this.getBody().innerHTML = this.undoLevels[this.undoIndex]; - // debug("Redo - undo levels:" + this.undoLevels.length + ", undo index: " + this.undoIndex); - } - - tinyMCE.triggerNodeChange(); - } else - this.getDoc().execCommand(command, user_interface, value); - break; - - case "mceToggleVisualAid": - this.visualAid = !this.visualAid; - tinyMCE.handleVisualAid(this.getBody(), true, this.visualAid); - tinyMCE.triggerNodeChange(); - break; - - case "removeformat": - var text = this.getSelectedText(); - - if (tinyMCE.isMSIE) { - try { - win.focus(); - var rng = doc.selection.createRange(); - rng.execCommand("RemoveFormat", false, null); - rng.pasteHTML(rng.text); - } catch (e) { - // Do nothing - } - } else - this.getDoc().execCommand(command, user_interface, value); - - // Remove class - if (text.length == 0) - this.execCommand("mceSetCSSClass", false, ""); - - tinyMCE.triggerNodeChange(); - break; - - default: - this.getDoc().execCommand(command, user_interface, value); - tinyMCE.triggerNodeChange(); - } -}; - -TinyMCEControl.prototype.queryCommandValue = function(command) { - return this.getDoc().queryCommandValue(command); -}; - -TinyMCEControl.prototype.queryCommandState = function(command) { - return this.getDoc().queryCommandState(command); -}; - -TinyMCEControl.prototype.onAdd = function(replace_element, form_element_name, target_document) { - var targetDoc = target_document ? target_document : document; - - this.targetDoc = targetDoc; - - tinyMCE.themeURL = tinyMCE.baseURL + "/themes/" + this.settings['theme']; - this.settings['themeurl'] = tinyMCE.themeURL; - - if (!replace_element) { - alert("Error: Could not find the target element."); - return false; - } - - var templateFunction = tinyMCE._getThemeFunction('_getInsertLinkTemplate'); - if (eval("typeof(" + templateFunction + ")") != 'undefined') - this.insertLinkTemplate = eval(templateFunction + '(this.settings);'); - - var templateFunction = tinyMCE._getThemeFunction('_getInsertAttachmentTemplate'); - if (eval("typeof(" + templateFunction + ")") != 'undefined') - this.insertAttachmentTemplate = eval(templateFunction + '(this.settings);'); - - var templateFunction = tinyMCE._getThemeFunction('_getInsertImageTemplate'); - if (eval("typeof(" + templateFunction + ")") != 'undefined') - this.insertImageTemplate = eval(templateFunction + '(this.settings);'); - - var templateFunction = tinyMCE._getThemeFunction('_getEditorTemplate'); - if (eval("typeof(" + templateFunction + ")") == 'undefined') { - alert("Error: Could not find the template function: " + templateFunction); - return false; - } - - var editorTemplate = eval(templateFunction + '(this.settings, this.editorId);'); - - var deltaWidth = editorTemplate['delta_width'] ? editorTemplate['delta_width'] : 0; - var deltaHeight = editorTemplate['delta_height'] ? editorTemplate['delta_height'] : 0; - var html = '' + editorTemplate['html']; - - var templateFunction = tinyMCE._getThemeFunction('_handleNodeChange', true); - if (eval("typeof(" + templateFunction + ")") != 'undefined') - this.settings['handleNodeChangeCallback'] = templateFunction; - - html = tinyMCE.replaceVar(html, "editor_id", this.editorId); - html = tinyMCE.replaceVar(html, "default_document", tinyMCE.baseURL + "/blank.htm"); - this.settings['default_document'] = tinyMCE.baseURL + "/blank.htm"; - - this.settings['old_width'] = this.settings['width']; - this.settings['old_height'] = this.settings['height']; - - // Set default width, height - if (this.settings['width'] == -1) - this.settings['width'] = replace_element.offsetWidth; - - if (this.settings['height'] == -1) - this.settings['height'] = replace_element.offsetHeight; - - // Try the style width - if (this.settings['width'] == 0) - this.settings['width'] = replace_element.style.width; - - // Try the style height - if (this.settings['height'] == 0) - this.settings['height'] = replace_element.style.height; - - // If no width/height then default to 320x240, better than nothing - if (this.settings['width'] == 0) - this.settings['width'] = 320; - - if (this.settings['height'] == 0) - this.settings['height'] = 240; - - this.settings['area_width'] = parseInt(this.settings['width']); - this.settings['area_height'] = parseInt(this.settings['height']); - this.settings['area_width'] += deltaWidth; - this.settings['area_height'] += deltaHeight; - - // Special % handling - if (("" + this.settings['width']).indexOf('%') != -1) - this.settings['area_width'] = "100%"; - - if (("" + this.settings['height']).indexOf('%') != -1) - this.settings['area_height'] = "100%"; - - if (("" + replace_element.style.width).indexOf('%') != -1) { - this.settings['width'] = replace_element.style.width; - this.settings['area_width'] = "100%"; - } - - if (("" + replace_element.style.height).indexOf('%') != -1) { - this.settings['height'] = replace_element.style.height; - this.settings['area_height'] = "100%"; - } - - html = tinyMCE.applyTemplate(html); - - this.settings['width'] = this.settings['old_width']; - this.settings['height'] = this.settings['old_height']; - - this.visualAid = this.settings['visual']; - this.formTargetElementId = form_element_name; - - // Get replace_element contents - if (replace_element.nodeName.toLowerCase() == "textarea") - this.startContent = replace_element.value; - else - this.startContent = replace_element.innerHTML; - - // If not text area - if (replace_element.nodeName.toLowerCase() != "textarea") { - this.oldTargetElement = replace_element.cloneNode(true); - - // Debug mode - if (tinyMCE.settings['debug']) - html += ''; - else - html += ''; - - html += ''; - - // Output HTML and set editable - if (!tinyMCE.isMSIE) { - var rng = replace_element.ownerDocument.createRange(); - rng.setStartBefore(replace_element); - - var fragment = rng.createContextualFragment(html); - replace_element.parentNode.replaceChild(fragment, replace_element); - } else - replace_element.outerHTML = html; - } else { - html += ''; - - // Just hide the textarea element - this.oldTargetElement = replace_element; - - if (!tinyMCE.settings['debug']) - this.oldTargetElement.style.display = "none"; - - // Output HTML and set editable - if (!tinyMCE.isMSIE) { - var rng = replace_element.ownerDocument.createRange(); - rng.setStartBefore(replace_element); - - var fragment = rng.createContextualFragment(html); - replace_element.parentNode.insertBefore(fragment, replace_element); - } else - replace_element.insertAdjacentHTML("beforeBegin", html); - } - - // Setup iframe - var dynamicIFrame = false; - var tElm = targetDoc.getElementById(this.editorId); - - if (!tinyMCE.isMSIE) { - if (tElm && tElm.nodeName.toLowerCase() == "span") { - tElm = tinyMCE._createIFrame(tElm); - dynamicIFrame = true; - } - - this.targetElement = tElm; - this.iframeElement = tElm; - this.contentDocument = tElm.contentDocument; - this.contentWindow = tElm.contentWindow; - - //this.getDoc().designMode = "on"; - } else { - if (tElm && tElm.nodeName.toLowerCase() == "span") - tElm = tinyMCE._createIFrame(tElm); - else - tElm = targetDoc.frames[this.editorId]; - - this.targetElement = tElm; - this.iframeElement = targetDoc.getElementById(this.editorId); - this.contentDocument = tElm.window.document; - this.contentWindow = tElm.window; - this.getDoc().designMode = "on"; - } - - // Setup base HTML - var doc = this.contentDocument; - if (dynamicIFrame) { - var html = "" - + '' - + '' - + '' - + '' - + 'blank_page' - + '' - + '' - + '' - + '' - + ''; - - try { - this.getDoc().designMode = "on"; - doc.open(); - doc.write(html); - doc.close(); - } catch (e) { - // Failed Mozilla 1.3 - this.getDoc().location.href = tinyMCE.baseURL + "/blank.htm"; - } - } - - // This timeout is needed in MSIE 5.5 for some odd reason - // it seems that the document.frames isn't initialized yet? - if (tinyMCE.isMSIE) - window.setTimeout("TinyMCE.prototype.addEventHandlers('" + this.editorId + "');", 1); - - tinyMCE.setupContent(this.editorId, true); - - return true; -}; - -TinyMCEControl.prototype.getFocusElement = function() { - if (tinyMCE.isMSIE) { - var doc = this.getDoc(); - var rng = doc.selection.createRange(); - - if (rng.collapse) - rng.collapse(true); - - var elm = rng.item ? rng.item(0) : rng.parentElement(); - } else { - var sel = this.getSel(); - var elm = (sel && sel.anchorNode) ? sel.anchorNode : null; - - if (tinyMCE.selectedElement != null && tinyMCE.selectedElement.nodeName.toLowerCase() == "img") - elm = tinyMCE.selectedElement; - } - - return elm; -}; - -// Global instances -var tinyMCE = new TinyMCE(); -var tinyMCELang = new Array(); - -function debug() { - var msg = ""; - - var elm = document.getElementById("tinymce_debug"); - if (!elm) { - var debugDiv = document.createElement("div"); - debugDiv.setAttribute("className", "debugger"); - debugDiv.className = "debugger"; - debugDiv.innerHTML = '\ - Debug output:\ - '; - - document.body.appendChild(debugDiv); - elm = document.getElementById("tinymce_debug"); - } - - var args = this.debug.arguments; - for (var i=0; i 0 -end - -puts "Done - #{total_replacements} total replacements made." diff --git a/script/localize b/script/localize deleted file mode 100755 index 1757ecf..0000000 --- a/script/localize +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env ruby - -# we need fileutils for easy file access -require 'fileutils' -require 'rubygems' -include FileUtils -# we will need the modified rgettext.rb that can read erb templates -require File.dirname(__FILE__) + '/rgettext' - - -# RAILS_ROOT is just one up -RAILS_ROOT = File.expand_path(File.dirname(__FILE__) + '/..') -# $DEBUG = true -# goto RAILS_ROOT so we can address all files relatively from there -Dir.chdir(RAILS_ROOT) - -# the potfile will hold the temporary data before it is merged; note the -# filename .messages.pot (if you don't prepend a dot to the filename Dir.glob -# will get confused later on) -potfile = "#{RAILS_ROOT}/locale/.messages.pot" - -# if the potfile exists from the previous run, delete it -rm_f potfile - -# directories and extensions to harvest -dirpattern = '{app,components,config,custom,lib}' -extpattern = 'r{b,html,xml}' -files = Dir.glob("#{dirpattern}/**/*.#{extpattern}") - -# run the harvester on the collected filenames and output to potfile -RGettext.new.start files, potfile - -# now iterate through all locale dirs and update/merge -Dir.glob('locale/*').each do |dir| - # check if every dir has a pofile to begin with, else msmerge will fail - # if not, use the potfile and don't merge - pofile = "#{RAILS_ROOT}/#{dir}/LC_MESSAGES/messages.po" - if File.exists?(pofile) - print "Updating pofile #{pofile} " - system "msgmerge --force-po --no-location --update #{pofile} #{potfile}" - else - print "The pofile '#{pofile}' does not exist. I will create it for you " - path_to_pofile = File.dirname(pofile) - mkdir path_to_pofile unless File.exists?(path_to_pofile) - cp potfile, pofile - puts ' .... done.' - end -end diff --git a/script/performance/benchmarker b/script/performance/benchmarker deleted file mode 100755 index 462cae1..0000000 --- a/script/performance/benchmarker +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/performance/benchmarker' diff --git a/script/performance/profiler b/script/performance/profiler deleted file mode 100755 index 8b3a633..0000000 --- a/script/performance/profiler +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/performance/profiler' diff --git a/script/performance/request b/script/performance/request deleted file mode 100755 index ae3f38c..0000000 --- a/script/performance/request +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/performance/request' diff --git a/script/plugin b/script/plugin deleted file mode 100755 index 87cd207..0000000 --- a/script/plugin +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/plugin' diff --git a/script/process/inspector b/script/process/inspector deleted file mode 100755 index bf25ad8..0000000 --- a/script/process/inspector +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/process/inspector' diff --git a/script/process/reaper b/script/process/reaper deleted file mode 100755 index af0b34d..0000000 --- a/script/process/reaper +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/process/reaper' diff --git a/script/process/spawner b/script/process/spawner deleted file mode 100755 index ffb55ae..0000000 --- a/script/process/spawner +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/process/spawner' diff --git a/script/process/spinner b/script/process/spinner deleted file mode 100755 index c1ce730..0000000 --- a/script/process/spinner +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../../config/boot' -require 'commands/process/spinner' diff --git a/script/profiler b/script/profiler deleted file mode 100755 index 77c9fbe..0000000 --- a/script/profiler +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env ruby -if ARGV.empty? - $stderr.puts "Usage: profiler 'Person.expensive_method(10)' [times]" - exit(1) -end - -# Keep the expensive require out of the profile. -$stderr.puts 'Loading Rails...' -require File.dirname(__FILE__) + '/../config/environment' - -# Define a method to profile. -if ARGV[1] and ARGV[1].to_i > 1 - eval "def profile_me() #{ARGV[1]}.times { #{ARGV[0]} } end" -else - eval "def profile_me() #{ARGV[0]} end" -end - -# Use the ruby-prof extension if available. Fall back to stdlib profiler. -begin - require 'prof' - $stderr.puts 'Using the ruby-prof extension.' - Prof.clock_mode = Prof::GETTIMEOFDAY - Prof.start - profile_me - results = Prof.stop - require 'rubyprof_ext' - Prof.print_profile(results, $stderr) -rescue LoadError - $stderr.puts 'Using the standard Ruby profiler.' - Profiler__.start_profile - profile_me - Profiler__.stop_profile - Profiler__.print_profile($stderr) -end diff --git a/script/rails b/script/rails new file mode 100755 index 0000000..b97de07 --- /dev/null +++ b/script/rails @@ -0,0 +1,6 @@ +#!/usr/bin/env ruby18 +# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application. + +APP_PATH = File.expand_path('../../config/application', __FILE__) +require File.expand_path('../../config/boot', __FILE__) +require 'rails/commands' diff --git a/script/rgettext.rb b/script/rgettext.rb deleted file mode 100755 index 3702f47..0000000 --- a/script/rgettext.rb +++ /dev/null @@ -1,215 +0,0 @@ -#!/usr/bin/env ruby -=begin - rgettext - ruby version of xgettext - Copyright (C) 2005 Sascha Ebach - Copyright (C) 2003,2004 Masao Mutoh - Copyright (C) 2001,2002 Yasushi Shoji, Masao Mutoh - - Yasushi Shoji - Masao Mutoh - Sascha Ebach - - You may redistribute it and/or modify it under the same - license terms as Ruby. - - 2005-03-12: Added support for eruby templates (Sascha Ebach) - 2005-03-20: Added second parameter to RGetext.start to allow different - output when not called from the command line. Pulled out - RGetext.set_output(). - -=end - -require 'gettext/parser/ruby' -require 'gettext/parser/glade' - -require 'getoptlong' -require 'gettext' - -require 'tempfile' -require 'erb' - -class RGettext - include GetText - - # constant values - VERSION = %w($Revision: 1.15 $)[1].scan(/\d+/).collect {|s| s.to_i} - DATE = %w($Date: 2004/11/05 18:19:08 $)[1] - MAX_LINE_LEN = 70 - - def start(files=ARGV, output = nil) - opt = check_options - opt['output'] = output unless output.nil? - set_output(opt) - - - if files.empty? - print_help - exit - end - - ary = [] - files.each do |file| - begin - $stderr.puts "Processing #{file}" - if glade_file?(file) - ary = GladeParser.parse(file, ary) - elsif erb_file?(file) - content = File.open(file, 'r') {|f| f.read } - tf = Tempfile.new('erb-gettext') - tf.puts ERB.new(content).src - tf.close - old_index = ary.size - 1 - ary = GetText::RubyParser.parse(tf.path, ary) - #replace tokens with /tmp/... with real file names - for i in old_index..ary.size-1 - for j in 0..ary[i].size-1 - ary[i][j] = ary[i][j].gsub("#{tf.path}", file) - end - end - tf.close true - else - ary = RubyParser.parse(file, ary) - end - rescue - puts $! - exit 1 - end - end - generate_pot_header - generate_pot(ary) - @out.close - end - - # following methods are - private - XML_RE = /<\?xml/ - GLADE_RE = /glade-2.0.dtd/ - - def erb_file?(file) - File.extname(file) == '.rhtml' - end - - def glade_file?(file) - data = IO.readlines(file) - if XML_RE =~ data[0] - if GLADE_RE =~ data[1] - return true - else - raise _("%s is not glade-2.0 format.") % [file] - end - else - return false - end - end - - def initialize - bindtextdomain("rgettext") - end - - def generate_pot_header - time = Time.now.strftime("%Y-%m-%d %H:%M%z") - @out << "# SOME DESCRIPTIVE TITLE.\n" - @out << "# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n" - @out << "# This file is distributed under the same license as the PACKAGE package.\n" - @out << "# FIRST AUTHOR , YEAR.\n" - @out << "#\n" - @out << "#, fuzzy\n" - @out << "msgid \"\"\n" - @out << "msgstr \"\"\n" - @out << "\"Project-Id-Version: PACKAGE VERSION\\n\"\n" - @out << "\"POT-Creation-Date: #{time}\\n\"\n" - @out << "\"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\\n\"\n" - @out << "\"Last-Translator: FULL NAME \\n\"\n" - @out << "\"Language-Team: LANGUAGE \\n\"\n" - @out << "\"MIME-Version: 1.0\\n\"\n" - @out << "\"Content-Type: text/plain; charset=UTF-8\\n\"\n" - @out << "\"Content-Transfer-Encoding: 8bit\\n\"\n" - @out << "\"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\\n\"\n" - end - - def generate_pot(ary) - result = Array.new - ary.each do |key| - msgid = key.shift - curr_pos = MAX_LINE_LEN - key.each do |e| - if curr_pos + e.size > MAX_LINE_LEN - @out << "\n#:" - curr_pos = 3 - else - curr_pos += (e.size + 1) - end - @out << " " << e - end - msgid.gsub!(/"/, '\"') - msgid.gsub!(/\r/, '') - if msgid.include?("\000") - ids = msgid.split(/\000/) - @out << "\nmsgid \"" << ids[0] << "\"\n" - @out << "msgid_plural \"" << ids[1] << "\"\n" - @out << "msgstr[0] \"\"\n" - @out << "msgstr[1] \"\"\n" - else - @out << "\nmsgid \"" << msgid << "\"\n" - @out << "msgstr \"\"\n" - end - end - end - - def print_help - printf _("Usage: %s input.rb -o output.pot\n"), $0 - print _("Extract translatable strings from given input files.\n\n") - end - - def check_options - command_options = [ - ['--help', '-h', GetoptLong::NO_ARGUMENT], #'print this help and exit'], - ['--version', '-v', GetoptLong::NO_ARGUMENT], #'print version info and exit'], - ['--output', '-o', GetoptLong::REQUIRED_ARGUMENT]#, ['FILE', 'write output to specified file']] - ] - - parser = GetoptLong.new - parser.set_options(*command_options) - - opt = Hash.new - parser.each do |name, arg| - opt.store(name.sub(/^--/, ""), arg || true) - end - - if opt['version'] - print "#{$0} #{VERSION.join('.')} \(#{DATE}\)\n\n" - exit - end - - if opt['help'] - print_help - exit - end - - opt - end - - def set_output(opt) - if opt['output'] - unless FileTest.exist? opt['output'] - @out = File.new(File.expand_path(opt['output']), "w+") - else - if $>.tty? - # FIXME - printf $stderr, "File '#{opt['output']}' already exists\n" - exit 1 - else - printf $stderr, "File '#{opt['output']}' already exists" - exit 1 - end - end - else - @out = STDOUT - end - end -end # class RGettext - -if __FILE__ == $0 # in case we want to start it from somewhere else - rgettext = RGettext.new - rgettext.start -end diff --git a/script/runner b/script/runner deleted file mode 100755 index 57211c6..0000000 --- a/script/runner +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/runner' \ No newline at end of file diff --git a/script/scgi_rails b/script/scgi_rails deleted file mode 100755 index dc470d8..0000000 --- a/script/scgi_rails +++ /dev/null @@ -1,339 +0,0 @@ -#!/usr/bin/env ruby - -require 'stringio' -require 'yaml' -require 'digest/sha1' -require 'logger' -require 'fileutils' -require 'socket' -require 'cgi' -require 'rubygems' -require 'cmdparse' -require 'monitor' - -def log(msg) - $stderr.print msg,"\n" -end - -def error(msg, exc=nil) - if exc - $stderr.print "ERROR: #{msg}: #{exc}\n" - $stderr.puts exc.backtrace - else - $stderr.print "ERROR: #{msg}\n" - end -end - - -# Modifies CGI so that we can use it. -class SCGIFixed < ::CGI - public :env_table - - def initialize(params, data, out, *args) - @env_table = params - @args = *args - @input = StringIO.new(data) - @out = out - super(*args) - end - def args - @args - end - def env_table - @env_table - end - def stdinput - @input - end - def stdoutput - @out - end -end - - -class SCGIProcessor < Monitor - - def initialize(settings) - @env = settings[:env] || "development" - @debug = settings[:debug] || false - @host = settings[:host] || "127.0.0.1" - @port = settings[:port] || "9999" - @children = settings[:children] || 1 - @pid_file = settings[:pid_file] || "children.yaml" - @status_dir = settings[:status_dir] || "/tmp" - @log_file = settings[:logfile] || "log/scgi.log" - @maxconns = settings[:maxconns] - @busy_msg = settings[:busy_msg] || "BUSY" - @settings = settings - @started = Time.now - @conns = 0 - @total_conns = 0 - @errors = 0 - - if @maxconns - @maxconns = @maxconns.to_i - else - @maxconns = 2**30-1 - end - - if settings[:conns_second] - @throttle_sleep = 1.0/settings[:conns_second].to_i - end - - super() - end - - def run - ENV['RAILS_ENV'] = @env - - begin - require_gem 'rails' - require "config/environment" - rescue Object - error("loading rails environment", $!) - end - - server = TCPServer.new(@host, @port) - - if @debug - log("Listening for connections on #@host:#@port") - listen(server) - else - childpids = [] - @children.to_i.times do - # fork each child listening to the same port. very simple yet effective way to spread the load - # to multiple processes without using threads and still using high performance libevent - begin - pid = fork do - $stderr = open(@log_file,"w") - $stderr.sync = false - listen(server) - end - childpids << pid - Process.detach(pid) - rescue Object - error("Could not fork child processes. Your system might not support fork. Use -D instead.", $!) - end - end - - # tell the user what the sha1 is so they can check for modification later - log("#@pid_file will have SHA1 #{Digest::SHA1.hexdigest(YAML.dump(childpids))}") - log("Record this somewhere so you know if it was modified later by someone else.") - # all children forked and the pids are now ready to write to the pid file - open(@pid_file,"w") { |f| f.write(YAML.dump(childpids)) } - end - end - - - def listen(socket) - thread = Thread.new do - while true - handle_client(socket.accept) - sleep @throttle_sleep if @throttle_sleep - - @total_conns += 1 - end - end - - begin - thread.join - rescue Interrupt - log("Shutting down from SIGINT.") - rescue Object - error("while listening for connections on #@host:#@port", $!) - end - end - - - def handle_client(socket) - Thread.new do - begin - synchronize { @conns += 1} - - len = "" - # we only read 10 bytes of the length. any request longer than this is invalid - while len.length <= 10 - c = socket.read(1) - if c == ':' - # found the terminal, len now has a length in it so read the payload - break - else - len << c - end - end - - # we should now either have a payload length to get - payload = socket.read(len.to_i) - if (c = socket.read(1)) != ',' - error("Malformed request, does not end with ','") - else - read_header(socket, payload, @conns) - end - rescue IOError - error("received IOError #$! when handling client. Your web server doesn't like me.") - rescue Object - @errors += 1 - error("after accepting client #@host:#@port -- #{$!.class}", $!) - ensure - synchronize { @conns -= 1} - socket.close if not socket.closed? - end - end - - end - - - def read_header(socket, payload, conns) - return if socket.closed? - request = split_body(payload) - if request and request["CONTENT_LENGTH"] - length = request["CONTENT_LENGTH"].to_i - if length > 0 - body = socket.read(length) - else - body = "" - end - - if @conns > @maxconns - socket.write("Content-type: text/plain\r\n\r\n") - socket.write(@busy_msg) - else - process_request(request, body, socket) - end - end - end - - - def process_request(request, body, socket) - return if socket.closed? - cgi = SCGIFixed.new(request, body, socket) - begin - synchronize do - # unfortuneatly, the dependencies.rb file is not thread safe and will throw exceptions - # claiming that Dispatcher is not defined, or that other classes are missing. We have - # to sync the dispatch call to get around this. - Dispatcher.dispatch(cgi, ActionController::CgiRequest::DEFAULT_SESSION_OPTIONS, cgi.stdoutput) - end - rescue IOError - error("received IOError #$! when handling client. Your web server doesn't like me.") - rescue Object => rails_error - error("calling Dispatcher.dispatch", rails_error) - end - end - - - def split_body(data) - result = {} - el = data.split("\0") - i = 0 - len = el.length - while i < len - result[el[i]] = el[i+1] - i += 1 - end - - return result - end - - def status - pid = Process.pid - open("#@status_dir/scgi_rails-status.#{pid}","w") do |f| - status = { - 'time' => Time.now, 'pid' => pid, 'settings' => @settings, - 'env' => @env, 'status_dir' => @status_dir, 'started' => @started, - 'max_conns' => @maxconns, 'total_conns' => @total_conns, - 'conns' => @conns, 'errors' => @errors, 'systimes' => Process.times - } - f.write(YAML.dump(status)) - end - end -end - - -def signal_children(pidfile, signal) - if not File.exists? pidfile - log("No #{pidfile} as specified. Probably nothing running or wrong path.") - exit 1 - end - - childpids = YAML.load_file(pidfile) - childpids.each do |pid| - begin - log("Signaling pid #{pid}") - Process.kill(signal, pid) - rescue Object - log("Couldn't send #{signal} signal to #{pid} pid.") - end - end -end - - -def make_command(parent, name, desc, options) - cmd = CmdParse::Command.new(name, false ) - cmd.short_desc = desc - settings = {} - cmd.options = CmdParse::OptionParserWrapper.new do |opt| - options.each do |short, long, info, symbol| - opt.on(short, long, info) {|val| settings[symbol] = val} - end - end - cmd.set_execution_block do |args| - yield(settings, args) - end - parent.add_command(cmd) -end - - -cmd = CmdParse::CommandParser.new( true ) -cmd.program_name = "scgi_rails" -cmd.program_version = [0, 2, 1] -cmd.options = CmdParse::OptionParserWrapper.new do |opt| - opt.separator "Global options:" - opt.on("--verbose", "Be verbose when outputting info") {|t| $verbose = true } -end - -cmd.add_command( CmdParse::HelpCommand.new ) -cmd.add_command( CmdParse::VersionCommand.new ) - -make_command(cmd, 'start', "Start Rails Application", -[['-e','--env STRING','Rails environment', :env], -['-D','--[no-]debug', 'Do not fork children, stay in foreground.', :debug], -['-h','--host STRING', 'IP address to bind as server', :host], -['-p','--port NUMBER', 'Port to bind to', :port], -['-c','--children NUMBER', 'Number of children to start (not win32)', :children], -['-f','--pid-file PATH', 'Where to read the list of running children', :pid_file], -['-l','--log-file PATH', 'Use a different log from from log/scgi.log', :logfile], -['-t','--throttle NUMBER', 'Max conn/second to allow.', :conns_second], -['-m','--max-conns NUMBER', 'Max simultaneous connections before the busy message', :maxconns], -['-b','--busy-msg', 'Busy message given to clients over the max connections ("busy")', :busy_msg], -['-s','--status-dir PATH', 'Where to put the status files', :status_dir]]) do |settings, args| - scgi = SCGIProcessor.new(settings) - begin - trap("HUP") { scgi.status } - rescue Object - error("Could not setup a SIGHUP handler. You won't be able to get status.") - end - - scgi.run -end - - -make_command(cmd, 'status', "Get status from all running children", -[['-s','--status-dir PATH', 'Where to put the status files', :status_dir], -['-f','--pid-file PATH', 'Where to read the list of running children', :pid_file]]) do |settings, args| - signal_children(settings[:pid_file] || 'children.yaml', "HUP") - log("Status files for each child should show up in the configured status directory (/tmp by default).") -end - -make_command(cmd, 'stop', "Stop all running children", -[['-s','--sig SIGNAL', 'Where to put the status files', :signal], -['-n','--[no-]delete', 'Keep the children.yaml file rather than delete', :nodelete], -['-f','--pid-file PATH', 'Where to read the list of running children', :pid_file]]) do |settings, args| - pid_file = settings[:pid_file] || "children.yaml" - signal_children(pid_file, settings[:signal] || "INT") - if not settings[:nodelete] and File.exist?(pid_file) - File.unlink(pid_file) - end -end - -cmd.parse \ No newline at end of file diff --git a/script/server b/script/server deleted file mode 100755 index 9436fde..0000000 --- a/script/server +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/ruby18 -require File.dirname(__FILE__) + '/../config/boot' -require 'commands/server' \ No newline at end of file diff --git a/test/fixtures/expressions.yml b/test/fixtures/expressions.yml deleted file mode 100644 index e3fa03c..0000000 --- a/test/fixtures/expressions.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html -first_expression: - id: 1 -another_expression: - id: 2 diff --git a/test/fixtures/filters.yml b/test/fixtures/filters.yml deleted file mode 100644 index b36dd3b..0000000 --- a/test/fixtures/filters.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html -first_filter: - id: 1 -another_filter: - id: 2 diff --git a/test/fixtures/users.yml b/test/fixtures/users.yml deleted file mode 100644 index c884985..0000000 --- a/test/fixtures/users.yml +++ /dev/null @@ -1,5 +0,0 @@ -# Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html -first_user: - id: 1 -another_user: - id: 2 diff --git a/test/performance/browsing_test.rb b/test/performance/browsing_test.rb new file mode 100755 index 0000000..867fc8c --- /dev/null +++ b/test/performance/browsing_test.rb @@ -0,0 +1,9 @@ +require 'test_helper' +require 'rails/performance_test_help' + +# Profiling results for each test method are written to tmp/performance. +class BrowsingTest < ActionDispatch::PerformanceTest + def test_homepage + get '/' + end +end diff --git a/test/test_helper.rb b/test/test_helper.rb old mode 100644 new mode 100755 index 0a4be59..8bf1192 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,13 +1,13 @@ ENV["RAILS_ENV"] = "test" -require File.expand_path(File.dirname(__FILE__) + "/../config/environment") -require 'test_help' +require File.expand_path('../../config/environment', __FILE__) +require 'rails/test_help' -class Test::Unit::TestCase - # Turn off transactional fixtures if you're working with MyISAM tables in MySQL - self.use_transactional_fixtures = true - - # Instantiated fixtures are slow, but give you @david where you otherwise would need people(:david) - self.use_instantiated_fixtures = false +class ActiveSupport::TestCase + # Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order. + # + # Note: You'll currently still have to declare fixtures explicitly in integration tests + # -- they do not yet inherit this setting + fixtures :all # Add more helper methods to be used by all tests here... -end \ No newline at end of file +end diff --git a/test/unit/expression_test.rb b/test/unit/expression_test.rb deleted file mode 100644 index 94ff355..0000000 --- a/test/unit/expression_test.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' - -class ExpressionTest < Test::Unit::TestCase - fixtures :expressions - - def setup - @expression = Expression.find(1) - end - - # Replace this with your real tests. - def test_truth - assert_kind_of Expression, @expression - end -end diff --git a/test/unit/filter_test.rb b/test/unit/filter_test.rb deleted file mode 100644 index 019aec9..0000000 --- a/test/unit/filter_test.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' - -class FilterTest < Test::Unit::TestCase - fixtures :filters - - def setup - @filter = Filter.find(1) - end - - # Replace this with your real tests. - def test_truth - assert_kind_of Filter, @filter - end -end diff --git a/test/unit/user_test.rb b/test/unit/user_test.rb deleted file mode 100644 index 24c6258..0000000 --- a/test/unit/user_test.rb +++ /dev/null @@ -1,14 +0,0 @@ -require File.dirname(__FILE__) + '/../test_helper' - -class UserTest < Test::Unit::TestCase - fixtures :users - - def setup - @user = User.find(1) - end - - # Replace this with your real tests. - def test_truth - assert_kind_of User, @user - end -end diff --git a/vendor/ezcrypto-0.1.1/._README b/vendor/ezcrypto-0.1.1/._README old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/._rakefile b/vendor/ezcrypto-0.1.1/._rakefile old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/MIT-LICENSE b/vendor/ezcrypto-0.1.1/MIT-LICENSE old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/README b/vendor/ezcrypto-0.1.1/README old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/lib/ezcrypto.rb b/vendor/ezcrypto-0.1.1/lib/ezcrypto.rb old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/rakefile b/vendor/ezcrypto-0.1.1/rakefile old mode 100644 new mode 100755 diff --git a/vendor/ezcrypto-0.1.1/test/ezcrypto_test.rb b/vendor/ezcrypto-0.1.1/test/ezcrypto_test.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/.gitkeep b/vendor/plugins/.gitkeep new file mode 100755 index 0000000..e69de29 diff --git a/vendor/plugins/auto_complete/README b/vendor/plugins/auto_complete/README old mode 100644 new mode 100755 diff --git a/vendor/plugins/auto_complete/Rakefile b/vendor/plugins/auto_complete/Rakefile old mode 100644 new mode 100755 diff --git a/vendor/plugins/auto_complete/init.rb b/vendor/plugins/auto_complete/init.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/auto_complete/lib/auto_complete.rb b/vendor/plugins/auto_complete/lib/auto_complete.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb b/vendor/plugins/auto_complete/lib/auto_complete_macros_helper.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/auto_complete/test/auto_complete_test.rb b/vendor/plugins/auto_complete/test/auto_complete_test.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/CHANGELOG b/vendor/plugins/classic_pagination/CHANGELOG old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/README b/vendor/plugins/classic_pagination/README old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/Rakefile b/vendor/plugins/classic_pagination/Rakefile old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/init.rb b/vendor/plugins/classic_pagination/init.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/install.rb b/vendor/plugins/classic_pagination/install.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/lib/pagination.rb b/vendor/plugins/classic_pagination/lib/pagination.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/lib/pagination_helper.rb b/vendor/plugins/classic_pagination/lib/pagination_helper.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/companies.yml b/vendor/plugins/classic_pagination/test/fixtures/companies.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/company.rb b/vendor/plugins/classic_pagination/test/fixtures/company.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/developer.rb b/vendor/plugins/classic_pagination/test/fixtures/developer.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/developers.yml b/vendor/plugins/classic_pagination/test/fixtures/developers.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml b/vendor/plugins/classic_pagination/test/fixtures/developers_projects.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/project.rb b/vendor/plugins/classic_pagination/test/fixtures/project.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/projects.yml b/vendor/plugins/classic_pagination/test/fixtures/projects.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/replies.yml b/vendor/plugins/classic_pagination/test/fixtures/replies.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/reply.rb b/vendor/plugins/classic_pagination/test/fixtures/reply.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/schema.sql b/vendor/plugins/classic_pagination/test/fixtures/schema.sql old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/topic.rb b/vendor/plugins/classic_pagination/test/fixtures/topic.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/fixtures/topics.yml b/vendor/plugins/classic_pagination/test/fixtures/topics.yml old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/helper.rb b/vendor/plugins/classic_pagination/test/helper.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/pagination_helper_test.rb b/vendor/plugins/classic_pagination/test/pagination_helper_test.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/classic_pagination/test/pagination_test.rb b/vendor/plugins/classic_pagination/test/pagination_test.rb old mode 100644 new mode 100755 diff --git a/vendor/plugins/will_paginate/.autotest b/vendor/plugins/will_paginate/.autotest deleted file mode 100644 index ade45eb..0000000 --- a/vendor/plugins/will_paginate/.autotest +++ /dev/null @@ -1,54 +0,0 @@ -Autotest.add_hook :initialize do |at| - - at.libs = 'lib:spec' - - at.clear_mappings - - at.add_mapping(%r{^lib/will_paginate/(.+)\.rb$}) { |_, match| - "spec/#{match[1]}_spec.rb" - } - at.add_mapping(%r{^spec/.+_spec\.rb$}) { |f, _| f } - at.add_mapping(%r{^spec/(finders/activerecord_test_connector.rb|database.yml|fixtures/.+)$}) { - 'spec/finders/active_record_spec.rb' - } - at.add_mapping(%r{^spec/((spec_helper|shared/.+)\.rb|spec.opts)$}) { - # simply re-run all specs - at.files_matching %r{^spec/.+_spec\.rb$} - } - - # add these to ignore list - %w{ .git test/ rails/ Rakefile README.rdoc init.rb .autotest - doc/ coverage/ LICENSE CHANGELOG .manifest will_paginate.gemspec examples/ - spec/tasks.rake spec/console spec/rcov.opts - }.each { |path| at.add_exception path } - -end - -Autotest::Rspec.class_eval do - # RSpec guys forgot about `libs` in make_test_cmd - def make_test_cmd_with_libs(files_to_test) - make_test_cmd_without_libs(files_to_test).sub(' -S ', " -S -I#{libs} ") - end - - alias :make_test_cmd_without_libs :make_test_cmd - alias :make_test_cmd :make_test_cmd_with_libs - - # ugh, we have to monkeypatch Autotest ... - # the regexp it generates for the exception list just matches too much - # - # SOLUTION: wrap it up in another regexp that anchors the whole expression to - # the beginning of the path - def exceptions - unless defined? @exceptions then - if @exception_list.empty? then - @exceptions = nil - else - # old (BAD): - # @exceptions = Regexp.union(*@exception_list) - @exceptions = /^\.\/#{Regexp.union(*@exception_list)}/ - end - end - - @exceptions - end -end diff --git a/vendor/plugins/will_paginate/.gitignore b/vendor/plugins/will_paginate/.gitignore deleted file mode 100644 index 2b437b9..0000000 --- a/vendor/plugins/will_paginate/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -/doc -/rails -*.gem -/coverage diff --git a/vendor/plugins/will_paginate/.manifest b/vendor/plugins/will_paginate/.manifest deleted file mode 100644 index aca08ee..0000000 --- a/vendor/plugins/will_paginate/.manifest +++ /dev/null @@ -1,66 +0,0 @@ -CHANGELOG.rdoc -LICENSE -README.rdoc -Rakefile -examples -examples/apple-circle.gif -examples/index.haml -examples/index.html -examples/pagination.css -examples/pagination.sass -init.rb -lib -lib/will_paginate -lib/will_paginate.rb -lib/will_paginate/array.rb -lib/will_paginate/collection.rb -lib/will_paginate/core_ext.rb -lib/will_paginate/deprecation.rb -lib/will_paginate/finders -lib/will_paginate/finders.rb -lib/will_paginate/finders/active_record -lib/will_paginate/finders/active_record.rb -lib/will_paginate/finders/active_record/named_scope.rb -lib/will_paginate/finders/active_record/named_scope_patch.rb -lib/will_paginate/finders/active_resource.rb -lib/will_paginate/finders/base.rb -lib/will_paginate/finders/data_mapper.rb -lib/will_paginate/version.rb -lib/will_paginate/view_helpers -lib/will_paginate/view_helpers.rb -lib/will_paginate/view_helpers/action_view.rb -lib/will_paginate/view_helpers/base.rb -lib/will_paginate/view_helpers/link_renderer.rb -lib/will_paginate/view_helpers/link_renderer_base.rb -spec -spec/collection_spec.rb -spec/console -spec/console_fixtures.rb -spec/database.yml -spec/finders -spec/finders/active_record_spec.rb -spec/finders/active_resource_spec.rb -spec/finders/activerecord_test_connector.rb -spec/finders_spec.rb -spec/fixtures -spec/fixtures/admin.rb -spec/fixtures/developer.rb -spec/fixtures/developers_projects.yml -spec/fixtures/project.rb -spec/fixtures/projects.yml -spec/fixtures/replies.yml -spec/fixtures/reply.rb -spec/fixtures/schema.rb -spec/fixtures/topic.rb -spec/fixtures/topics.yml -spec/fixtures/user.rb -spec/fixtures/users.yml -spec/rcov.opts -spec/spec.opts -spec/spec_helper.rb -spec/tasks.rake -spec/view_helpers -spec/view_helpers/action_view_spec.rb -spec/view_helpers/base_spec.rb -spec/view_helpers/link_renderer_base_spec.rb -spec/view_helpers/view_example_group.rb \ No newline at end of file diff --git a/vendor/plugins/will_paginate/CHANGELOG.rdoc b/vendor/plugins/will_paginate/CHANGELOG.rdoc deleted file mode 100644 index 829c0bb..0000000 --- a/vendor/plugins/will_paginate/CHANGELOG.rdoc +++ /dev/null @@ -1,104 +0,0 @@ -== "agnostic" branch - -* setup Autotest -* added per_page=(limit) attribute writer to set default per_page -* Remove :include option from count_all query when possible (Rails 2.1) -* added WP::ViewHelpers::ActionView and LinkRenderer -* specs for ViewHelpers::Base and LinkRendererBase -* created LinkRendererBase that implements windowed visible page numbers logic -* created WP::ViewHelpers::Base abstract module that implements generic view helpers -* converted finder tests to specs -* added WP::Finders::DataMapper -* added WP::Finders::ActiveRecord mixin for ActiveRecord::Base -* created WP::Finders::Base abstract module that implements generic pagination logic -* removed dependency to ActiveSupport - -=== TODO: - -* Make a concrete implementation of LinkRendererBase that will generate HTML for both ActionView and Merb -* ActionView and Merb integration tests for view helpers -* 3c4725 Oops, I used return in an iterator block. I obviously write too much JavaScript -* 537f22 ensure that 'href' values in pagination links are escaped URLs - -== 2.3.1, released 2008-05-04 - -* Fixed page numbers not showing with custom routes and implicit first page -* Try to use Hanna for documentation (falls back to default RDoc template if not) - -== 2.3.0, released 2008-04-29 - -* Changed LinkRenderer to receive collection, options and reference to view template NOT in - constructor, but with the #prepare method. This is a step towards supporting passing of - LinkRenderer (or subclass) instances that may be preconfigured in some way -* LinkRenderer now has #page_link and #page_span methods for easier customization of output in - subclasses -* Changed page_entries_info() method to adjust its output according to humanized class name of - collection items. Override this with :entry_name parameter (singular). - - page_entries_info(@posts) - #-> "Displaying all 12 posts" - page_entries_info(@posts, :entry_name => 'item') - #-> "Displaying all 12 items" - -== 2.2.3, released 2008-04-26 - -* will_paginate gem is no longer published on RubyForge, but on - gems.github.com: - - gem sources -a http://gems.github.com/ (you only need to do this once) - gem install mislav-will_paginate - -* extract reusable pagination testing stuff into WillPaginate::View -* rethink the page URL construction mechanizm to be more bulletproof when - combined with custom routing for page parameter -* test that anchor parameter can be used in pagination links - -== 2.2.2, released 2008-04-21 - -* Add support for page parameter in custom routes like "/foo/page/2" -* Change output of "page_entries_info" on single-page collection and erraneous - output with empty collection as reported by Tim Chater - -== 2.2.1, released 2008-04-08 - -* take less risky path when monkeypatching named_scope; fix that it no longer - requires ActiveRecord::VERSION -* use strings in "respond_to?" calls to work around a bug in acts_as_ferret - stable (ugh) -* add rake release task - - -== 2.2.0, released 2008-04-07 - -=== API changes -* Rename WillPaginate::Collection#page_count to "total_pages" for consistency. - If you implemented this interface, change your implementation accordingly. -* Remove old, deprecated style of calling Array#paginate as "paginate(page, - per_page)". If you want to specify :page, :per_page or :total_entries, use a - parameter hash. -* Rename LinkRenderer#url_options to "url_for" and drastically optimize it - -=== View changes -* Added "prev_page" and "next_page" CSS classes on previous/next page buttons -* Add examples of pagination links styling in "examples/index.html" -* Change gap in pagination links from "..." to - "". -* Add "paginated_section", a block helper that renders pagination both above and - below content in the block -* Add rel="prev|next|start" to page links - -=== Other - -* Add ability to opt-in for Rails 2.1 feature "named_scope" by calling - WillPaginate.enable_named_scope (tested in Rails 1.2.6 and 2.0.2) -* Support complex page parameters like "developers[page]" -* Move Array#paginate definition to will_paginate/array.rb. You can now easily - use pagination on arrays outside of Rails: - - gem 'will_paginate' - require 'will_paginate/array' - -* Add "paginated_each" method for iterating through every record by loading only - one page of records at the time -* Rails 2: Rescue from WillPaginate::InvalidPage error with 404 Not Found by - default diff --git a/vendor/plugins/will_paginate/LICENSE b/vendor/plugins/will_paginate/LICENSE deleted file mode 100644 index 96a48cb..0000000 --- a/vendor/plugins/will_paginate/LICENSE +++ /dev/null @@ -1,18 +0,0 @@ -Copyright (c) 2007 PJ Hyett and Mislav Marohnić - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/plugins/will_paginate/README.rdoc b/vendor/plugins/will_paginate/README.rdoc deleted file mode 100644 index a402a7b..0000000 --- a/vendor/plugins/will_paginate/README.rdoc +++ /dev/null @@ -1,123 +0,0 @@ -= WillPaginate - -Pagination is just limiting the number of records displayed. Why should you let it get in your way -while developing? - -This is how you paginate on an ActiveRecord model: - - Post.paginate :page => 1, :order => 'created_at DESC' - -Most of the time it's as simple as replacing "find" with "paginate" and specifying the page you want. - -Some resources to get you started: - -* The {will_paginate project page}[http://github.com/mislav/will_paginate]; -* Your mind reels with questions? Join our {Google group}[http://groups.google.com/group/will_paginate]; -* {How to report bugs}[http://github.com/mislav/will_paginate/wikis/report-bugs]; -* {Watch the will_paginate screencast}[http://railscasts.com/episodes/51] by Ryan Bates. - - -== Installation - -The recommended way is that you get the gem: - - gem install --source=http://gems.github.com/ mislav-will_paginate - -After that you don't need the will_paginate plugin in your Rails application anymore. In -Rails 2.1, add a gem dependency: - - config.gem 'mislav-will_paginate', :lib => 'will_paginate', :version => '~> 2.5' - -If you're using Rails 2.0 or older, just add a simple require to the end of your -"config/environment.rb" instead: - - gem 'mislav-will_paginate', '~> 2.5' - require 'will_paginate' - -That's it. Remember to install the gem on all machines that you are deploying to. - -There are extensive {installation -instructions}[http://github.com/mislav/will_paginate/wikis/installation] on {the -wiki}[http://github.com/mislav/will_paginate/wikis]. - - -== Example usage - -Use a paginate finder in the controller: - - @posts = Post.paginate_by_board_id( - @board.id, - :page => params[:page], - :order => 'updated_at DESC' - ) - -Yeah, +paginate+ works just like +find+ -- it just doesn't fetch all the records. Don't forget to -tell it which page you want, or it will complain! Read more about WillPaginate::Finders. - -Render the posts in your view like you would normally do. When you need to render pagination, just -stick this in: - - <%= will_paginate @posts %> - -You're done. (Copy and paste the example fancy CSS styles from the bottom.) You can find the option -list at WillPaginate::ViewHelpers. - -How does it know how much items to fetch per page? It asks your model by calling its -per_page class method. You can define it like this: - - class Post < ActiveRecord::Base - def self.per_page() 50 end - end - -... or don't worry about it at all. WillPaginate defines it to be 30 by default. You can -always specify the count explicitly when calling +paginate+: - - @posts = Post.paginate :page => params[:page], :per_page => 50 - -The +paginate+ finder wraps the original finder and returns your result set that now has some new -properties. You can use the collection as you would use any other array. WillPaginate view helpers -also need that object to be able to render pagination: - -
    - <% for post in @posts -%> -
  1. Render `post` in some nice way.
  2. - <% end -%> -
- -

Now let's render us some pagination!

- <%= will_paginate @posts %> - -More detailed documentation: - -* WillPaginate::Finders for pagination on your models; -* WillPaginate::ViewHelpers for your views. - - -== Authors and credits - -Authors:: Mislav Marohnić, PJ Hyett -Original announcement:: http://errtheblog.com/post/929 -Original PHP source:: http://www.strangerstudios.com/sandbox/pagination/diggstyle.php - -All these people helped making will_paginate what it is now with their code contributions or just -simply awesome ideas: - -Chris Wanstrath, Dr. Nic Williams, K. Adam Christensen, Mike Garey, Bence Golda, Matt Aimonetti, -Charles Brian Quinn, Desi McAdam, James Coglan, Matijs van Zuijlen, Maria, Brendan Ribera, Todd -Willey, Bryan Helmkamp, Jan Berkel, Lourens Naudé, Rick Olson, Russell Norris, Piotr Usewicz, Chris -Eppstein. - - -== Usable pagination in the UI - -There are some CSS styles to get you started in the "examples/" directory. They are showcased in the -"examples/index.html" file. - -More reading about pagination as design pattern: - -* {Pagination 101}[http://kurafire.net/log/archive/2007/06/22/pagination-101]; -* {Pagination gallery}[http://www.smashingmagazine.com/2007/11/16/pagination-gallery-examples-and-good-practices/] featured on Smashing Magazine; -* {Pagination design pattern}[http://developer.yahoo.com/ypatterns/parent.php?pattern=pagination] on Yahoo Design Pattern Library. - -Want to discuss, request features, ask questions? Join the {Google -group}[http://groups.google.com/group/will_paginate]. \ No newline at end of file diff --git a/vendor/plugins/will_paginate/Rakefile b/vendor/plugins/will_paginate/Rakefile deleted file mode 100644 index 81672f6..0000000 --- a/vendor/plugins/will_paginate/Rakefile +++ /dev/null @@ -1,62 +0,0 @@ -require 'rubygems' -begin - hanna_dir = '/Users/mislav/Projects/Hanna/lib' - $:.unshift hanna_dir if File.exists? hanna_dir - require 'hanna/rdoctask' -rescue LoadError - require 'rake' - require 'rake/rdoctask' -end -load 'spec/tasks.rake' - -desc 'Default: run specs.' -task :default => :spec - -desc 'Generate RDoc documentation for the will_paginate plugin.' -Rake::RDocTask.new(:rdoc) do |rdoc| - rdoc.rdoc_files.include('README.rdoc', 'LICENSE', 'CHANGELOG'). - include('lib/**/*.rb'). - exclude('lib/will_paginate/named_scope*'). - exclude('lib/will_paginate/deprecation.rb'). - exclude('lib/will_paginate/version.rb') - - rdoc.main = "README.rdoc" # page to start on - rdoc.title = "will_paginate documentation" - - rdoc.rdoc_dir = 'doc' # rdoc output folder - rdoc.options << '--inline-source' << '--charset=UTF-8' - rdoc.options << '--webcvs=http://github.com/mislav/will_paginate/tree/master/' -end - -desc %{Update ".manifest" with the latest list of project filenames. Respect\ -.gitignore by excluding everything that git ignores. Update `files` and\ -`test_files` arrays in "*.gemspec" file if it's present.} -task :manifest do - list = Dir['**/*'].sort - spec_file = Dir['*.gemspec'].first - list -= [spec_file] if spec_file - - File.read('.gitignore').each_line do |glob| - glob = glob.chomp.sub(/^\//, '') - list -= Dir[glob] - list -= Dir["#{glob}/**/*"] if File.directory?(glob) and !File.symlink?(glob) - puts "excluding #{glob}" - end - - if spec_file - spec = File.read spec_file - spec.gsub! /^(\s* s.(test_)?files \s* = \s* )( \[ [^\]]* \] | %w\( [^)]* \) )/mx do - assignment = $1 - bunch = $2 ? list.grep(/^(test|spec)\//) : list - '%s%%w(%s)' % [assignment, bunch.join(' ')] - end - - File.open(spec_file, 'w') {|f| f << spec } - end - File.open('.manifest', 'w') {|f| f << list.join("\n") } -end - -task :examples do - %x(haml examples/index.haml examples/index.html) - %x(sass examples/pagination.sass examples/pagination.css) -end \ No newline at end of file diff --git a/vendor/plugins/will_paginate/examples/apple-circle.gif b/vendor/plugins/will_paginate/examples/apple-circle.gif deleted file mode 100644 index df8cbf7c8d47a7b93f2c7729c5d16851bbf3c6d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178 zcmZ?wbhEHb6l4%&*v!Ci|Ni}l4m|8C-HDr=l Yl-uT7r^S~vw@wPtla!Vf7G$sn0I}Ch00000 diff --git a/vendor/plugins/will_paginate/examples/index.haml b/vendor/plugins/will_paginate/examples/index.haml deleted file mode 100644 index fb41ac8..0000000 --- a/vendor/plugins/will_paginate/examples/index.haml +++ /dev/null @@ -1,69 +0,0 @@ -!!! -%html -%head - %title Samples of pagination styling for will_paginate - %link{ :rel => 'stylesheet', :type => 'text/css', :href => 'pagination.css' } - %style{ :type => 'text/css' } - :sass - html - :margin 0 - :padding 0 - :background #999 - :font normal 76% "Lucida Grande", Verdana, Helvetica, sans-serif - body - :margin 2em - :padding 2em - :border 2px solid gray - :background white - :color #222 - h1 - :font-size 2em - :font-weight normal - :margin 0 0 1em 0 - h2 - :font-size 1.4em - :margin 1em 0 .5em 0 - pre - :font-size 13px - :font-family Monaco, "DejaVu Sans Mono", "Bitstream Vera Mono", "Courier New", monospace - -- pagination = '« Previous 1 3 4 5 6 7 8 9 29 30 ' -- pagination_no_page_links = '« Previous ' - -%body - %h1 Samples of pagination styling for will_paginate - %p - Find these styles in "examples/pagination.css" of will_paginate library. - There is a Sass version of it for all you sassy people. - %p - Read about good rules for pagination: - %a{ :href => 'http://kurafire.net/log/archive/2007/06/22/pagination-101' } Pagination 101 - %p - %em Warning: - page links below don't lead anywhere (so don't click on them). - - %h2 Unstyled pagination (ewww!) - %div= pagination - - %h2 Digg.com - .digg_pagination= pagination - - %h2 Digg-style, no page links - .digg_pagination= pagination_no_page_links - %p Code that renders this: - %pre= '%s' % %[<%= will_paginate @posts, :page_links => false %>].gsub('<', '<').gsub('>', '>') - - %h2 Digg-style, extra content - .digg_pagination - .page_info Displaying entries 1 - 6 of 180 in total - = pagination - %p Code that renders this: - %pre= '%s' % %[
\n
\n <%= page_entries_info @posts %>\n
\n <%= will_paginate @posts, :container => false %>\n
].gsub('<', '<').gsub('>', '>') - - %h2 Apple.com store - .apple_pagination= pagination - - %h2 Flickr.com - .flickr_pagination - = pagination - .page_info (118 photos) diff --git a/vendor/plugins/will_paginate/examples/index.html b/vendor/plugins/will_paginate/examples/index.html deleted file mode 100644 index 858f7c6..0000000 --- a/vendor/plugins/will_paginate/examples/index.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - Samples of pagination styling for will_paginate - - - - -

Samples of pagination styling for will_paginate

-

- Find these styles in "examples/pagination.css" of will_paginate library. - There is a Sass version of it for all you sassy people. -

-

- Read about good rules for pagination: - Pagination 101 -

-

- Warning: - page links below don't lead anywhere (so don't click on them). -

-

- Unstyled pagination (ewww!) -

-
- « Previous 1 3 4 5 6 7 8 9 29 30 -
-

Digg.com

-
- « Previous 1 3 4 5 6 7 8 9 29 30 -
-

Digg-style, no page links

-
- « Previous -
-

Code that renders this:

-
-    <%= will_paginate @posts, :page_links => false %>
-  
-

Digg-style, extra content

-
-
- Displaying entries 1 - 6 of 180 in total -
- « Previous 1 3 4 5 6 7 8 9 29 30 -
-

Code that renders this:

-
-    <div class="digg_pagination">
-      <div clas="page_info">
-        <%= page_entries_info @posts %>
-      </div>
-      <%= will_paginate @posts, :container => false %>
-    </div>
-  
-

Apple.com store

-
- « Previous 1 3 4 5 6 7 8 9 29 30 -
-

Flickr.com

-
- « Previous 1 3 4 5 6 7 8 9 29 30 -
(118 photos)
-
- diff --git a/vendor/plugins/will_paginate/examples/pagination.css b/vendor/plugins/will_paginate/examples/pagination.css deleted file mode 100644 index b55e977..0000000 --- a/vendor/plugins/will_paginate/examples/pagination.css +++ /dev/null @@ -1,90 +0,0 @@ -.digg_pagination { - background: white; - /* self-clearing method: */ } - .digg_pagination a, .digg_pagination span { - padding: .2em .5em; - display: block; - float: left; - margin-right: 1px; } - .digg_pagination span.disabled { - color: #999; - border: 1px solid #DDD; } - .digg_pagination span.current { - font-weight: bold; - background: #2E6AB1; - color: white; - border: 1px solid #2E6AB1; } - .digg_pagination a { - text-decoration: none; - color: #105CB6; - border: 1px solid #9AAFE5; } - .digg_pagination a:hover, .digg_pagination a:focus { - color: #003; - border-color: #003; } - .digg_pagination .page_info { - background: #2E6AB1; - color: white; - padding: .4em .6em; - width: 22em; - margin-bottom: .3em; - text-align: center; } - .digg_pagination .page_info b { - color: #003; - background: #6aa6ed; - padding: .1em .25em; } - .digg_pagination:after { - content: "."; - display: block; - height: 0; - clear: both; - visibility: hidden; } - * html .digg_pagination { - height: 1%; } - *:first-child+html .digg_pagination { - overflow: hidden; } - -.apple_pagination { - background: #F1F1F1; - border: 1px solid #E5E5E5; - text-align: center; - padding: 1em; } - .apple_pagination a, .apple_pagination span { - padding: .2em .3em; } - .apple_pagination span.disabled { - color: #AAA; } - .apple_pagination span.current { - font-weight: bold; - background: transparent url(apple-circle.gif) no-repeat 50% 50%; } - .apple_pagination a { - text-decoration: none; - color: black; } - .apple_pagination a:hover, .apple_pagination a:focus { - text-decoration: underline; } - -.flickr_pagination { - text-align: center; - padding: .3em; } - .flickr_pagination a, .flickr_pagination span { - padding: .2em .5em; } - .flickr_pagination span.disabled { - color: #AAA; } - .flickr_pagination span.current { - font-weight: bold; - color: #FF0084; } - .flickr_pagination a { - border: 1px solid #DDDDDD; - color: #0063DC; - text-decoration: none; } - .flickr_pagination a:hover, .flickr_pagination a:focus { - border-color: #003366; - background: #0063DC; - color: white; } - .flickr_pagination .page_info { - color: #aaa; - padding-top: .8em; } - .flickr_pagination .prev_page, .flickr_pagination .next_page { - border-width: 2px; } - .flickr_pagination .prev_page { - margin-right: 1em; } - .flickr_pagination .next_page { - margin-left: 1em; } diff --git a/vendor/plugins/will_paginate/examples/pagination.sass b/vendor/plugins/will_paginate/examples/pagination.sass deleted file mode 100644 index 737a97b..0000000 --- a/vendor/plugins/will_paginate/examples/pagination.sass +++ /dev/null @@ -1,91 +0,0 @@ -.digg_pagination - :background white - a, span - :padding .2em .5em - :display block - :float left - :margin-right 1px - span.disabled - :color #999 - :border 1px solid #DDD - span.current - :font-weight bold - :background #2E6AB1 - :color white - :border 1px solid #2E6AB1 - a - :text-decoration none - :color #105CB6 - :border 1px solid #9AAFE5 - &:hover, &:focus - :color #003 - :border-color #003 - .page_info - :background #2E6AB1 - :color white - :padding .4em .6em - :width 22em - :margin-bottom .3em - :text-align center - b - :color #003 - :background = #2E6AB1 + 60 - :padding .1em .25em - - /* self-clearing method: - &:after - :content "." - :display block - :height 0 - :clear both - :visibility hidden - * html & - :height 1% - *:first-child+html & - :overflow hidden - -.apple_pagination - :background #F1F1F1 - :border 1px solid #E5E5E5 - :text-align center - :padding 1em - a, span - :padding .2em .3em - span.disabled - :color #AAA - span.current - :font-weight bold - :background transparent url(apple-circle.gif) no-repeat 50% 50% - a - :text-decoration none - :color black - &:hover, &:focus - :text-decoration underline - -.flickr_pagination - :text-align center - :padding .3em - a, span - :padding .2em .5em - span.disabled - :color #AAA - span.current - :font-weight bold - :color #FF0084 - a - :border 1px solid #DDDDDD - :color #0063DC - :text-decoration none - &:hover, &:focus - :border-color #003366 - :background #0063DC - :color white - .page_info - :color #aaa - :padding-top .8em - .prev_page, .next_page - :border-width 2px - .prev_page - :margin-right 1em - .next_page - :margin-left 1em diff --git a/vendor/plugins/will_paginate/init.rb b/vendor/plugins/will_paginate/init.rb deleted file mode 100644 index 838d30e..0000000 --- a/vendor/plugins/will_paginate/init.rb +++ /dev/null @@ -1 +0,0 @@ -require 'will_paginate' diff --git a/vendor/plugins/will_paginate/lib/will_paginate.rb b/vendor/plugins/will_paginate/lib/will_paginate.rb deleted file mode 100644 index ee81c5d..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate.rb +++ /dev/null @@ -1,43 +0,0 @@ -require 'will_paginate/deprecation' - -# = You *will* paginate! -# -# First read about WillPaginate::Finder::ClassMethods, then see -# WillPaginate::ViewHelpers. The magical array you're handling in-between is -# WillPaginate::Collection. -# -# Happy paginating! -module WillPaginate - def self.enable - Deprecation.warn "WillPaginate::enable() doesn't do anything anymore" - end - - # Enable named_scope, a feature of Rails 2.1, even if you have older Rails - # (tested on Rails 2.0.2 and 1.2.6). - # - # You can pass +false+ for +patch+ parameter to skip monkeypatching - # *associations*. Use this if you feel that named_scope broke - # has_many, has_many :through or has_and_belongs_to_many associations in - # your app. By passing +false+, you can still use named_scope in - # your models, but not through associations. - def self.enable_named_scope(patch = true) - return if defined? ActiveRecord::NamedScope - require 'will_paginate/finders/active_record/named_scope' - require 'will_paginate/finders/active_record/named_scope_patch' if patch - - ActiveRecord::Base.send :include, WillPaginate::NamedScope - end -end - -if defined?(Rails) - require 'will_paginate/view_helpers/action_view' if defined?(ActionController) - require 'will_paginate/finders/active_record' if defined?(ActiveRecord) -end - -if defined?(Merb::Plugins) - require 'will_paginate/collection' - require 'will_paginate/view_helpers/base' - require 'will_paginate/view_helpers/link_renderer' - # this only includes will_paginate view stuff in Merb (not finder adapters) - Merb::AbstractController.send(:include, WillPaginate::ViewHelpers::Base) -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/array.rb b/vendor/plugins/will_paginate/lib/will_paginate/array.rb deleted file mode 100644 index 1076760..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/array.rb +++ /dev/null @@ -1,33 +0,0 @@ -require 'will_paginate/collection' - -class Array - # Paginates a static array (extracting a subset of it). The result is a - # WillPaginate::Collection instance, which is an array with few more - # properties about its paginated state. - # - # Parameters: - # * :page - current page, defaults to 1 - # * :per_page - limit of items per page, defaults to 30 - # * :total_entries - total number of items in the array, defaults to - # array.length (obviously) - # - # Example: - # arr = ['a', 'b', 'c', 'd', 'e'] - # paged = arr.paginate(:per_page => 2) #-> ['a', 'b'] - # paged.total_entries #-> 5 - # arr.paginate(:page => 2, :per_page => 2) #-> ['c', 'd'] - # arr.paginate(:page => 3, :per_page => 2) #-> ['e'] - # - # This method was originally {suggested by Desi - # McAdam}[http://www.desimcadam.com/archives/8] and later proved to be the - # most useful method of will_paginate library. - def paginate(options = {}) - raise ArgumentError, "parameter hash expected (got #{options.inspect})" unless Hash === options - - WillPaginate::Collection.create options[:page] || 1, - options[:per_page] || 30, - options[:total_entries] || self.length do |pager| - pager.replace self[pager.offset, pager.per_page].to_a - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/collection.rb b/vendor/plugins/will_paginate/lib/will_paginate/collection.rb deleted file mode 100644 index 89d992f..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/collection.rb +++ /dev/null @@ -1,145 +0,0 @@ -module WillPaginate - # = Invalid page number error - # This is an ArgumentError raised in case a page was requested that is either - # zero or negative number. You should decide how do deal with such errors in - # the controller. - # - # If you're using Rails 2, then this error will automatically get handled like - # 404 Not Found. The hook is in "will_paginate.rb": - # - # ActionController::Base.rescue_responses['WillPaginate::InvalidPage'] = :not_found - # - # If you don't like this, use your preffered method of rescuing exceptions in - # public from your controllers to handle this differently. The +rescue_from+ - # method is a nice addition to Rails 2. - # - # This error is *not* raised when a page further than the last page is - # requested. Use WillPaginate::Collection#out_of_bounds? method to - # check for those cases and manually deal with them as you see fit. - class InvalidPage < ArgumentError - def initialize(page, page_num) - super "#{page.inspect} given as value, which translates to '#{page_num}' as page number" - end - end - - # = The key to pagination - # Arrays returned from paginating finds are, in fact, instances of this little - # class. You may think of WillPaginate::Collection as an ordinary array with - # some extra properties. Those properties are used by view helpers to generate - # correct page links. - # - # WillPaginate::Collection also assists in rolling out your own pagination - # solutions: see +create+. - # - # If you are writing a library that provides a collection which you would like - # to conform to this API, you don't have to copy these methods over; simply - # make your plugin/gem dependant on the "will_paginate" gem: - # - # gem 'will_paginate' - # require 'will_paginate/collection' - # - # # now use WillPaginate::Collection directly or subclass it - class Collection < Array - attr_reader :current_page, :per_page, :total_entries, :total_pages - - # Arguments to the constructor are the current page number, per-page limit - # and the total number of entries. The last argument is optional because it - # is best to do lazy counting; in other words, count *conditionally* after - # populating the collection using the +replace+ method. - def initialize(page, per_page, total = nil) - @current_page = page.to_i - raise InvalidPage.new(page, @current_page) if @current_page < 1 - @per_page = per_page.to_i - raise ArgumentError, "`per_page` setting cannot be less than 1 (#{@per_page} given)" if @per_page < 1 - - self.total_entries = total if total - end - - # Just like +new+, but yields the object after instantiation and returns it - # afterwards. This is very useful for manual pagination: - # - # @entries = WillPaginate::Collection.create(1, 10) do |pager| - # result = Post.find(:all, :limit => pager.per_page, :offset => pager.offset) - # # inject the result array into the paginated collection: - # pager.replace(result) - # - # unless pager.total_entries - # # the pager didn't manage to guess the total count, do it manually - # pager.total_entries = Post.count - # end - # end - # - # The possibilities with this are endless. For another example, here is how - # WillPaginate used to define pagination for Array instances: - # - # Array.class_eval do - # def paginate(page = 1, per_page = 15) - # WillPaginate::Collection.create(page, per_page, size) do |pager| - # pager.replace self[pager.offset, pager.per_page].to_a - # end - # end - # end - # - # The Array#paginate API has since then changed, but this still serves as a - # fine example of WillPaginate::Collection usage. - def self.create(page, per_page, total = nil, &block) - pager = new(page, per_page, total) - yield pager - pager - end - - # Helper method that is true when someone tries to fetch a page with a - # larger number than the last page. Can be used in combination with flashes - # and redirecting. - def out_of_bounds? - current_page > total_pages - end - - # Current offset of the paginated collection. If we're on the first page, - # it is always 0. If we're on the 2nd page and there are 30 entries per page, - # the offset is 30. This property is useful if you want to render ordinals - # besides your records: simply start with offset + 1. - def offset - (current_page - 1) * per_page - end - - # current_page - 1 or nil if there is no previous page - def previous_page - current_page > 1 ? (current_page - 1) : nil - end - - # current_page + 1 or nil if there is no next page - def next_page - current_page < total_pages ? (current_page + 1) : nil - end - - def total_entries=(number) - @total_entries = number.to_i - @total_pages = (@total_entries / per_page.to_f).ceil - end - - # This is a magic wrapper for the original Array#replace method. It serves - # for populating the paginated collection after initialization. - # - # Why magic? Because it tries to guess the total number of entries judging - # by the size of given array. If it is shorter than +per_page+ limit, then we - # know we're on the last page. This trick is very useful for avoiding - # unnecessary hits to the database to do the counting after we fetched the - # data for the current page. - # - # However, after using +replace+ you should always test the value of - # +total_entries+ and set it to a proper value if it's +nil+. See the example - # in +create+. - def replace(array) - result = super - - # The collection is shorter then page limit? Rejoice, because - # then we know that we are on the last page! - if total_entries.nil? and length < per_page and (current_page == 1 or length > 0) - self.total_entries = offset + length - end - - result - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb b/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb deleted file mode 100644 index 4601f00..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/core_ext.rb +++ /dev/null @@ -1,58 +0,0 @@ -require 'set' -require 'will_paginate/array' - -## Everything below blatantly stolen from ActiveSupport :o - -unless Hash.instance_methods.include? 'except' - Hash.class_eval do - # Returns a new hash without the given keys. - def except(*keys) - rejected = Set.new(respond_to?(:convert_key) ? keys.map { |key| convert_key(key) } : keys) - reject { |key,| rejected.include?(key) } - end - - # Replaces the hash without only the given keys. - def except!(*keys) - replace(except(*keys)) - end - end -end - -unless Hash.instance_methods.include? 'slice' - Hash.class_eval do - # Returns a new hash with only the given keys. - def slice(*keys) - allowed = Set.new(respond_to?(:convert_key) ? keys.map { |key| convert_key(key) } : keys) - reject { |key,| !allowed.include?(key) } - end - - # Replaces the hash with only the given keys. - def slice!(*keys) - replace(slice(*keys)) - end - end -end - -unless String.instance_methods.include? 'constantize' - String.class_eval do - def constantize - unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ self - raise NameError, "#{self.inspect} is not a valid constant name!" - end - - Object.module_eval("::#{$1}", __FILE__, __LINE__) - end - end -end - -unless String.instance_methods.include? 'underscore' - String.class_eval do - def underscore - self.to_s.gsub(/::/, '/'). - gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). - gsub(/([a-z\d])([A-Z])/,'\1_\2'). - tr("-", "_"). - downcase - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/deprecation.rb b/vendor/plugins/will_paginate/lib/will_paginate/deprecation.rb deleted file mode 100644 index 2c44d1e..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/deprecation.rb +++ /dev/null @@ -1,50 +0,0 @@ -# borrowed from ActiveSupport::Deprecation -module WillPaginate - module Deprecation - def self.debug() @debug; end - def self.debug=(value) @debug = value; end - self.debug = false - - # Choose the default warn behavior according to RAILS_ENV. - # Ignore deprecation warnings in production. - BEHAVIORS = { - 'test' => Proc.new { |message, callstack| - $stderr.puts(message) - $stderr.puts callstack.join("\n ") if debug - }, - 'development' => Proc.new { |message, callstack| - logger = defined?(::RAILS_DEFAULT_LOGGER) ? ::RAILS_DEFAULT_LOGGER : Logger.new($stderr) - logger.warn message - logger.debug callstack.join("\n ") if debug - } - } - - def self.warn(message, callstack = caller) - if behavior - message = 'WillPaginate: ' + message.strip.gsub(/\s+/, ' ') - behavior.call(message, callstack) - end - end - - def self.default_behavior - if defined?(RAILS_ENV) - BEHAVIORS[RAILS_ENV.to_s] - else - BEHAVIORS['test'] - end - end - - # Behavior is a block that takes a message argument. - def self.behavior() @behavior; end - def self.behavior=(value) @behavior = value; end - self.behavior = default_behavior - - def self.silence - old_behavior = self.behavior - self.behavior = nil - yield - ensure - self.behavior = old_behavior - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders.rb deleted file mode 100644 index ca41f5b..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders.rb +++ /dev/null @@ -1,9 +0,0 @@ -require 'will_paginate/core_ext' - -module WillPaginate - # Database logic for different ORMs - # - # See WillPaginate::Finders::Base - module Finders - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record.rb deleted file mode 100644 index 84c99ff..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record.rb +++ /dev/null @@ -1,204 +0,0 @@ -require 'will_paginate/finders/base' -require 'active_record' - -module WillPaginate::Finders - # = Paginating finders for ActiveRecord models - # - # WillPaginate adds +paginate+, +per_page+ and other methods to - # ActiveRecord::Base class methods and associations. It also hooks into - # +method_missing+ to intercept pagination calls to dynamic finders such as - # +paginate_by_user_id+ and translate them to ordinary finders - # (+find_all_by_user_id+ in this case). - # - # In short, paginating finders are equivalent to ActiveRecord finders; the - # only difference is that we start with "paginate" instead of "find" and - # that :page is required parameter: - # - # @posts = Post.paginate :all, :page => params[:page], :order => 'created_at DESC' - # - # In paginating finders, "all" is implicit. There is no sense in paginating - # a single record, right? So, you can drop the :all argument: - # - # Post.paginate(...) => Post.find :all - # Post.paginate_all_by_something => Post.find_all_by_something - # Post.paginate_by_something => Post.find_all_by_something - # - # == The importance of the :order parameter - # - # In ActiveRecord finders, :order parameter specifies columns for - # the ORDER BY clause in SQL. It is important to have it, since - # pagination only makes sense with ordered sets. Without the ORDER - # BY clause, databases aren't required to do consistent ordering when - # performing SELECT queries; this is especially true for - # PostgreSQL. - # - # Therefore, make sure you are doing ordering on a column that makes the - # most sense in the current context. Make that obvious to the user, also. - # For perfomance reasons you will also want to add an index to that column. - module ActiveRecord - include WillPaginate::Finders::Base - - # Wraps +find_by_sql+ by simply adding LIMIT and OFFSET to your SQL string - # based on the params otherwise used by paginating finds: +page+ and - # +per_page+. - # - # Example: - # - # @developers = Developer.paginate_by_sql ['select * from developers where salary > ?', 80000], - # :page => params[:page], :per_page => 3 - # - # A query for counting rows will automatically be generated if you don't - # supply :total_entries. If you experience problems with this - # generated SQL, you might want to perform the count manually in your - # application. - # - def paginate_by_sql(sql, options) - WillPaginate::Collection.create(*wp_parse_options(options)) do |pager| - query = sanitize_sql(sql.dup) - original_query = query.dup - # add limit, offset - add_limit! query, :offset => pager.offset, :limit => pager.per_page - # perfom the find - pager.replace find_by_sql(query) - - unless pager.total_entries - count_query = original_query.sub /\bORDER\s+BY\s+[\w`,\s]+$/mi, '' - count_query = "SELECT COUNT(*) FROM (#{count_query})" - - unless ['oracle', 'oci'].include?(self.connection.adapter_name.downcase) - count_query << ' AS count_table' - end - # perform the count query - pager.total_entries = count_by_sql(count_query) - end - end - end - - def respond_to?(method, include_priv = false) #:nodoc: - super(method.to_s.sub(/^paginate/, 'find'), include_priv) - end - - protected - - def method_missing_with_paginate(method, *args, &block) #:nodoc: - # did somebody tried to paginate? if not, let them be - unless method.to_s.index('paginate') == 0 - return method_missing_without_paginate(method, *args, &block) - end - - # paginate finders are really just find_* with limit and offset - finder = method.to_s.sub('paginate', 'find') - finder.sub!('find', 'find_all') if finder.index('find_by_') == 0 - - options = args.pop - raise ArgumentError, 'parameter hash expected' unless options.respond_to? :symbolize_keys - options = options.dup - options[:finder] = finder - args << options - - paginate(*args, &block) - end - - def wp_query(options, pager, args, &block) - finder = (options.delete(:finder) || 'find').to_s - find_options = options.except(:count).update(:offset => pager.offset, :limit => pager.per_page) - - if finder == 'find' - if Array === args.first and !pager.total_entries - pager.total_entries = args.first.size - end - args << :all if args.empty? - end - - args << find_options - pager.replace send(finder, *args, &block) - - unless pager.total_entries - # magic counting - pager.total_entries = wp_count(options, args, finder) - end - end - - # Does the not-so-trivial job of finding out the total number of entries - # in the database. It relies on the ActiveRecord +count+ method. - def wp_count(options, args, finder) - # find out if we are in a model or an association proxy - klass = (@owner and @reflection) ? @reflection.klass : self - count_options = wp_parse_count_options(options, klass) - - # we may have to scope ... - counter = Proc.new { count(count_options) } - - count = if finder.index('find_') == 0 and klass.respond_to?(scoper = finder.sub('find', 'with')) - # scope_out adds a 'with_finder' method which acts like with_scope, if it's present - # then execute the count with the scoping provided by the with_finder - send(scoper, &counter) - elsif finder =~ /^find_(all_by|by)_([_a-zA-Z]\w*)$/ - # extract conditions from calls like "paginate_by_foo_and_bar" - attribute_names = $2.split('_and_') - conditions = construct_attributes_from_arguments(attribute_names, args) - with_scope(:find => { :conditions => conditions }, &counter) - else - counter.call - end - - count.respond_to?(:length) ? count.length : count - end - - def wp_parse_count_options(options, klass) - excludees = [:count, :order, :limit, :offset, :readonly] - - unless ::ActiveRecord::Calculations::CALCULATIONS_OPTIONS.include?(:from) - # :from parameter wasn't supported in count() before this change - excludees << :from - end - - # Use :select from scope if it isn't already present. - options[:select] = scope(:find, :select) unless options[:select] - - if options[:select] and options[:select] =~ /^\s*DISTINCT\b/i - # Remove quoting and check for table_name.*-like statement. - if options[:select].gsub('`', '') =~ /\w+\.\*/ - options[:select] = "DISTINCT #{klass.table_name}.#{klass.primary_key}" - end - else - excludees << :select - end - - # count expects (almost) the same options as find - count_options = options.except *excludees - - # merge the hash found in :count - # this allows you to specify :select, :order, or anything else just for the count query - count_options.update options[:count] if options[:count] - - # forget about includes if they are irrelevant (Rails 2.1) - if count_options[:include] and - klass.private_methods.include?('references_eager_loaded_tables?') and - !klass.send(:references_eager_loaded_tables?, count_options) - count_options.delete :include - end - - count_options - end - end -end - -ActiveRecord::Base.class_eval do - extend WillPaginate::Finders::ActiveRecord - class << self - alias_method_chain :method_missing, :paginate - end -end - -# support pagination on associations -a = ActiveRecord::Associations -returning([ a::AssociationCollection ]) { |classes| - # detect http://dev.rubyonrails.org/changeset/9230 - unless a::HasManyThroughAssociation.superclass == a::HasManyAssociation - classes << a::HasManyThroughAssociation - end -}.each do |klass| - klass.send :include, WillPaginate::Finders::ActiveRecord - klass.class_eval { alias_method_chain :method_missing, :paginate } -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope.rb deleted file mode 100644 index 21fc168..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope.rb +++ /dev/null @@ -1,170 +0,0 @@ -module WillPaginate - # This is a feature backported from Rails 2.1 because of its usefullness not only with will_paginate, - # but in other aspects when managing complex conditions that you want to be reusable. - module NamedScope - # All subclasses of ActiveRecord::Base have two named_scopes: - # * all, which is similar to a find(:all) query, and - # * scoped, which allows for the creation of anonymous scopes, on the fly: Shirt.scoped(:conditions => {:color => 'red'}).scoped(:include => :washing_instructions) - # - # These anonymous scopes tend to be useful when procedurally generating complex queries, where passing - # intermediate values (scopes) around as first-class objects is convenient. - def self.included(base) - base.class_eval do - extend ClassMethods - named_scope :scoped, lambda { |scope| scope } - end - end - - module ClassMethods - def scopes - read_inheritable_attribute(:scopes) || write_inheritable_attribute(:scopes, {}) - end - - # Adds a class method for retrieving and querying objects. A scope represents a narrowing of a database query, - # such as :conditions => {:color => :red}, :select => 'shirts.*', :include => :washing_instructions. - # - # class Shirt < ActiveRecord::Base - # named_scope :red, :conditions => {:color => 'red'} - # named_scope :dry_clean_only, :joins => :washing_instructions, :conditions => ['washing_instructions.dry_clean_only = ?', true] - # end - # - # The above calls to named_scope define class methods Shirt.red and Shirt.dry_clean_only. Shirt.red, - # in effect, represents the query Shirt.find(:all, :conditions => {:color => 'red'}). - # - # Unlike Shirt.find(...), however, the object returned by Shirt.red is not an Array; it resembles the association object - # constructed by a has_many declaration. For instance, you can invoke Shirt.red.find(:first), Shirt.red.count, - # Shirt.red.find(:all, :conditions => {:size => 'small'}). Also, just - # as with the association objects, name scopes acts like an Array, implementing Enumerable; Shirt.red.each(&block), - # Shirt.red.first, and Shirt.red.inject(memo, &block) all behave as if Shirt.red really were an Array. - # - # These named scopes are composable. For instance, Shirt.red.dry_clean_only will produce all shirts that are both red and dry clean only. - # Nested finds and calculations also work with these compositions: Shirt.red.dry_clean_only.count returns the number of garments - # for which these criteria obtain. Similarly with Shirt.red.dry_clean_only.average(:thread_count). - # - # All scopes are available as class methods on the ActiveRecord::Base descendent upon which the scopes were defined. But they are also available to - # has_many associations. If, - # - # class Person < ActiveRecord::Base - # has_many :shirts - # end - # - # then elton.shirts.red.dry_clean_only will return all of Elton's red, dry clean - # only shirts. - # - # Named scopes can also be procedural. - # - # class Shirt < ActiveRecord::Base - # named_scope :colored, lambda { |color| - # { :conditions => { :color => color } } - # } - # end - # - # In this example, Shirt.colored('puce') finds all puce shirts. - # - # Named scopes can also have extensions, just as with has_many declarations: - # - # class Shirt < ActiveRecord::Base - # named_scope :red, :conditions => {:color => 'red'} do - # def dom_id - # 'red_shirts' - # end - # end - # end - # - # - # For testing complex named scopes, you can examine the scoping options using the - # proxy_options method on the proxy itself. - # - # class Shirt < ActiveRecord::Base - # named_scope :colored, lambda { |color| - # { :conditions => { :color => color } } - # } - # end - # - # expected_options = { :conditions => { :colored => 'red' } } - # assert_equal expected_options, Shirt.colored('red').proxy_options - def named_scope(name, options = {}, &block) - name = name.to_sym - scopes[name] = lambda do |parent_scope, *args| - Scope.new(parent_scope, case options - when Hash - options - when Proc - options.call(*args) - end, &block) - end - (class << self; self end).instance_eval do - define_method name do |*args| - scopes[name].call(self, *args) - end - end - end - end - - class Scope - attr_reader :proxy_scope, :proxy_options - - [].methods.each do |m| - unless m =~ /(^__|^nil\?|^send|^object_id$|class|extend|^find$|count|sum|average|maximum|minimum|paginate|first|last|empty\?|respond_to\?)/ - delegate m, :to => :proxy_found - end - end - - delegate :scopes, :with_scope, :to => :proxy_scope - - def initialize(proxy_scope, options, &block) - [options[:extend]].flatten.each { |extension| extend extension } if options[:extend] - extend Module.new(&block) if block_given? - @proxy_scope, @proxy_options = proxy_scope, options.except(:extend) - end - - def reload - load_found; self - end - - def first(*args) - if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash)) - proxy_found.first(*args) - else - find(:first, *args) - end - end - - def last(*args) - if args.first.kind_of?(Integer) || (@found && !args.first.kind_of?(Hash)) - proxy_found.last(*args) - else - find(:last, *args) - end - end - - def empty? - @found ? @found.empty? : count.zero? - end - - def respond_to?(method, include_private = false) - super || @proxy_scope.respond_to?(method, include_private) - end - - protected - def proxy_found - @found || load_found - end - - private - def method_missing(method, *args, &block) - if scopes.include?(method) - scopes[method].call(self, *args) - else - with_scope :find => proxy_options do - proxy_scope.send(method, *args, &block) - end - end - end - - def load_found - @found = find(:all) - end - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope_patch.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope_patch.rb deleted file mode 100644 index bdc1997..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_record/named_scope_patch.rb +++ /dev/null @@ -1,39 +0,0 @@ -## based on http://dev.rubyonrails.org/changeset/9084 - -ActiveRecord::Associations::AssociationProxy.class_eval do - protected - def with_scope(*args, &block) - @reflection.klass.send :with_scope, *args, &block - end -end - -[ ActiveRecord::Associations::AssociationCollection, - ActiveRecord::Associations::HasManyThroughAssociation ].each do |klass| - klass.class_eval do - protected - alias :method_missing_without_scopes :method_missing_without_paginate - def method_missing_without_paginate(method, *args, &block) - if @reflection.klass.scopes.include?(method) - @reflection.klass.scopes[method].call(self, *args, &block) - else - method_missing_without_scopes(method, *args, &block) - end - end - end -end - -# Rails 1.2.6 -ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do - protected - def method_missing(method, *args, &block) - if @target.respond_to?(method) || (!@reflection.klass.respond_to?(method) && Class.respond_to?(method)) - super - elsif @reflection.klass.scopes.include?(method) - @reflection.klass.scopes[method].call(self, *args) - else - @reflection.klass.with_scope(:find => { :conditions => @finder_sql, :joins => @join_sql, :readonly => false }) do - @reflection.klass.send(method, *args, &block) - end - end - end -end if ActiveRecord::Base.respond_to? :find_first diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_resource.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/active_resource.rb deleted file mode 100644 index 9ba0236..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/active_resource.rb +++ /dev/null @@ -1,48 +0,0 @@ -require 'will_paginate/finders/base' -require 'active_resource' - -module WillPaginate::Finders - # Paginate your ActiveResource models. - # - # @posts = Post.paginate :all, :params => { :page => params[:page], :order => 'created_at DESC' } - module ActiveResource - include WillPaginate::Finders::Base - - protected - - def wp_query(options, pager, args, &block) - unless args.empty? or args.first == :all - raise ArgumentError, "finder arguments other than :all are not supported for pagination (#{args.inspect} given)" - end - params = (options[:params] ||= {}) - params[:page] = pager.current_page - params[:per_page] = pager.per_page - - pager.replace find_every(options, &block) - end - - # Takes the format that Hash.from_xml produces out of an unknown type - # (produced by WillPaginate::Collection#to_xml_with_collection_type), - # parses it into a WillPaginate::Collection, - # and forwards the result to the former +instantiate_collection+ method. - # It only does this for hashes that have a :type => "collection". - def instantiate_collection_with_collection(collection, prefix_options = {}) - if collection.is_a?(Hash) && collection["type"] == "collection" - collectables = collection.values.find{ |c| c.is_a?(Hash) || c.is_a?(Array) } - collectables = [collectables].compact unless collectables.kind_of?(Array) - instantiated_collection = WillPaginate::Collection.create(collection["current_page"], collection["per_page"], collection["total_entries"]) do |pager| - pager.replace instantiate_collection_without_collection(collectables, prefix_options) - end - else - instantiate_collection_without_collection(collection, prefix_options) - end - end - end -end - -ActiveResource::Base.class_eval do - extend WillPaginate::Finders::ActiveResource - class << self - # alias_method_chain :instantiate_collection, :collection - end -end \ No newline at end of file diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/base.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/base.rb deleted file mode 100644 index f643244..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/base.rb +++ /dev/null @@ -1,80 +0,0 @@ -require 'will_paginate/core_ext' - -module WillPaginate - module Finders - # Database-agnostic finder logic - module Base - def per_page - @per_page ||= 30 - end - - def per_page=(limit) - @per_page = limit.to_i - end - - # This is the main paginating finder. - # - # == Special parameters for paginating finders - # * :page -- REQUIRED, but defaults to 1 if false or nil - # * :per_page -- defaults to CurrentModel.per_page (which is 30 if not overridden) - # * :total_entries -- use only if you manually count total entries - # * :count -- additional options that are passed on to +count+ - # * :finder -- name of the finder method to use (default: "find") - # - # All other options (+conditions+, +order+, ...) are forwarded to +find+ - # and +count+ calls. - def paginate(*args, &block) - options = args.pop - page, per_page, total_entries = wp_parse_options(options) - - WillPaginate::Collection.create(page, per_page, total_entries) do |pager| - query_options = options.except :page, :per_page, :total_entries - wp_query(query_options, pager, args, &block) - end - end - - # Iterates through all records by loading one page at a time. This is useful - # for migrations or any other use case where you don't want to load all the - # records in memory at once. - # - # It uses +paginate+ internally; therefore it accepts all of its options. - # You can specify a starting page with :page (default is 1). Default - # :order is "id", override if necessary. - # - # {Jamis Buck describes this}[http://weblog.jamisbuck.org/2007/4/6/faking-cursors-in-activerecord] - # and also uses a more efficient way for MySQL. - def paginated_each(options = {}, &block) - options = { :order => 'id', :page => 1 }.merge options - options[:page] = options[:page].to_i - options[:total_entries] = 0 # skip the individual count queries - total = 0 - - begin - collection = paginate(options) - total += collection.each(&block).size - options[:page] += 1 - end until collection.size < collection.per_page - - total - end - - protected - - def wp_parse_options(options) #:nodoc: - raise ArgumentError, 'parameter hash expected' unless Hash === options - raise ArgumentError, ':page parameter required' unless options.key? :page - - if options[:count] and options[:total_entries] - raise ArgumentError, ':count and :total_entries are mutually exclusive' - end - - page = options[:page] || 1 - per_page = options[:per_page] || self.per_page - total = options[:total_entries] - - return [page, per_page, total] - end - - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/finders/data_mapper.rb b/vendor/plugins/will_paginate/lib/will_paginate/finders/data_mapper.rb deleted file mode 100644 index c31c5fb..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/finders/data_mapper.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'will_paginate/finders/base' -require 'dm-core' - -module WillPaginate::Finders - module DataMapper - include WillPaginate::Finders::Base - - protected - - def wp_query(options, pager, args, &block) - find_options = options.except(:count).update(:offset => pager.offset, :limit => pager.per_page) - - pager.replace all(find_options, &block) - - unless pager.total_entries - pager.total_entries = wp_count(options) - end - end - - def wp_count(options) - count_options = options.except(:count, :order) - # merge the hash found in :count - count_options.update options[:count] if options[:count] - - count_options.empty?? count() : count(count_options) - end - end -end - -DataMapper::Model.send(:include, WillPaginate::Finders::DataMapper) diff --git a/vendor/plugins/will_paginate/lib/will_paginate/version.rb b/vendor/plugins/will_paginate/lib/will_paginate/version.rb deleted file mode 100644 index ba92b54..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/version.rb +++ /dev/null @@ -1,9 +0,0 @@ -module WillPaginate #:nodoc: - module VERSION #:nodoc: - MAJOR = 2 - MINOR = 5 - TINY = 0 - - STRING = [MAJOR, MINOR, TINY].join('.') - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb b/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb deleted file mode 100644 index 9917cc5..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers.rb +++ /dev/null @@ -1,39 +0,0 @@ -require 'will_paginate/deprecation' - -module WillPaginate - # = Will Paginate view helpers - # - # Currently there is only one view helper: +will_paginate+. It renders the - # pagination links for the given collection. The helper itself is lightweight - # and serves only as a wrapper around link renderer instantiation; the - # renderer then does all the hard work of generating the HTML. - # - # == Global options for helpers - # - # Options for pagination helpers are optional and get their default values from the - # WillPaginate::ViewHelpers.pagination_options hash. You can write to this hash to - # override default options on the global level: - # - # WillPaginate::ViewHelpers.pagination_options[:previous_label] = 'Previous page' - # - # By putting this into your environment.rb you can easily translate link texts to previous - # and next pages, as well as override some other defaults to your liking. - module ViewHelpers - def self.pagination_options() @pagination_options; end - def self.pagination_options=(value) @pagination_options = value; end - - self.pagination_options = { - :class => 'pagination', - :previous_label => '« Previous', - :next_label => 'Next »', - :inner_window => 4, # links around the current page - :outer_window => 1, # links around beginning and end - :separator => ' ', # single space is friendly to spiders and non-graphic browsers - :param_name => :page, - :params => nil, - :renderer => 'WillPaginate::ViewHelpers::LinkRenderer', - :page_links => true, - :container => true - } - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/action_view.rb b/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/action_view.rb deleted file mode 100644 index 51e8525..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/action_view.rb +++ /dev/null @@ -1,82 +0,0 @@ -require 'will_paginate/view_helpers/base' -require 'action_view' -require 'will_paginate/view_helpers/link_renderer' - -module WillPaginate - module ViewHelpers - # ActionView helpers for Rails integration - module ActionView - include WillPaginate::ViewHelpers::Base - - def will_paginate(collection = nil, options = {}) - options, collection = collection, nil if collection.is_a? Hash - collection ||= infer_collection_from_controller - - super(collection, options.symbolize_keys) - end - - def page_entries_info(collection = nil, options = {}) - options, collection = collection, nil if collection.is_a? Hash - collection ||= infer_collection_from_controller - - super(collection, options.symbolize_keys) - end - - # Wrapper for rendering pagination links at both top and bottom of a block - # of content. - # - # <% paginated_section @posts do %> - #
    - # <% for post in @posts %> - #
  1. ...
  2. - # <% end %> - #
- # <% end %> - # - # will result in: - # - # - #
    - # ... - #
- # - # - # Arguments are passed to a will_paginate call, so the same options - # apply. Don't use the :id option; otherwise you'll finish with two - # blocks of pagination links sharing the same ID (which is invalid HTML). - def paginated_section(*args, &block) - pagination = will_paginate(*args).to_s - content = pagination + capture(&block) + pagination - concat content, block.binding - end - - protected - - def infer_collection_from_controller - collection_name = "@#{controller.controller_name}" - collection = instance_variable_get(collection_name) - raise ArgumentError, "The #{collection_name} variable appears to be empty. Did you " + - "forget to pass the collection object for will_paginate?" if collection.nil? - collection - end - end - end -end - -ActionView::Base.send :include, WillPaginate::ViewHelpers::ActionView - -if defined?(ActionController::Base) and ActionController::Base.respond_to? :rescue_responses - ActionController::Base.rescue_responses['WillPaginate::InvalidPage'] = :not_found -end - -WillPaginate::ViewHelpers::LinkRenderer.class_eval do - protected - - def default_url_params - { :escape => false } - end - - def generate_url(params) - @template.url_for(params) - end -end \ No newline at end of file diff --git a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/base.rb b/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/base.rb deleted file mode 100644 index c5a0ecb..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/base.rb +++ /dev/null @@ -1,137 +0,0 @@ -require 'will_paginate/core_ext' -require 'will_paginate/view_helpers' - -module WillPaginate - module ViewHelpers - module Base - # Renders Digg/Flickr-style pagination for a WillPaginate::Collection - # object. Nil is returned if there is only one page in total; no point in - # rendering the pagination in that case... - # - # ==== Options - # * :class -- CSS class name for the generated DIV (default: "pagination") - # * :previous_label -- default: "« Previous" - # * :next_label -- default: "Next »" - # * :inner_window -- how many links are shown around the current page (default: 4) - # * :outer_window -- how many links are around the first and the last page (default: 1) - # * :separator -- string separator for page HTML elements (default: single space) - # * :param_name -- parameter name for page number in URLs (default: :page) - # * :params -- additional parameters when generating pagination links - # (eg. :controller => "foo", :action => nil) - # * :renderer -- class name, class or instance of a link renderer (default: - # WillPaginate::LinkRenderer) - # * :page_links -- when false, only previous/next links are rendered (default: true) - # * :container -- toggles rendering of the DIV container for pagination links, set to - # false only when you are rendering your own pagination markup (default: true) - # * :id -- HTML ID for the container (default: nil). Pass +true+ to have the ID - # automatically generated from the class name of objects in collection: for example, paginating - # ArticleComment models would yield an ID of "article_comments_pagination". - # - # All options beside listed ones are passed as HTML attributes to the container - # element for pagination links (the DIV). For example: - # - # <%= will_paginate @posts, :id => 'wp_posts' %> - # - # ... will result in: - # - # - # - # ==== Using the helper without arguments - # If the helper is called without passing in the collection object, it will - # try to read from the instance variable inferred by the controller name. - # For example, calling +will_paginate+ while the current controller is - # PostsController will result in trying to read from the @posts - # variable. Example: - # - # <%= will_paginate :id => true %> - # - # ... will result in @post collection getting paginated: - # - # - # - def will_paginate(collection, options = {}) - # early exit if there is nothing to render - return nil unless collection.total_pages > 1 - - options = WillPaginate::ViewHelpers.pagination_options.merge(options) - - if options[:prev_label] - WillPaginate::Deprecation::warn(":prev_label view parameter is now :previous_label; the old name has been deprecated.") - options[:previous_label] = options.delete(:prev_label) - end - - # get the renderer instance - renderer = case options[:renderer] - when String - options[:renderer].constantize.new - when Class - options[:renderer].new - else - options[:renderer] - end - # render HTML for pagination - renderer.prepare collection, options, self - renderer.to_html - end - - # Renders a helpful message with numbers of displayed vs. total entries. - # You can use this as a blueprint for your own, similar helpers. - # - # <%= page_entries_info @posts %> - # #-> Displaying posts 6 - 10 of 26 in total - # - # By default, the message will use the humanized class name of objects - # in collection: for instance, "project types" for ProjectType models. - # Override this to your liking with the :entry_name parameter: - # - # <%= page_entries_info @posts, :entry_name => 'item' %> - # #-> Displaying items 6 - 10 of 26 in total - # - # Entry name is entered in singular and pluralized with - # String#pluralize method from ActiveSupport. If it isn't - # loaded, specify plural with :plural_name parameter: - # - # <%= page_entries_info @posts, :entry_name => 'item', :plural_name => 'items' %> - # - # By default, this method produces HTML output. You can trigger plain - # text output by passing :html => false in options. - def page_entries_info(collection, options = {}) - entry_name = options[:entry_name] || (collection.empty?? 'entry' : - collection.first.class.name.underscore.gsub('_', ' ')) - - plural_name = if options[:plural_name] - options[:plural_name] - elsif entry_name == 'entry' - plural_name = 'entries' - elsif entry_name.respond_to? :pluralize - plural_name = entry_name.pluralize - else - entry_name + 's' - end - - unless options[:html] == false - b = '' - eb = '' - sp = ' ' - else - b = eb = '' - sp = ' ' - end - - if collection.total_pages < 2 - case collection.size - when 0; "No #{plural_name} found" - when 1; "Displaying #{b}1#{eb} #{entry_name}" - else; "Displaying #{b}all #{collection.size}#{eb} #{plural_name}" - end - else - %{Displaying #{plural_name} #{b}%d#{sp}-#{sp}%d#{eb} of #{b}%d#{eb} in total} % [ - collection.offset + 1, - collection.offset + collection.length, - collection.total_entries - ] - end - end - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer.rb b/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer.rb deleted file mode 100644 index 305155d..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer.rb +++ /dev/null @@ -1,177 +0,0 @@ -require 'cgi' -require 'will_paginate/core_ext' -require 'will_paginate/view_helpers/link_renderer_base' - -module WillPaginate - module ViewHelpers - # This class does the heavy lifting of actually building the pagination - # links. It is used by +will_paginate+ helper internally. - class LinkRenderer < LinkRendererBase - - # * +collection+ is a WillPaginate::Collection instance or any other object - # that conforms to that API - # * +options+ are forwarded from +will_paginate+ view helper - # * +template+ is the reference to the template being rendered - def prepare(collection, options, template) - super(collection, options) - @template = template - @container_attributes = @base_url_params = nil - end - - # Process it! This method returns the complete HTML string which contains - # pagination links. Feel free to subclass LinkRenderer and change this - # method as you see fit. - def to_html - html = pagination.map do |item| - item.is_a?(Fixnum) ? - page_number(item) : - send(item) - end.join(@options[:separator]) - - @options[:container] ? html_container(html) : html - end - - # Returns the subset of +options+ this instance was initialized with that - # represent HTML attributes for the container element of pagination links. - def container_attributes - @container_attributes ||= begin - attributes = @options.except *(WillPaginate::ViewHelpers.pagination_options.keys - [:class]) - # pagination of Post models will have the ID of "posts_pagination" - if @options[:container] and @options[:id] === true - attributes[:id] = @collection.first.class.name.underscore.pluralize + '_pagination' - end - attributes - end - end - - protected - - def page_number(page) - unless page == current_page - link(page, page, :rel => rel_value(page)) - else - tag(:em, page) - end - end - - def gap - '' - end - - def previous_page - previous_or_next_page(@collection.previous_page, @options[:previous_label], 'previous_page') - end - - def next_page - previous_or_next_page(@collection.next_page, @options[:next_label], 'next_page') - end - - def previous_or_next_page(page, text, classname) - if page - link(text, page, :class => classname) - else - tag(:span, text, :class => classname + ' disabled') - end - end - - def html_container(html) - tag(:div, html, container_attributes) - end - - # Returns URL params for +page_link_or_span+, taking the current GET params - # and :params option into account. - def url(page) - @base_url_params ||= begin - url_params = base_url_params - merge_optional_params(url_params) - url_params - end - - url_params = @base_url_params.dup - add_current_page_param(url_params, page) - - generate_url(url_params) - end - - def default_url_params - { } - end - - def base_url_params - url_params = default_url_params - # page links should preserve GET parameters - symbolized_update(url_params, @template.params) if get_request? - url_params - end - - def merge_optional_params(url_params) - symbolized_update(url_params, @options[:params]) if @options[:params] - end - - def add_current_page_param(url_params, page) - unless param_name.index(/[^\w-]/) - url_params[param_name.to_sym] = page - else - page_param = (defined?(CGIMethods) ? CGIMethods : ActionController::AbstractRequest). - parse_query_parameters(param_name + '=' + page.to_s) - - symbolized_update(url_params, page_param) - end - end - - def get_request? - @template.request.get? - end - - def generate_url(params) - @template.url(params) - end - - private - - def link(text, target, attributes = {}) - if target.is_a? Fixnum - attributes[:rel] = rel_value(target) - target = url(target) - end - attributes[:href] = target - tag(:a, text, attributes) - end - - def tag(name, value, attributes = {}) - string_attributes = attributes.inject('') do |attrs, pair| - unless pair.last.nil? - attrs << %( #{pair.first}="#{CGI::escapeHTML(pair.last.to_s)}") - end - attrs - end - "<#{name}#{string_attributes}>#{value}" - end - - def rel_value(page) - case page - when @collection.previous_page; 'prev' + (page == 1 ? ' start' : '') - when @collection.next_page; 'next' - when 1; 'start' - end - end - - def symbolized_update(target, other) - other.each do |key, value| - key = key.to_sym - existing = target[key] - - if value.is_a?(Hash) - target[key] = existing = {} if existing.nil? - if existing.is_a?(Hash) - symbolized_update(existing, value) - return - end - end - - target[key] = value - end - end - end - end -end diff --git a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer_base.rb b/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer_base.rb deleted file mode 100644 index 26f0f72..0000000 --- a/vendor/plugins/will_paginate/lib/will_paginate/view_helpers/link_renderer_base.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'will_paginate/view_helpers' - -module WillPaginate - module ViewHelpers - # This class does the heavy lifting of actually building the pagination - # links. It is used by +will_paginate+ helper internally. - class LinkRendererBase - - # * +collection+ is a WillPaginate::Collection instance or any other object - # that conforms to that API - # * +options+ are forwarded from +will_paginate+ view helper - def prepare(collection, options) - @collection = collection - @options = options - - # reset values in case we're re-using this instance - @total_pages = @param_name = nil - end - - def pagination - items = @options[:page_links] ? windowed_page_numbers : [] - items.unshift :previous_page - items.push :next_page - end - - protected - - # Calculates visible page numbers using the :inner_window and - # :outer_window options. - def windowed_page_numbers - inner_window, outer_window = @options[:inner_window].to_i, @options[:outer_window].to_i - window_from = current_page - inner_window - window_to = current_page + inner_window - - # adjust lower or upper limit if other is out of bounds - if window_to > total_pages - window_from -= window_to - total_pages - window_to = total_pages - end - if window_from < 1 - window_to += 1 - window_from - window_from = 1 - window_to = total_pages if window_to > total_pages - end - - visible = (1..total_pages).to_a - left_gap = (2 + outer_window)...window_from - right_gap = (window_to + 1)...(total_pages - outer_window) - - # replace page numbers that shouldn't be visible with `:gap` - [right_gap, left_gap].each do |gap| - if (gap.last - gap.first) > 1 - visible -= gap.to_a - visible.insert(gap.first - 1, :gap) - end - end - - visible - end - - private - - def current_page - @collection.current_page - end - - def total_pages - @collection.total_pages - end - - def param_name - @param_name ||= @options[:param_name].to_s - end - end - end -end diff --git a/vendor/plugins/will_paginate/spec/collection_spec.rb b/vendor/plugins/will_paginate/spec/collection_spec.rb deleted file mode 100644 index 4d71dc9..0000000 --- a/vendor/plugins/will_paginate/spec/collection_spec.rb +++ /dev/null @@ -1,147 +0,0 @@ -require 'will_paginate/array' -require 'spec_helper' - -describe WillPaginate::Collection do - - before :all do - @simple = ('a'..'e').to_a - end - - it "should be a subset of original collection" do - @simple.paginate(:page => 1, :per_page => 3).should == %w( a b c ) - end - - it "can be shorter than per_page if on last page" do - @simple.paginate(:page => 2, :per_page => 3).should == %w( d e ) - end - - it "should include whole collection if per_page permits" do - @simple.paginate(:page => 1, :per_page => 5).should == @simple - end - - it "should be empty if out of bounds" do - @simple.paginate(:page => 2, :per_page => 5).should be_empty - end - - it "should default to 1 as current page and 30 per-page" do - result = (1..50).to_a.paginate - result.current_page.should == 1 - result.size.should == 30 - end - - describe "old API" do - it "should fail with numeric params" do - Proc.new { [].paginate(2) }.should raise_error(ArgumentError) - Proc.new { [].paginate(2, 10) }.should raise_error(ArgumentError) - end - - it "should fail with both options and numeric param" do - Proc.new { [].paginate({}, 5) }.should raise_error(ArgumentError) - end - end - - it "should give total_entries precedence over actual size" do - %w(a b c).paginate(:total_entries => 5).total_entries.should == 5 - end - - it "should be an augmented Array" do - entries = %w(a b c) - collection = create(2, 3, 10) do |pager| - pager.replace(entries).should == entries - end - - collection.should == entries - for method in %w(total_pages each offset size current_page per_page total_entries) - collection.should respond_to(method) - end - collection.should be_kind_of(Array) - collection.entries.should be_instance_of(Array) - # TODO: move to another expectation: - collection.offset.should == 3 - collection.total_pages.should == 4 - collection.should_not be_out_of_bounds - end - - describe "previous/next pages" do - it "should have previous_page nil when on first page" do - collection = create(1, 1, 3) - collection.previous_page.should be_nil - collection.next_page.should == 2 - end - - it "should have both prev/next pages" do - collection = create(2, 1, 3) - collection.previous_page.should == 1 - collection.next_page.should == 3 - end - - it "should have next_page nil when on last page" do - collection = create(3, 1, 3) - collection.previous_page.should == 2 - collection.next_page.should be_nil - end - end - - it "should show out of bounds when page number is too high" do - create(2, 3, 2).should be_out_of_bounds - end - - it "should not show out of bounds when inside collection" do - create(1, 3, 2).should_not be_out_of_bounds - end - - describe "guessing total count" do - it "can guess when collection is shorter than limit" do - collection = create { |p| p.replace array } - collection.total_entries.should == 8 - end - - it "should allow explicit total count to override guessed" do - collection = create(2, 5, 10) { |p| p.replace array } - collection.total_entries.should == 10 - end - - it "should not be able to guess when collection is same as limit" do - collection = create { |p| p.replace array(5) } - collection.total_entries.should be_nil - end - - it "should not be able to guess when collection is empty" do - collection = create { |p| p.replace array(0) } - collection.total_entries.should be_nil - end - - it "should be able to guess when collection is empty and this is the first page" do - collection = create(1) { |p| p.replace array(0) } - collection.total_entries.should == 0 - end - end - - it "should raise WillPaginate::InvalidPage on invalid input" do - for bad_input in [0, -1, nil, '', 'Schnitzel'] - Proc.new { create bad_input }.should raise_error(WillPaginate::InvalidPage) - end - end - - it "should raise Argument error on invalid per_page setting" do - Proc.new { create(1, -1) }.should raise_error(ArgumentError) - end - - it "should not respond to page_count anymore" do - Proc.new { create.page_count }.should raise_error(NoMethodError) - end - - private - - def create(page = 2, limit = 5, total = nil, &block) - if block_given? - WillPaginate::Collection.create(page, limit, total, &block) - else - WillPaginate::Collection.new(page, limit, total) - end - end - - def array(size = 3) - Array.new(size) - end -end diff --git a/vendor/plugins/will_paginate/spec/console b/vendor/plugins/will_paginate/spec/console deleted file mode 100755 index 0d3a360..0000000 --- a/vendor/plugins/will_paginate/spec/console +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env ruby -irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb' -libs = [] - -libs << 'irb/completion' -libs << 'console_fixtures' - -exec "#{irb} -Ilib:spec#{libs.map{ |l| " -r #{l}" }.join} --simple-prompt" diff --git a/vendor/plugins/will_paginate/spec/console_fixtures.rb b/vendor/plugins/will_paginate/spec/console_fixtures.rb deleted file mode 100644 index 1f0853f..0000000 --- a/vendor/plugins/will_paginate/spec/console_fixtures.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'will_paginate/finders/active_record' -require 'finders/activerecord_test_connector' -ActiverecordTestConnector.setup - -# load all fixtures -Fixtures.create_fixtures(ActiverecordTestConnector::FIXTURES_PATH, ActiveRecord::Base.connection.tables) - - diff --git a/vendor/plugins/will_paginate/spec/database.yml b/vendor/plugins/will_paginate/spec/database.yml deleted file mode 100644 index 7ef1e73..0000000 --- a/vendor/plugins/will_paginate/spec/database.yml +++ /dev/null @@ -1,22 +0,0 @@ -sqlite3: - database: ":memory:" - adapter: sqlite3 - timeout: 500 - -sqlite2: - database: ":memory:" - adapter: sqlite2 - -mysql: - adapter: mysql - username: rails - password: mislav - encoding: utf8 - database: will_paginate_unittest - -postgres: - adapter: postgresql - username: mislav - password: mislav - database: will_paginate_unittest - min_messages: warning diff --git a/vendor/plugins/will_paginate/spec/finders/active_record_spec.rb b/vendor/plugins/will_paginate/spec/finders/active_record_spec.rb deleted file mode 100644 index 48866e1..0000000 --- a/vendor/plugins/will_paginate/spec/finders/active_record_spec.rb +++ /dev/null @@ -1,460 +0,0 @@ -require 'spec_helper' -require 'will_paginate/finders/active_record' -require File.dirname(__FILE__) + '/activerecord_test_connector' - -require 'will_paginate' -WillPaginate::enable_named_scope - -class ArProject < ActiveRecord::Base - def self.column_names - ["id"] - end - - named_scope :distinct, :select => "DISTINCT #{table_name}.*" -end - -ActiverecordTestConnector.setup - -describe WillPaginate::Finders::ActiveRecord do - - extend ActiverecordTestConnector::FixtureSetup - - it "should integrate with ActiveRecord::Base" do - ActiveRecord::Base.should respond_to(:paginate) - end - - it "should paginate" do - ArProject.expects(:find).with(:all, { :limit => 5, :offset => 0 }).returns([]) - ArProject.paginate(:page => 1, :per_page => 5) - end - - it "should respond to paginate_by_sql" do - ArProject.should respond_to(:paginate_by_sql) - end - - it "should support explicit :all argument" do - ArProject.expects(:find).with(:all, instance_of(Hash)).returns([]) - ArProject.paginate(:all, :page => nil) - end - - it "should put implicit all in dynamic finders" do - ArProject.expects(:find_all_by_foo).returns([]) - ArProject.expects(:count).returns(0) - ArProject.paginate_by_foo :page => 2 - end - - it "should leave extra parameters intact" do - ArProject.expects(:find).with(:all, {:foo => 'bar', :limit => 4, :offset => 0 }).returns(Array.new(5)) - ArProject.expects(:count).with({:foo => 'bar'}).returns(1) - - ArProject.paginate :foo => 'bar', :page => 1, :per_page => 4 - end - - describe "counting" do - it "should ignore nil in :count parameter" do - ArProject.expects(:find).returns([]) - lambda { ArProject.paginate :page => nil, :count => nil }.should_not raise_error - end - - it "should guess the total count" do - ArProject.expects(:find).returns(Array.new(2)) - ArProject.expects(:count).never - - result = ArProject.paginate :page => 2, :per_page => 4 - result.total_entries.should == 6 - end - - it "should guess that there are no records" do - ArProject.expects(:find).returns([]) - ArProject.expects(:count).never - - result = ArProject.paginate :page => 1, :per_page => 4 - result.total_entries.should == 0 - end - end - - it "should not ignore :select parameter when it says DISTINCT" do - ArProject.stubs(:find).returns([]) - ArProject.expects(:count).with(:select => 'DISTINCT salary').returns(0) - ArProject.paginate :select => 'DISTINCT salary', :page => 2 - end - - it "should count with scoped select when :select => DISTINCT" do - ArProject.stubs(:find).returns([]) - ArProject.expects(:count).with(:select => 'DISTINCT ar_projects.id').returns(0) - ArProject.distinct.paginate :page => 2 - end - - it "should use :with_foo for scope-out compatibility" do - ArProject.expects(:find_best).returns(Array.new(5)) - ArProject.expects(:with_best).returns(1) - - ArProject.paginate_best :page => 1, :per_page => 4 - end - - describe "paginate_by_sql" do - it "should paginate" do - ArProject.expects(:find_by_sql).with(regexp_matches(/sql LIMIT 3(,| OFFSET) 3/)).returns([]) - ArProject.expects(:count_by_sql).with('SELECT COUNT(*) FROM (sql) AS count_table').returns(0) - - ArProject.paginate_by_sql 'sql', :page => 2, :per_page => 3 - end - - it "should respect total_entrier setting" do - ArProject.expects(:find_by_sql).returns([]) - ArProject.expects(:count_by_sql).never - - entries = ArProject.paginate_by_sql 'sql', :page => 1, :total_entries => 999 - entries.total_entries.should == 999 - end - - it "should strip the order when counting" do - ArProject.expects(:find_by_sql).returns([]) - ArProject.expects(:count_by_sql).with("SELECT COUNT(*) FROM (sql\n ) AS count_table").returns(0) - - ArProject.paginate_by_sql "sql\n ORDER\nby foo, bar, `baz` ASC", :page => 2 - end - - it "shouldn't change the original query string" do - query = 'SQL QUERY' - original_query = query.dup - ArProject.expects(:find_by_sql).returns([]) - - ArProject.paginate_by_sql(query, :page => 1) - query.should == original_query - end - end - - # TODO: counts would still be wrong! - it "should be able to paginate custom finders" do - # acts_as_taggable defines find_tagged_with(tag, options) - ArProject.expects(:find_tagged_with).with('will_paginate', :offset => 5, :limit => 5).returns([]) - ArProject.expects(:count).with({}).returns(0) - - ArProject.paginate_tagged_with 'will_paginate', :page => 2, :per_page => 5 - end - - it "should not skip count when given an array argument to a finder" do - ids = (1..8).to_a - ArProject.expects(:find_all_by_id).returns([]) - ArProject.expects(:count).returns(0) - - ArProject.paginate_by_id(ids, :per_page => 3, :page => 2, :order => 'id') - end - - # Is this Rails 2.0? Find out by testing find_all which was removed in [6998] - unless ActiveRecord::Base.respond_to? :find_all - it "should paginate array of IDs" do - # AR finders also accept arrays of IDs - # (this was broken in Rails before [6912]) - lambda { - result = Developer.paginate((1..8).to_a, :per_page => 3, :page => 2, :order => 'id') - result.map(&:id).should == (4..6).to_a - result.total_entries.should == 8 - }.should run_queries(1) - end - end - - it "doesn't mangle options" do - ArProject.expects(:find).returns([]) - options = { :page => 1 } - options.expects(:delete).never - options_before = options.dup - - ArProject.paginate(options) - options.should == options_before - end - - if ::ActiveRecord::Calculations::CALCULATIONS_OPTIONS.include?(:from) - # for ActiveRecord 2.1 and newer - it "keeps the :from parameter in count" do - ArProject.expects(:find).returns([1]) - ArProject.expects(:count).with {|options| options.key?(:from) }.returns(0) - ArProject.paginate(:page => 2, :per_page => 1, :from => 'projects') - end - else - it "excludes :from parameter from count" do - ArProject.expects(:find).returns([1]) - ArProject.expects(:count).with {|options| !options.key?(:from) }.returns(0) - ArProject.paginate(:page => 2, :per_page => 1, :from => 'projects') - end - end - - if ActiverecordTestConnector.able_to_connect - fixtures :topics, :replies, :users, :projects, :developers_projects - - it "should get first page of Topics with a single query" do - lambda { - result = Topic.paginate :page => nil - result.current_page.should == 1 - result.total_pages.should == 1 - result.size.should == 4 - }.should run_queries(1) - end - - it "should get second (inexistent) page of Topics, requiring 2 queries" do - lambda { - result = Topic.paginate :page => 2 - result.total_pages.should == 1 - result.should be_empty - }.should run_queries(2) - end - - it "should paginate with :order" do - result = Topic.paginate :page => 1, :order => 'created_at DESC' - result.should == topics(:futurama, :harvey_birdman, :rails, :ar).reverse - result.total_pages.should == 1 - end - - it "should paginate with :conditions" do - result = Topic.paginate :page => 1, :conditions => ["created_at > ?", 30.minutes.ago] - result.should == topics(:rails, :ar) - result.total_pages.should == 1 - end - - it "should paginate with :include and :conditions" do - result = Topic.paginate \ - :page => 1, - :include => :replies, - :conditions => "replies.content LIKE 'Bird%' ", - :per_page => 10 - - expected = Topic.find :all, - :include => 'replies', - :conditions => "replies.content LIKE 'Bird%' ", - :limit => 10 - - result.should == expected - result.total_entries.should == 1 - end - - it "should paginate with :include and :order" do - result = nil - lambda { - result = Topic.paginate \ - :page => 1, - :include => :replies, - :order => 'replies.created_at asc, topics.created_at asc', - :per_page => 10 - }.should run_queries(2) - - expected = Topic.find :all, - :include => 'replies', - :order => 'replies.created_at asc, topics.created_at asc', - :limit => 10 - - result.should == expected - result.total_entries.should == 4 - end - - # detect ActiveRecord 2.1 - if ActiveRecord::Base.private_methods.include?('references_eager_loaded_tables?') - it "should remove :include for count" do - Developer.expects(:find).returns([1]) - Developer.expects(:count).with({}).returns(0) - - Developer.paginate :page => 1, :per_page => 1, :include => :projects - end - - it "should keep :include for count when they are referenced in :conditions" do - Developer.expects(:find).returns([1]) - Developer.expects(:count).with({ :include => :projects, :conditions => 'projects.id > 2' }).returns(0) - - Developer.paginate :page => 1, :per_page => 1, - :include => :projects, :conditions => 'projects.id > 2' - end - end - - describe "associations" do - it "should paginate with include" do - project = projects(:active_record) - - result = project.topics.paginate \ - :page => 1, - :include => :replies, - :conditions => ["replies.content LIKE ?", 'Nice%'], - :per_page => 10 - - expected = Topic.find :all, - :include => 'replies', - :conditions => ["project_id = #{project.id} AND replies.content LIKE ?", 'Nice%'], - :limit => 10 - - result.should == expected - end - - it "should paginate" do - dhh = users(:david) - expected_name_ordered = projects(:action_controller, :active_record) - expected_id_ordered = projects(:active_record, :action_controller) - - lambda { - # with association-specified order - result = dhh.projects.paginate(:page => 1) - result.should == expected_name_ordered - result.total_entries.should == 2 - }.should run_queries(2) - - # with explicit order - result = dhh.projects.paginate(:page => 1, :order => 'projects.id') - result.should == expected_id_ordered - result.total_entries.should == 2 - - lambda { - dhh.projects.find(:all, :order => 'projects.id', :limit => 4) - }.should_not raise_error - - result = dhh.projects.paginate(:page => 1, :order => 'projects.id', :per_page => 4) - result.should == expected_id_ordered - - # has_many with implicit order - topic = Topic.find(1) - expected = replies(:spam, :witty_retort) - # FIXME: wow, this is ugly - topic.replies.paginate(:page => 1).map(&:id).sort.should == expected.map(&:id).sort - topic.replies.paginate(:page => 1, :order => 'replies.id ASC').should == expected.reverse - end - - it "should paginate through association extension" do - project = Project.find(:first) - expected = [replies(:brave)] - - lambda { - result = project.replies.paginate_recent :page => 1 - result.should == expected - }.should run_queries(1) - end - end - - it "should paginate with joins" do - result = nil - join_sql = 'LEFT JOIN developers_projects ON users.id = developers_projects.developer_id' - - lambda { - result = Developer.paginate :page => 1, :joins => join_sql, :conditions => 'project_id = 1' - result.size.should == 2 - developer_names = result.map(&:name) - developer_names.should include('David') - developer_names.should include('Jamis') - }.should run_queries(1) - - lambda { - expected = result.to_a - result = Developer.paginate :page => 1, :joins => join_sql, - :conditions => 'project_id = 1', :count => { :select => "users.id" } - result.should == expected - result.total_entries.should == 2 - }.should run_queries(1) - end - - it "should paginate with group" do - result = nil - lambda { - result = Developer.paginate :page => 1, :per_page => 10, - :group => 'salary', :select => 'salary', :order => 'salary' - }.should run_queries(1) - - expected = users(:david, :jamis, :dev_10, :poor_jamis).map(&:salary).sort - result.map(&:salary).should == expected - end - - it "should paginate with dynamic finder" do - expected = replies(:witty_retort, :spam) - Reply.paginate_by_topic_id(1, :page => 1).should == expected - - result = Developer.paginate :conditions => { :salary => 100000 }, :page => 1, :per_page => 5 - result.total_entries.should == 8 - Developer.paginate_by_salary(100000, :page => 1, :per_page => 5).should == result - end - - it "should paginate with dynamic finder and conditions" do - result = Developer.paginate_by_salary(100000, :page => 1, :conditions => ['id > ?', 6]) - result.total_entries.should == 4 - result.map(&:id).should == (7..10).to_a - end - - it "should raise error when dynamic finder is not recognized" do - lambda { - Developer.paginate_by_inexistent_attribute 100000, :page => 1 - }.should raise_error(NoMethodError) - end - - it "should paginate with_scope" do - result = Developer.with_poor_ones { Developer.paginate :page => 1 } - result.size.should == 2 - result.total_entries.should == 2 - end - - describe "named_scope" do - it "should paginate" do - result = Developer.poor.paginate :page => 1, :per_page => 1 - result.size.should == 1 - result.total_entries.should == 2 - end - - it "should paginate on habtm association" do - project = projects(:active_record) - lambda { - result = project.developers.poor.paginate :page => 1, :per_page => 1 - result.size.should == 1 - result.total_entries.should == 1 - }.should run_queries(2) - end - - it "should paginate on hmt association" do - project = projects(:active_record) - expected = [replies(:brave)] - - lambda { - result = project.replies.recent.paginate :page => 1, :per_page => 1 - result.should == expected - result.total_entries.should == 1 - }.should run_queries(2) - end - - it "should paginate on has_many association" do - project = projects(:active_record) - expected = [topics(:ar)] - - lambda { - result = project.topics.mentions_activerecord.paginate :page => 1, :per_page => 1 - result.should == expected - result.total_entries.should == 1 - }.should run_queries(2) - end - end - - it "should paginate with :readonly option" do - lambda { Developer.paginate :readonly => true, :page => 1 }.should_not raise_error - end - - end - - protected - - def run_queries(num) - QueryCountMatcher.new(num) - end - -end - -class QueryCountMatcher - def initialize(num) - @queries = num - @old_query_count = $query_count - end - - def matches?(block) - block.call - @queries_run = $query_count - @old_query_count - @queries == @queries_run - end - - def failure_message - "expected #{@queries} queries, got #{@queries_run}" - end - - def negative_failure_message - "expected query count not to be #{$queries}" - end -end \ No newline at end of file diff --git a/vendor/plugins/will_paginate/spec/finders/active_resource_spec.rb b/vendor/plugins/will_paginate/spec/finders/active_resource_spec.rb deleted file mode 100644 index e00bb12..0000000 --- a/vendor/plugins/will_paginate/spec/finders/active_resource_spec.rb +++ /dev/null @@ -1,52 +0,0 @@ -require 'spec_helper' -require 'will_paginate/finders/active_resource' -require 'active_resource/http_mock' - -class AresProject < ActiveResource::Base - self.site = 'http://localhost:4000' -end - -describe WillPaginate::Finders::ActiveResource do - - before :all do - # ActiveResource::HttpMock.respond_to do |mock| - # mock.get "/ares_projects.xml?page=1&per_page=5", {}, [].to_xml - # end - end - - it "should integrate with ActiveResource::Base" do - ActiveResource::Base.should respond_to(:paginate) - end - - it "should error when no parameters for #paginate" do - lambda { AresProject.paginate }.should raise_error(ArgumentError) - end - - it "should paginate" do - AresProject.expects(:find_every).with(:params => { :page => 1, :per_page => 5 }).returns([]) - AresProject.paginate(:page => 1, :per_page => 5) - end - - it "should have 30 per_page as default" do - AresProject.expects(:find_every).with(:params => { :page => 1, :per_page => 30 }).returns([]) - AresProject.paginate(:page => 1) - end - - it "should support #paginate(:all)" do - lambda { AresProject.paginate(:all) }.should raise_error(ArgumentError) - end - - it "should error #paginate(:other)" do - lambda { AresProject.paginate(:first) }.should raise_error(ArgumentError) - end - - protected - - def create(page = 2, limit = 5, total = nil, &block) - if block_given? - WillPaginate::Collection.create(page, limit, total, &block) - else - WillPaginate::Collection.new(page, limit, total) - end - end -end diff --git a/vendor/plugins/will_paginate/spec/finders/activerecord_test_connector.rb b/vendor/plugins/will_paginate/spec/finders/activerecord_test_connector.rb deleted file mode 100644 index fdbb233..0000000 --- a/vendor/plugins/will_paginate/spec/finders/activerecord_test_connector.rb +++ /dev/null @@ -1,107 +0,0 @@ -require 'active_record' -require 'active_record/version' -require 'active_record/fixtures' - -class ActiverecordTestConnector - cattr_accessor :able_to_connect - cattr_accessor :connected - - FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures') - - # Set our defaults - self.connected = false - self.able_to_connect = true - - def self.setup - unless self.connected || !self.able_to_connect - setup_connection - load_schema - add_load_path FIXTURES_PATH - self.connected = true - end - rescue Exception => e # errors from ActiveRecord setup - $stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n" - self.able_to_connect = false - end - - private - - def self.add_load_path(path) - dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies - dep.load_paths.unshift path - end - - def self.setup_connection - db = ENV['DB'].blank?? 'sqlite3' : ENV['DB'] - - configurations = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'database.yml')) - raise "no configuration for '#{db}'" unless configurations.key? db - configuration = configurations[db] - - ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb' - puts "using #{configuration['adapter']} adapter" unless ENV['DB'].blank? - - ActiveRecord::Base.establish_connection(configuration) - ActiveRecord::Base.configurations = { db => configuration } - prepare ActiveRecord::Base.connection - - unless Object.const_defined?(:QUOTED_TYPE) - Object.send :const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type') - end - end - - def self.load_schema - ActiveRecord::Base.silence do - ActiveRecord::Migration.verbose = false - load File.join(FIXTURES_PATH, 'schema.rb') - end - end - - def self.prepare(conn) - class << conn - IGNORED_SQL = [/^PRAGMA/, /^SELECT currval/, /^SELECT CAST/, /^SELECT @@IDENTITY/, /^SELECT @@ROWCOUNT/, /^SHOW FIELDS /] - - def execute_with_counting(sql, name = nil, &block) - $query_count ||= 0 - $query_count += 1 unless IGNORED_SQL.any? { |r| sql =~ r } - execute_without_counting(sql, name, &block) - end - - alias_method_chain :execute, :counting - end - end - - module FixtureSetup - def fixtures(*tables) - table_names = tables.map { |t| t.to_s } - - fixtures = Fixtures.create_fixtures ActiverecordTestConnector::FIXTURES_PATH, table_names - @@loaded_fixtures = {} - @@fixture_cache = {} - - unless fixtures.nil? - if fixtures.instance_of?(Fixtures) - @@loaded_fixtures[fixtures.table_name] = fixtures - else - fixtures.each { |f| @@loaded_fixtures[f.table_name] = f } - end - end - - table_names.each do |table_name| - define_method(table_name) do |*fixtures| - @@fixture_cache[table_name] ||= {} - - instances = fixtures.map do |fixture| - if @@loaded_fixtures[table_name][fixture.to_s] - @@fixture_cache[table_name][fixture] ||= @@loaded_fixtures[table_name][fixture.to_s].find - else - raise StandardError, "No fixture with name '#{fixture}' found for table '#{table_name}'" - end - end - - instances.size == 1 ? instances.first : instances - end - end - end - end -end diff --git a/vendor/plugins/will_paginate/spec/finders_spec.rb b/vendor/plugins/will_paginate/spec/finders_spec.rb deleted file mode 100644 index 0782fbe..0000000 --- a/vendor/plugins/will_paginate/spec/finders_spec.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'spec_helper' -require 'will_paginate/finders/base' - -class Model - extend WillPaginate::Finders::Base -end - -describe WillPaginate::Finders::Base do - it "should define default per_page of 30" do - Model.per_page.should == 30 - end - - it "should allow to set custom per_page" do - begin - Model.per_page = 25 - Model.per_page.should == 25 - ensure - Model.per_page = 30 - end - end - - it "should result with WillPaginate::Collection" do - Model.expects(:wp_query) - Model.paginate(:page => nil).should be_instance_of(WillPaginate::Collection) - end - - it "should delegate pagination to wp_query" do - Model.expects(:wp_query).with({}, instance_of(WillPaginate::Collection), []) - Model.paginate :page => nil - end - - it "should complain when no hash parameters given" do - lambda { - Model.paginate - }.should raise_error(ArgumentError, 'parameter hash expected') - end - - it "should complain when no :page parameter present" do - lambda { - Model.paginate :per_page => 6 - }.should raise_error(ArgumentError, ':page parameter required') - end - - it "should complain when both :count and :total_entries are given" do - lambda { - Model.paginate :page => 1, :count => {}, :total_entries => 1 - }.should raise_error(ArgumentError, ':count and :total_entries are mutually exclusive') - end - - it "should never mangle options" do - options = { :page => 1 } - options.expects(:delete).never - options_before = options.dup - - Model.expects(:wp_query) - Model.paginate(options) - - options.should == options_before - end - - it "should provide paginated_each functionality" do - collection = stub('collection', :size => 5, :empty? => false, :per_page => 5) - collection.expects(:each).times(2).returns(collection) - last_collection = stub('collection', :size => 4, :empty? => false, :per_page => 5) - last_collection.expects(:each).returns(last_collection) - - params = { :order => 'id', :total_entries => 0 } - - Model.expects(:paginate).with(params.merge(:page => 2)).returns(collection) - Model.expects(:paginate).with(params.merge(:page => 3)).returns(collection) - Model.expects(:paginate).with(params.merge(:page => 4)).returns(last_collection) - - total = Model.paginated_each(:page => '2') { } - total.should == 14 - end -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/admin.rb b/vendor/plugins/will_paginate/spec/fixtures/admin.rb deleted file mode 100644 index 1d5e7f3..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/admin.rb +++ /dev/null @@ -1,3 +0,0 @@ -class Admin < User - has_many :companies, :finder_sql => 'SELECT * FROM companies' -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/developer.rb b/vendor/plugins/will_paginate/spec/fixtures/developer.rb deleted file mode 100644 index 7105355..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/developer.rb +++ /dev/null @@ -1,13 +0,0 @@ -class Developer < User - has_and_belongs_to_many :projects, :include => :topics, :order => 'projects.name' - - def self.with_poor_ones(&block) - with_scope :find => { :conditions => ['salary <= ?', 80000], :order => 'salary' } do - yield - end - end - - named_scope :poor, :conditions => ['salary <= ?', 80000], :order => 'salary' - - def self.per_page() 10 end -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/developers_projects.yml b/vendor/plugins/will_paginate/spec/fixtures/developers_projects.yml deleted file mode 100644 index cee359c..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/developers_projects.yml +++ /dev/null @@ -1,13 +0,0 @@ -david_action_controller: - developer_id: 1 - project_id: 2 - joined_on: 2004-10-10 - -david_active_record: - developer_id: 1 - project_id: 1 - joined_on: 2004-10-10 - -jamis_active_record: - developer_id: 2 - project_id: 1 \ No newline at end of file diff --git a/vendor/plugins/will_paginate/spec/fixtures/project.rb b/vendor/plugins/will_paginate/spec/fixtures/project.rb deleted file mode 100644 index 0f85ef5..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/project.rb +++ /dev/null @@ -1,15 +0,0 @@ -class Project < ActiveRecord::Base - has_and_belongs_to_many :developers, :uniq => true - - has_many :topics - # :finder_sql => 'SELECT * FROM topics WHERE (topics.project_id = #{id})', - # :counter_sql => 'SELECT COUNT(*) FROM topics WHERE (topics.project_id = #{id})' - - has_many :replies, :through => :topics do - def find_recent(params = {}) - with_scope :find => { :conditions => ['replies.created_at > ?', 15.minutes.ago] } do - find :all, params - end - end - end -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/projects.yml b/vendor/plugins/will_paginate/spec/fixtures/projects.yml deleted file mode 100644 index 74f3c32..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/projects.yml +++ /dev/null @@ -1,6 +0,0 @@ -active_record: - id: 1 - name: Active Record -action_controller: - id: 2 - name: Active Controller diff --git a/vendor/plugins/will_paginate/spec/fixtures/replies.yml b/vendor/plugins/will_paginate/spec/fixtures/replies.yml deleted file mode 100644 index 9a83c00..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/replies.yml +++ /dev/null @@ -1,29 +0,0 @@ -witty_retort: - id: 1 - topic_id: 1 - content: Birdman is better! - created_at: <%= 6.hours.ago.to_s(:db) %> - -another: - id: 2 - topic_id: 2 - content: Nuh uh! - created_at: <%= 1.hour.ago.to_s(:db) %> - -spam: - id: 3 - topic_id: 1 - content: Nice site! - created_at: <%= 1.hour.ago.to_s(:db) %> - -decisive: - id: 4 - topic_id: 4 - content: "I'm getting to the bottom of this" - created_at: <%= 30.minutes.ago.to_s(:db) %> - -brave: - id: 5 - topic_id: 4 - content: "AR doesn't scare me a bit" - created_at: <%= 10.minutes.ago.to_s(:db) %> diff --git a/vendor/plugins/will_paginate/spec/fixtures/reply.rb b/vendor/plugins/will_paginate/spec/fixtures/reply.rb deleted file mode 100644 index ecaf3c1..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/reply.rb +++ /dev/null @@ -1,7 +0,0 @@ -class Reply < ActiveRecord::Base - belongs_to :topic, :include => [:replies] - - named_scope :recent, :conditions => ['replies.created_at > ?', 15.minutes.ago] - - validates_presence_of :content -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/schema.rb b/vendor/plugins/will_paginate/spec/fixtures/schema.rb deleted file mode 100644 index 8831aad..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/schema.rb +++ /dev/null @@ -1,38 +0,0 @@ -ActiveRecord::Schema.define do - - create_table "users", :force => true do |t| - t.column "name", :text - t.column "salary", :integer, :default => 70000 - t.column "created_at", :datetime - t.column "updated_at", :datetime - t.column "type", :text - end - - create_table "projects", :force => true do |t| - t.column "name", :text - end - - create_table "developers_projects", :id => false, :force => true do |t| - t.column "developer_id", :integer, :null => false - t.column "project_id", :integer, :null => false - t.column "joined_on", :date - t.column "access_level", :integer, :default => 1 - end - - create_table "topics", :force => true do |t| - t.column "project_id", :integer - t.column "title", :string - t.column "subtitle", :string - t.column "content", :text - t.column "created_at", :datetime - t.column "updated_at", :datetime - end - - create_table "replies", :force => true do |t| - t.column "content", :text - t.column "created_at", :datetime - t.column "updated_at", :datetime - t.column "topic_id", :integer - end - -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/topic.rb b/vendor/plugins/will_paginate/spec/fixtures/topic.rb deleted file mode 100644 index 77be0dd..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/topic.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Topic < ActiveRecord::Base - has_many :replies, :dependent => :destroy, :order => 'replies.created_at DESC' - belongs_to :project - - named_scope :mentions_activerecord, :conditions => ['topics.title LIKE ?', '%ActiveRecord%'] -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/topics.yml b/vendor/plugins/will_paginate/spec/fixtures/topics.yml deleted file mode 100644 index 0a26904..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/topics.yml +++ /dev/null @@ -1,30 +0,0 @@ -futurama: - id: 1 - title: Isnt futurama awesome? - subtitle: It really is, isnt it. - content: I like futurama - created_at: <%= 1.day.ago.to_s(:db) %> - updated_at: - -harvey_birdman: - id: 2 - title: Harvey Birdman is the king of all men - subtitle: yup - content: He really is - created_at: <%= 2.hours.ago.to_s(:db) %> - updated_at: - -rails: - id: 3 - project_id: 1 - title: Rails is nice - subtitle: It makes me happy - content: except when I have to hack internals to fix pagination. even then really. - created_at: <%= 20.minutes.ago.to_s(:db) %> - -ar: - id: 4 - project_id: 1 - title: ActiveRecord sometimes freaks me out - content: "I mean, what's the deal with eager loading?" - created_at: <%= 15.minutes.ago.to_s(:db) %> diff --git a/vendor/plugins/will_paginate/spec/fixtures/user.rb b/vendor/plugins/will_paginate/spec/fixtures/user.rb deleted file mode 100644 index 4a57cf0..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/user.rb +++ /dev/null @@ -1,2 +0,0 @@ -class User < ActiveRecord::Base -end diff --git a/vendor/plugins/will_paginate/spec/fixtures/users.yml b/vendor/plugins/will_paginate/spec/fixtures/users.yml deleted file mode 100644 index ed2c03a..0000000 --- a/vendor/plugins/will_paginate/spec/fixtures/users.yml +++ /dev/null @@ -1,35 +0,0 @@ -david: - id: 1 - name: David - salary: 80000 - type: Developer - -jamis: - id: 2 - name: Jamis - salary: 150000 - type: Developer - -<% for digit in 3..10 %> -dev_<%= digit %>: - id: <%= digit %> - name: fixture_<%= digit %> - salary: 100000 - type: Developer -<% end %> - -poor_jamis: - id: 11 - name: Jamis - salary: 9000 - type: Developer - -admin: - id: 12 - name: admin - type: Admin - -goofy: - id: 13 - name: Goofy - type: Admin diff --git a/vendor/plugins/will_paginate/spec/rcov.opts b/vendor/plugins/will_paginate/spec/rcov.opts deleted file mode 100644 index 6b17c32..0000000 --- a/vendor/plugins/will_paginate/spec/rcov.opts +++ /dev/null @@ -1,2 +0,0 @@ ---exclude ^\/,^spec\/,core_ext.rb,deprecation.rb ---no-validator-links \ No newline at end of file diff --git a/vendor/plugins/will_paginate/spec/spec.opts b/vendor/plugins/will_paginate/spec/spec.opts deleted file mode 100644 index 14f5f13..0000000 --- a/vendor/plugins/will_paginate/spec/spec.opts +++ /dev/null @@ -1,2 +0,0 @@ ---colour ---reverse diff --git a/vendor/plugins/will_paginate/spec/spec_helper.rb b/vendor/plugins/will_paginate/spec/spec_helper.rb deleted file mode 100644 index 46a26e5..0000000 --- a/vendor/plugins/will_paginate/spec/spec_helper.rb +++ /dev/null @@ -1,76 +0,0 @@ -require 'rubygems' -gem 'rspec', '~> 1.1.4' -require 'spec' - -module MyExtras - protected - - def include_phrase(string) - PhraseMatcher.new(string) - end - - def collection(params = {}) - if params[:total_pages] - params[:per_page] = 1 - params[:total_entries] = params[:total_pages] - end - WillPaginate::Collection.new(params[:page] || 1, params[:per_page] || 30, params[:total_entries]) - end - - def have_deprecation - DeprecationMatcher.new - end -end - -Spec::Runner.configure do |config| - # config.include My::Pony, My::Horse, :type => :farm - config.include MyExtras - # config.predicate_matchers[:swim] = :can_swim? - - config.mock_with :mocha -end - -class PhraseMatcher - def initialize(string) - @string = string - @pattern = /\b#{string}\b/ - end - - def matches?(actual) - @actual = actual.to_s - @actual =~ @pattern - end - - def failure_message - "expected #{@actual.inspect} to contain phrase #{@string.inspect}" - end - - def negative_failure_message - "expected #{@actual.inspect} not to contain phrase #{@string.inspect}" - end -end - -class DeprecationMatcher - def initialize - @old_behavior = WillPaginate::Deprecation.behavior - @messages = [] - WillPaginate::Deprecation.behavior = lambda { |message, callstack| - @messages << message - } - end - - def matches?(block) - block.call - !@messages.empty? - ensure - WillPaginate::Deprecation.behavior = @old_behavior - end - - def failure_message - "expected block to raise a deprecation warning" - end - - def negative_failure_message - "expected block not to raise deprecation warnings, #{@messages.size} raised" - end -end diff --git a/vendor/plugins/will_paginate/spec/tasks.rake b/vendor/plugins/will_paginate/spec/tasks.rake deleted file mode 100644 index cb04366..0000000 --- a/vendor/plugins/will_paginate/spec/tasks.rake +++ /dev/null @@ -1,34 +0,0 @@ -require 'spec/rake/spectask' - -spec_opts = 'spec/spec.opts' - -desc 'Run all specs' -Spec::Rake::SpecTask.new(:spec) do |t| - t.libs << 'lib' << 'spec' - t.spec_opts = ['--options', spec_opts] -end - -namespace :spec do - desc 'Analyze spec coverage with RCov' - Spec::Rake::SpecTask.new(:rcov) do |t| - t.libs << 'lib' << 'spec' - t.spec_opts = ['--options', spec_opts] - t.rcov = true - t.rcov_opts = lambda do - IO.readlines('spec/rcov.opts').map { |l| l.chomp.split(" ") }.flatten - end - end - - desc 'Print Specdoc for all specs' - Spec::Rake::SpecTask.new(:doc) do |t| - t.libs << 'lib' << 'spec' - t.spec_opts = ['--format', 'specdoc', '--dry-run'] - end - - desc 'Generate HTML report' - Spec::Rake::SpecTask.new(:html) do |t| - t.libs << 'lib' << 'spec' - t.spec_opts = ['--format', 'html:doc/spec_results.html', '--diff'] - t.fail_on_error = false - end -end diff --git a/vendor/plugins/will_paginate/spec/view_helpers/action_view_spec.rb b/vendor/plugins/will_paginate/spec/view_helpers/action_view_spec.rb deleted file mode 100644 index 8b34a1b..0000000 --- a/vendor/plugins/will_paginate/spec/view_helpers/action_view_spec.rb +++ /dev/null @@ -1,343 +0,0 @@ -require 'spec_helper' -require 'action_controller' -require 'view_helpers/view_example_group' -require 'will_paginate/view_helpers/action_view' -require 'will_paginate/collection' - -ActionController::Routing::Routes.draw do |map| - map.connect 'dummy/page/:page', :controller => 'dummy' - map.connect 'dummy/dots/page.:page', :controller => 'dummy', :action => 'dots' - map.connect 'ibocorp/:page', :controller => 'ibocorp', - :requirements => { :page => /\d+/ }, - :defaults => { :page => 1 } - - map.connect ':controller/:action/:id' -end - -describe WillPaginate::ViewHelpers::ActionView do - before(:each) do - @view = ActionView::Base.new - @view.controller = DummyController.new - @view.request = @view.controller.request - @template = '<%= will_paginate collection, options %>' - end - - def request - @view.request - end - - def render(locals) - @view.render(:inline => @template, :locals => locals) - end - - ## basic pagination ## - - it "should render" do - paginate do |pagination| - assert_select 'a[href]', 3 do |elements| - validate_page_numbers [2,3,2], elements - assert_select elements.last, ':last-child', "Next »" - end - assert_select 'span', 1 - assert_select 'span.disabled:first-child', '« Previous' - assert_select 'em', '1' - pagination.first.inner_text.should == '« Previous 1 2 3 Next »' - end - end - - it "should render nothing when there is only 1 page" do - paginate(:per_page => 30).should be_empty - end - - it "should paginate with options" do - paginate({ :page => 2 }, :class => 'will_paginate', :previous_label => 'Prev', :next_label => 'Next') do - assert_select 'a[href]', 4 do |elements| - validate_page_numbers [1,1,3,3], elements - # test rel attribute values: - assert_select elements[1], 'a', '1' do |link| - link.first['rel'].should == 'prev start' - end - assert_select elements.first, 'a', "Prev" do |link| - link.first['rel'].should == 'prev start' - end - assert_select elements.last, 'a', "Next" do |link| - link.first['rel'].should == 'next' - end - end - assert_select 'em', '2' - end - end - - it "should paginate using a custom renderer class" do - paginate({}, :renderer => AdditionalLinkAttributesRenderer) do - assert_select 'a[default=true]', 3 - end - end - - it "should paginate using a custom renderer instance" do - renderer = WillPaginate::ViewHelpers::LinkRenderer.new - def renderer.gap() '~~' end - - paginate({ :per_page => 2 }, :inner_window => 0, :outer_window => 0, :renderer => renderer) do - assert_select 'span.my-gap', '~~' - end - - renderer = AdditionalLinkAttributesRenderer.new(:title => 'rendered') - paginate({}, :renderer => renderer) do - assert_select 'a[title=rendered]', 3 - end - end - - it "should have classnames on previous/next links" do - paginate do |pagination| - assert_select 'span.disabled.previous_page:first-child' - assert_select 'a.next_page[href]:last-child' - end - end - - it "should warn about :prev_label being deprecated" do - lambda { - paginate({ :page => 2 }, :prev_label => 'Deprecated') do - assert_select 'a[href]:first-child', 'Deprecated' - end - }.should have_deprecation - end - - it "should match expected markup" do - paginate - expected = <<-HTML - - HTML - expected.strip!.gsub!(/\s{2,}/, ' ') - expected_dom = HTML::Document.new(expected).root - - html_document.root.should == expected_dom - end - - it "should output escaped URLs" do - paginate({:page => 1, :per_page => 1, :total_entries => 2}, - :page_links => false, :params => { :tag => '
' }) - - assert_select 'a[href]', 1 do |links| - query = links.first['href'].split('?', 2)[1] - query.split('&').sort.should == %w(page=2 tag=%3Cbr%3E) - end - end - - ## advanced options for pagination ## - - it "should be able to render without container" do - paginate({}, :container => false) - assert_select 'div.pagination', 0, 'main DIV present when it shouldn\'t' - assert_select 'a[href]', 3 - end - - it "should be able to render without page links" do - paginate({ :page => 2 }, :page_links => false) do - assert_select 'a[href]', 2 do |elements| - validate_page_numbers [1,3], elements - end - end - end - - it "should have magic HTML ID for the container" do - paginate do |div| - div.first['id'].should be_nil - end - - # magic ID - paginate({}, :id => true) do |div| - div.first['id'].should == 'fixnums_pagination' - end - - # explicit ID - paginate({}, :id => 'custom_id') do |div| - div.first['id'].should == 'custom_id' - end - end - - ## other helpers ## - - it "should render a paginated section" do - @template = <<-ERB - <% paginated_section collection, options do %> - <%= content_tag :div, '', :id => "developers" %> - <% end %> - ERB - - paginate - assert_select 'div.pagination', 2 - assert_select 'div.pagination + div#developers', 1 - end - - ## parameter handling in page links ## - - it "should preserve parameters on GET" do - request.params :foo => { :bar => 'baz' } - paginate - assert_links_match /foo%5Bbar%5D=baz/ - end - - it "should not preserve parameters on POST" do - request.post - request.params :foo => 'bar' - paginate - assert_no_links_match /foo=bar/ - end - - it "should add additional parameters to links" do - paginate({}, :params => { :foo => 'bar' }) - assert_links_match /foo=bar/ - end - - it "should add anchor parameter" do - paginate({}, :params => { :anchor => 'anchor' }) - assert_links_match /#anchor$/ - end - - it "should remove arbitrary parameters" do - request.params :foo => 'bar' - paginate({}, :params => { :foo => nil }) - assert_no_links_match /foo=bar/ - end - - it "should override default route parameters" do - paginate({}, :params => { :controller => 'baz', :action => 'list' }) - assert_links_match %r{\Wbaz/list\W} - end - - it "should paginate with custom page parameter" do - paginate({ :page => 2 }, :param_name => :developers_page) do - assert_select 'a[href]', 4 do |elements| - validate_page_numbers [1,1,3,3], elements, :developers_page - end - end - end - - it "should paginate with complex custom page parameter" do - request.params :developers => { :page => 2 } - - paginate({ :page => 2 }, :param_name => 'developers[page]') do - assert_select 'a[href]', 4 do |links| - assert_links_match /\?developers%5Bpage%5D=\d+$/, links - validate_page_numbers [1,1,3,3], links, 'developers[page]' - end - end - end - - it "should paginate with custom route page parameter" do - request.symbolized_path_parameters.update :controller => 'dummy', :action => nil - paginate :per_page => 2 do - assert_select 'a[href]', 6 do |links| - assert_links_match %r{/page/(\d+)$}, links, [2, 3, 4, 5, 6, 2] - end - end - end - - it "should paginate with custom route with dot separator page parameter" do - request.symbolized_path_parameters.update :controller => 'dummy', :action => 'dots' - paginate :per_page => 2 do - assert_select 'a[href]', 6 do |links| - assert_links_match %r{/page\.(\d+)$}, links, [2, 3, 4, 5, 6, 2] - end - end - end - - it "should paginate with custom route and first page number implicit" do - request.symbolized_path_parameters.update :controller => 'ibocorp', :action => nil - paginate :page => 2, :per_page => 2 do - assert_select 'a[href]', 7 do |links| - assert_links_match %r{/ibocorp(?:/(\d+))?$}, links, [nil, nil, 3, 4, 5, 6, 3] - end - end - end - - ## internal hardcore stuff ## - - it "should be able to guess the collection name" do - collection = mock - collection.expects(:total_pages).returns(1) - - @template = '<%= will_paginate options %>' - @view.controller.controller_name = 'developers' - @view.assigns['developers'] = collection - - paginate(nil) - end - - it "should fail if the inferred collection is nil" do - @template = '<%= will_paginate options %>' - @view.controller.controller_name = 'developers' - - lambda { - paginate(nil) - }.should raise_error(ArgumentError, /@developers/) - end - - if ActionController::Base.respond_to? :rescue_responses - # only on Rails 2 - it "should set rescue response hook" do - ActionController::Base.rescue_responses['WillPaginate::InvalidPage'].should == :not_found - end - end -end - -class AdditionalLinkAttributesRenderer < WillPaginate::ViewHelpers::LinkRenderer - def initialize(link_attributes = nil) - super() - @additional_link_attributes = link_attributes || { :default => 'true' } - end - - def link(text, target, attributes = {}) - super(text, target, attributes.merge(@additional_link_attributes)) - end -end - -class DummyController - attr_reader :request - attr_accessor :controller_name - - def initialize - @request = DummyRequest.new - @url = ActionController::UrlRewriter.new(@request, @request.params) - end - - def params - @request.params - end - - def url_for(params) - @url.rewrite(params) - end -end - -class DummyRequest - attr_accessor :symbolized_path_parameters - - def initialize - @get = true - @params = {} - @symbolized_path_parameters = { :controller => 'foo', :action => 'bar' } - end - - def get? - @get - end - - def post - @get = false - end - - def relative_url_root - '' - end - - def params(more = nil) - @params.update(more) if more - @params - end -end diff --git a/vendor/plugins/will_paginate/spec/view_helpers/base_spec.rb b/vendor/plugins/will_paginate/spec/view_helpers/base_spec.rb deleted file mode 100644 index ed91a9f..0000000 --- a/vendor/plugins/will_paginate/spec/view_helpers/base_spec.rb +++ /dev/null @@ -1,64 +0,0 @@ -require 'spec_helper' -require 'will_paginate/view_helpers/base' -require 'will_paginate/array' - -describe WillPaginate::ViewHelpers::Base do - - include WillPaginate::ViewHelpers::Base - - describe "will_paginate" do - it "should render" do - collection = WillPaginate::Collection.new(1, 2, 4) - renderer = mock 'Renderer' - renderer.expects(:prepare).with(collection, instance_of(Hash), self) - renderer.expects(:to_html).returns('') - - will_paginate(collection, :renderer => renderer).should == '' - end - - it "should return nil for single-page collections" do - collection = mock 'Collection', :total_pages => 1 - will_paginate(collection).should be_nil - end - end - - describe "page_entries_info" do - before :all do - @array = ('a'..'z').to_a - end - - def info(params, options = {}) - options[:html] ||= false unless options.key?(:html) and options[:html].nil? - collection = Hash === params ? @array.paginate(params) : params - page_entries_info collection, options - end - - it "should display middle results and total count" do - info(:page => 2, :per_page => 5).should == "Displaying strings 6 - 10 of 26 in total" - end - - it "should output HTML by default" do - info({ :page => 2, :per_page => 5 }, :html => nil).should == - "Displaying strings 6 - 10 of 26 in total" - end - - it "should display shortened end results" do - info(:page => 7, :per_page => 4).should include_phrase('strings 25 - 26') - end - - it "should handle longer class names" do - collection = @array.paginate(:page => 2, :per_page => 5) - collection.first.stubs(:class).returns(mock('Class', :name => 'ProjectType')) - info(collection).should include_phrase('project types') - end - - it "should adjust output for single-page collections" do - info(('a'..'d').to_a.paginate(:page => 1, :per_page => 5)).should == "Displaying all 4 strings" - info(['a'].paginate(:page => 1, :per_page => 5)).should == "Displaying 1 string" - end - - it "should display 'no entries found' for empty collections" do - info([].paginate(:page => 1, :per_page => 5)).should == "No entries found" - end - end -end diff --git a/vendor/plugins/will_paginate/spec/view_helpers/link_renderer_base_spec.rb b/vendor/plugins/will_paginate/spec/view_helpers/link_renderer_base_spec.rb deleted file mode 100644 index a240f3f..0000000 --- a/vendor/plugins/will_paginate/spec/view_helpers/link_renderer_base_spec.rb +++ /dev/null @@ -1,84 +0,0 @@ -require 'spec_helper' -require 'will_paginate/view_helpers/link_renderer_base' -require 'will_paginate/collection' - -describe WillPaginate::ViewHelpers::LinkRendererBase do - - before do - @renderer = WillPaginate::ViewHelpers::LinkRendererBase.new - end - - it "should raise error when unprepared" do - lambda { - @renderer.send :param_name - }.should raise_error - end - - it "should prepare with collection and options" do - prepare({}, :param_name => 'mypage') - @renderer.send(:current_page).should == 1 - @renderer.send(:param_name).should == 'mypage' - end - - it "should have total_pages accessor" do - prepare :total_pages => 42 - lambda { - @renderer.send(:total_pages).should == 42 - }.should_not have_deprecation - end - - it "should clear old cached values when prepared" do - prepare({ :total_pages => 1 }, :param_name => 'foo') - @renderer.send(:total_pages).should == 1 - @renderer.send(:param_name).should == 'foo' - # prepare with different object and options: - prepare({ :total_pages => 2 }, :param_name => 'bar') - @renderer.send(:total_pages).should == 2 - @renderer.send(:param_name).should == 'bar' - end - - it "should have pagination definition" do - prepare({ :total_pages => 1 }, :page_links => true) - @renderer.pagination.should == [:previous_page, 1, :next_page] - end - - describe "visible page numbers" do - it "should calculate windowed visible links" do - prepare({ :page => 6, :total_pages => 11 }, :inner_window => 1, :outer_window => 1) - showing_pages 1, 2, :gap, 5, 6, 7, :gap, 10, 11 - end - - it "should eliminate small gaps" do - prepare({ :page => 6, :total_pages => 11 }, :inner_window => 2, :outer_window => 1) - # pages 4 and 8 appear instead of the gap - showing_pages 1..11 - end - - it "should support having no windows at all" do - prepare({ :page => 4, :total_pages => 7 }, :inner_window => 0, :outer_window => 0) - showing_pages 1, :gap, 4, :gap, 7 - end - - it "should adjust upper limit if lower is out of bounds" do - prepare({ :page => 1, :total_pages => 10 }, :inner_window => 2, :outer_window => 1) - showing_pages 1, 2, 3, 4, 5, :gap, 9, 10 - end - - it "should adjust lower limit if upper is out of bounds" do - prepare({ :page => 10, :total_pages => 10 }, :inner_window => 2, :outer_window => 1) - showing_pages 1, 2, :gap, 6, 7, 8, 9, 10 - end - - def showing_pages(*pages) - pages = pages.first.to_a if Array === pages.first or Range === pages.first - @renderer.send(:windowed_page_numbers).should == pages - end - end - - protected - - def prepare(collection_options, options = {}) - @renderer.prepare(collection(collection_options), options) - end - -end diff --git a/vendor/plugins/will_paginate/spec/view_helpers/view_example_group.rb b/vendor/plugins/will_paginate/spec/view_helpers/view_example_group.rb deleted file mode 100644 index cdeb0b1..0000000 --- a/vendor/plugins/will_paginate/spec/view_helpers/view_example_group.rb +++ /dev/null @@ -1,111 +0,0 @@ -unless $:.find { |p| p =~ %r{/html-scanner$} } - unless actionpack_path = $:.find { |p| p =~ %r{/actionpack(-[\d.]+)?/lib$} } - raise "cannot find ActionPack in load paths" - end - html_scanner_path = "#{actionpack_path}/action_controller/vendor/html-scanner" - $:.unshift(html_scanner_path) -end - -require 'action_controller/assertions/selector_assertions' - -class ViewExampleGroup < Spec::Example::ExampleGroup - - include ActionController::Assertions::SelectorAssertions - - def assert(value, message) - raise message unless value - end - - def paginate(collection = {}, options = {}, &block) - if collection.instance_of? Hash - page_options = { :page => 1, :total_entries => 11, :per_page => 4 }.merge(collection) - collection = [1].paginate(page_options) - end - - locals = { :collection => collection, :options => options } - - @render_output = render(locals) - @html_document = nil - - if block_given? - classname = options[:class] || WillPaginate::ViewHelpers.pagination_options[:class] - assert_select("div.#{classname}", 1, 'no main DIV', &block) - end - - @render_output - end - - def html_document - @html_document ||= HTML::Document.new(@render_output, true, false) - end - - def response_from_page_or_rjs - html_document.root - end - - def validate_page_numbers(expected, links, param_name = :page) - param_pattern = /\W#{CGI.escape(param_name.to_s)}=([^&]*)/ - - links.map { |e| - e['href'] =~ param_pattern - $1 ? $1.to_i : $1 - }.should == expected - end - - def assert_links_match(pattern, links = nil, numbers = nil) - links ||= assert_select 'div.pagination a[href]' do |elements| - elements - end - - pages = [] if numbers - - links.each do |el| - el['href'].should =~ pattern - if numbers - el['href'] =~ pattern - pages << ($1.nil?? nil : $1.to_i) - end - end - - pages.should == numbers if numbers - end - - def assert_no_links_match(pattern) - assert_select 'div.pagination a[href]' do |elements| - elements.each do |el| - el['href'] !~ pattern - end - end - end - - def build_message(message, pattern, *args) - built_message = pattern.dup - for value in args - built_message.sub! '?', value.inspect - end - built_message - end - -end - -Spec::Example::ExampleGroupFactory.register(:view_helpers, ViewExampleGroup) - -module HTML - Node.class_eval do - def inner_text - children.map(&:inner_text).join('') - end - end - - Text.class_eval do - def inner_text - self.to_s - end - end - - Tag.class_eval do - def inner_text - childless?? '' : super - end - end -end diff --git a/vendor/plugins/will_paginate/will_paginate.gemspec b/vendor/plugins/will_paginate/will_paginate.gemspec deleted file mode 100644 index ef5f4df..0000000 --- a/vendor/plugins/will_paginate/will_paginate.gemspec +++ /dev/null @@ -1,20 +0,0 @@ -Gem::Specification.new do |s| - s.name = 'will_paginate' - s.version = '2.5.0' - # s.date = '2008-10-27' - - s.summary = "Most awesome pagination solution for every web app" - s.description = "The will_paginate library provides a simple, yet powerful and extensible API for pagination and rendering of page links in templates." - - s.authors = ['Mislav Marohnić', 'PJ Hyett'] - s.email = 'mislav.marohnic@gmail.com' - s.homepage = 'http://github.com/mislav/will_paginate/wikis' - - s.has_rdoc = true - s.rdoc_options = ['--main', 'README.rdoc'] - s.rdoc_options << '--inline-source' << '--charset=UTF-8' - s.extra_rdoc_files = ['README.rdoc', 'LICENSE', 'CHANGELOG.rdoc'] - - s.files = %w(CHANGELOG.rdoc LICENSE README.rdoc Rakefile examples examples/apple-circle.gif examples/index.haml examples/index.html examples/pagination.css examples/pagination.sass init.rb lib lib/will_paginate lib/will_paginate.rb lib/will_paginate/array.rb lib/will_paginate/collection.rb lib/will_paginate/core_ext.rb lib/will_paginate/deprecation.rb lib/will_paginate/finders lib/will_paginate/finders.rb lib/will_paginate/finders/active_record lib/will_paginate/finders/active_record.rb lib/will_paginate/finders/active_record/named_scope.rb lib/will_paginate/finders/active_record/named_scope_patch.rb lib/will_paginate/finders/active_resource.rb lib/will_paginate/finders/base.rb lib/will_paginate/finders/data_mapper.rb lib/will_paginate/version.rb lib/will_paginate/view_helpers lib/will_paginate/view_helpers.rb lib/will_paginate/view_helpers/action_view.rb lib/will_paginate/view_helpers/base.rb lib/will_paginate/view_helpers/link_renderer.rb lib/will_paginate/view_helpers/link_renderer_base.rb spec spec/collection_spec.rb spec/console spec/console_fixtures.rb spec/database.yml spec/finders spec/finders/active_record_spec.rb spec/finders/active_resource_spec.rb spec/finders/activerecord_test_connector.rb spec/finders_spec.rb spec/fixtures spec/fixtures/admin.rb spec/fixtures/developer.rb spec/fixtures/developers_projects.yml spec/fixtures/project.rb spec/fixtures/projects.yml spec/fixtures/replies.yml spec/fixtures/reply.rb spec/fixtures/schema.rb spec/fixtures/topic.rb spec/fixtures/topics.yml spec/fixtures/user.rb spec/fixtures/users.yml spec/rcov.opts spec/spec.opts spec/spec_helper.rb spec/tasks.rake spec/view_helpers spec/view_helpers/action_view_spec.rb spec/view_helpers/base_spec.rb spec/view_helpers/link_renderer_base_spec.rb spec/view_helpers/view_example_group.rb) - s.test_files = %w(spec/collection_spec.rb spec/console spec/console_fixtures.rb spec/database.yml spec/finders spec/finders/active_record_spec.rb spec/finders/active_resource_spec.rb spec/finders/activerecord_test_connector.rb spec/finders_spec.rb spec/fixtures spec/fixtures/admin.rb spec/fixtures/developer.rb spec/fixtures/developers_projects.yml spec/fixtures/project.rb spec/fixtures/projects.yml spec/fixtures/replies.yml spec/fixtures/reply.rb spec/fixtures/schema.rb spec/fixtures/topic.rb spec/fixtures/topics.yml spec/fixtures/user.rb spec/fixtures/users.yml spec/rcov.opts spec/spec.opts spec/spec_helper.rb spec/tasks.rake spec/view_helpers spec/view_helpers/action_view_spec.rb spec/view_helpers/base_spec.rb spec/view_helpers/link_renderer_base_spec.rb spec/view_helpers/view_example_group.rb) -end \ No newline at end of file